[INFO] cloning repository https://github.com/erickochen/purple
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/erickochen/purple" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ferickochen%2Fpurple", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ferickochen%2Fpurple'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] ba483e252dd30c1d21d1e7fb7cdd16d9564d11c4
[INFO] testing erickochen/purple against 1.94.0 for beta-1.95-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ferickochen%2Fpurple" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/erickochen/purple
[INFO] finished tweaking git repo https://github.com/erickochen/purple
[INFO] tweaked toml for git repo https://github.com/erickochen/purple written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/erickochen/purple on toolchain 1.94.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.94.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/erickochen/purple 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.94.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded clap_complete v4.5.66
[INFO] [stderr]   Downloaded bumpalo v3.20.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.94.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 67aea2cc36a23f43d4de8ad77f461cdd5e66a636cb1fcea5fdd76563969f61d4
[INFO] running `Command { std: "docker" "start" "-a" "67aea2cc36a23f43d4de8ad77f461cdd5e66a636cb1fcea5fdd76563969f61d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "67aea2cc36a23f43d4de8ad77f461cdd5e66a636cb1fcea5fdd76563969f61d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "67aea2cc36a23f43d4de8ad77f461cdd5e66a636cb1fcea5fdd76563969f61d4", kill_on_drop: false }`
[INFO] [stdout] 67aea2cc36a23f43d4de8ad77f461cdd5e66a636cb1fcea5fdd76563969f61d4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=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" "+1.94.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] aa3d99ac119fbfa4a8d01b520dddb0abb0a47bf05d852ca768682cc3647e911b
[INFO] running `Command { std: "docker" "start" "-a" "aa3d99ac119fbfa4a8d01b520dddb0abb0a47bf05d852ca768682cc3647e911b", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling libc v0.2.182
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling unicode-segmentation v1.12.0
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling instability v0.3.11
[INFO] [stderr]    Compiling unicode-width v0.2.2
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling powerfmt v0.2.0
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling deranged v0.5.6
[INFO] [stderr]    Compiling num_threads v0.1.7
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling num-conv v0.2.0
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]    Compiling line-clipping v0.3.5
[INFO] [stderr]    Compiling adler2 v2.0.1
[INFO] [stderr]    Compiling simd-adler32 v0.3.8
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]    Compiling clap_lex v1.0.0
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling rustls v0.23.36
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling syn v2.0.116
[INFO] [stderr]    Compiling clap_builder v4.5.59
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling webpki-roots v1.0.6
[INFO] [stderr]    Compiling openssl-probe v0.2.1
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling anyhow v1.0.101
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]    Compiling webpki-roots v0.26.11
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling compact_str v0.9.0
[INFO] [stderr]    Compiling lru v0.16.3
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling openssl-sys v0.9.111
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling openssl v0.10.75
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling rustls-webpki v0.103.9
[INFO] [stderr]    Compiling kasuari v0.4.11
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling strum v0.27.2
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling ratatui-core v0.1.0
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling clap v4.5.59
[INFO] [stderr]    Compiling clap_complete v4.5.66
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling ratatui-widgets v0.3.0
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.0
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling ratatui-macros v0.7.0
[INFO] [stderr]    Compiling ratatui v0.30.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling ureq v2.12.1
[INFO] [stderr]    Compiling purple-ssh v1.19.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 49.46s
[INFO] running `Command { std: "docker" "inspect" "aa3d99ac119fbfa4a8d01b520dddb0abb0a47bf05d852ca768682cc3647e911b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "aa3d99ac119fbfa4a8d01b520dddb0abb0a47bf05d852ca768682cc3647e911b", kill_on_drop: false }`
[INFO] [stdout] aa3d99ac119fbfa4a8d01b520dddb0abb0a47bf05d852ca768682cc3647e911b
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=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" "+1.94.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 97956ad99f1c2168cdde4ce998a0190981517e8d18430c994f63f8c519d75f0f
[INFO] running `Command { std: "docker" "start" "-a" "97956ad99f1c2168cdde4ce998a0190981517e8d18430c994f63f8c519d75f0f", kill_on_drop: false }`
[INFO] [stderr]    Compiling purple-ssh v1.19.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 16.81s
[INFO] running `Command { std: "docker" "inspect" "97956ad99f1c2168cdde4ce998a0190981517e8d18430c994f63f8c519d75f0f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "97956ad99f1c2168cdde4ce998a0190981517e8d18430c994f63f8c519d75f0f", kill_on_drop: false }`
[INFO] [stdout] 97956ad99f1c2168cdde4ce998a0190981517e8d18430c994f63f8c519d75f0f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=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" "+1.94.0" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 74745bea58959448c0a25c24d2e852fb84e80224c02ab26703497dbc7486a233
[INFO] running `Command { std: "docker" "start" "-a" "74745bea58959448c0a25c24d2e852fb84e80224c02ab26703497dbc7486a233", 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/purple_ssh-3a7b3ba8d594f237)
[INFO] [stdout] 
[INFO] [stdout] running 847 tests
[INFO] [stdout] test providers::config::tests::test_auto_sync_default_false_for_proxmox ... ok
[INFO] [stdout] test providers::config::tests::test_alias_prefix_override ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_default_all_others_true ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_default_true_for_non_proxmox ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_explicit_false_non_proxmox ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_explicit_true ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_default_proxmox_false ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_not_written_when_default ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_false_variants ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_override_do_to_false ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_true_variants ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_values ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_override_proxmox_to_true ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_malformed_value_treated_as_true ... ok
[INFO] [stdout] test providers::config::tests::test_blank_lines_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_written_only_when_non_default ... ok
[INFO] [stdout] test providers::config::tests::test_comments_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_configured_providers_empty ... ok
[INFO] [stdout] test providers::config::tests::test_configured_providers_returns_all ... ok
[INFO] [stdout] test providers::config::tests::test_configured_providers_returns_all_sections ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_digitalocean ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_from_short_label ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_unknown_provider ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_proxmox ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_upcloud ... ok
[INFO] [stdout] test providers::config::tests::test_default_user_root_when_not_specified ... ok
[INFO] [stdout] test providers::config::tests::test_multiple_providers ... ok
[INFO] [stdout] test providers::config::tests::test_non_proxmox_url_parsed_but_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_defaults_applied ... ok
[INFO] [stdout] test providers::config::tests::test_duplicate_section_first_wins ... ok
[INFO] [stdout] test providers::config::tests::test_default_url_empty ... ok
[INFO] [stdout] test providers::config::tests::test_parse_url_and_verify_tls ... ok
[INFO] [stdout] test providers::config::tests::test_default_user_is_root ... ok
[INFO] [stdout] test providers::config::tests::test_parse_value_with_equals ... ok
[INFO] [stdout] test providers::config::tests::test_parse_whitespace_around_key_value ... ok
[INFO] [stdout] test providers::config::tests::test_parse_whitespace_in_section_name ... ok
[INFO] [stdout] test providers::config::tests::test_proxmox_url_fallback_in_section ... ok
[INFO] [stdout] test providers::config::tests::test_parse_duplicate_sections_first_wins ... ok
[INFO] [stdout] test providers::config::tests::test_proxmox_token_with_exclamation ... ok
[INFO] [stdout] test providers::config::tests::test_proxmox_url_parsed ... ok
[INFO] [stdout] test providers::config::tests::test_non_proxmox_url_not_written ... ok
[INFO] [stdout] test providers::config::tests::test_remove_nonexistent_section_noop ... ok
[INFO] [stdout] test providers::config::tests::test_default_identity_file_empty ... ok
[INFO] [stdout] test providers::config::tests::test_remove_section_keeps_others ... ok
[INFO] [stdout] test providers::config::tests::test_section_lookup ... ok
[INFO] [stdout] test providers::config::tests::test_section_by_name ... ok
[INFO] [stdout] test providers::config::tests::test_section_lookup_found ... ok
[INFO] [stdout] test providers::config::tests::test_line_without_equals_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_section_lookup_missing ... ok
[INFO] [stdout] test providers::config::tests::test_remove_section_all ... ok
[INFO] [stdout] test providers::config::tests::test_remove_section ... ok
[INFO] [stdout] test providers::config::tests::test_serialize_roundtrip_single_provider ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_multiple_adds ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_add ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_replace ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_replaces_existing ... ok
[INFO] [stdout] test providers::config::tests::test_token_with_equals_sign ... ok
[INFO] [stdout] test providers::config::tests::test_unknown_key_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_user_override ... ok
[INFO] [stdout] test providers::config::tests::test_verify_tls_default_true ... ok
[INFO] [stdout] test providers::config::tests::test_verify_tls_false_variants ... ok
[INFO] [stdout] test providers::config::tests::test_verify_tls_true_variants ... ok
[INFO] [stdout] test providers::config::tests::test_whitespace_around_key_value ... ok
[INFO] [stdout] test providers::config::tests::test_verify_tls_values ... ok
[INFO] [stdout] test providers::config::tests::test_parse_unknown_provider_still_parsed ... ok
[INFO] [stdout] test providers::config::tests::test_whitespace_around_section_name ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_default_tags_empty ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_empty_networks_skipped ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_extra_fields_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_parse_empty ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_id_is_u64 ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_large_id ... ok
[INFO] [stdout] test providers::config::tests::test_parse_key_field_sets_identity_file ... ok
[INFO] [stdout] test providers::config::tests::test_parse_single_section ... ok
[INFO] [stdout] test providers::config::tests::test_url_and_verify_tls_round_trip ... ok
[INFO] [stdout] test providers::config::tests::test_parse_multiple_sections ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_multiple_public_v4_uses_first ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_multiple_private_v4_no_public ... ok
[INFO] [stdout] test providers::config::tests::test_parse_unknown_keys_ignored ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_private_only_skipped ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_parse_droplet_response ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_both_empty_skipped ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_both_null_skipped ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_prefers_v4_over_v6 ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_private_v4_public_v6_uses_v6 ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_default_labels_empty ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_dual_stack_prefers_v4 ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_private_v6_not_used ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_adds_new ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_server_list ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_ipv4_skipped ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_v6_skipped ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_empty_droplet_list_stops_pagination ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_tags_preserved ... ok
[INFO] [stdout] test providers::config::tests::test_parse_duplicate_sections_trailing ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_meta_extra_fields_ignored ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_v6_default_empty ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_ipv6_only_droplet_uses_v6 ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_network_ip_extra_fields_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_section_not_found ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_pagination_continues_when_total_exceeds_fetched ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_ipinfo_extra_fields_ignored ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_pagination_stops_when_fetched_reaches_total ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_extra_fields_ignored ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_label_empty_value_uses_key ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_labels_sorted ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_labels_to_tags_key_value ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_large_id ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_labels_with_special_chars ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_labels_to_tags_empty_value ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_multiple_labels ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_null_v6_field ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_multiple_servers_parsed ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_no_ip_skipped ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_v6_cidr_128 ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_pagination_extra_fields_ignored ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_pagination_stops ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_prefers_v4_over_v6 ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_v6_only_fallback ... ok
[INFO] [stdout] test providers::hetzner::tests::test_ipv6_only_server_uses_v6 ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_pagination_continues ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_many_labels_sorted ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_100_128_not_cgnat ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_v6_without_cidr ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_100_range_boundary ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_ipv4_with_v6_uses_v6 ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_name ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_100_63_not_cgnat ... ok
[INFO] [stdout] test providers::hetzner::tests::test_parse_hetzner_response ... ok
[INFO] [stdout] test providers::linode::tests::test_ipv6_only_instance_uses_v6 ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_15_not_private ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_32_not_private ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_range_boundary ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_loopback ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_public_ranges ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_cgnat_100_64_is_private ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_all_private_falls_back_to_first ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_default_tags_empty ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_empty_data_stops_pagination ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_empty_ipv4_empty_ipv6_returns_none ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_all_boundary_octets ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_nonnumeric ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_empty_label ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_cidr_stripped ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_field_omitted_falls_to_private ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_empty_string ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_no_cidr ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_large_id ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_missing_ipv6_field ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_null ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_private_ip_first_then_public ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_private_only_falls_back_to_private ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_private_v4_and_v6_prefers_private_v4 ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_tags_preserved ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_public_ipv4_preferred_over_ipv6 ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_multiple_instances_parsed ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_no_ips_at_all ... ok
[INFO] [stdout] test providers::linode::tests::test_parse_linode_response ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_disabled_explicit_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_disabled_simple ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_multiple_public_ips_uses_first ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_pagination_continues ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_pagination_stops ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_explicit ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_disabled_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_explicit_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_many_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_only_commas ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_2_not_treated_as_enabled ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_simple ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_explicit_zero_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_with_spaces ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_disabled_explicit ... ok
[INFO] [stdout] test providers::linode::tests::test_parse_linode_prefers_public_ip ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_garbage_value ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_none ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_complex_token ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_already_prefixed ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_ldap_user ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_without_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_ip_comma_separated_treated_as_single ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_with_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_ip_unusable_filtered ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_ip_with_cidr_stripped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_partial_null_in_array ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_template_as_boolean ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_template_as_null ... ok
[INFO] [stdout] test providers::config::tests::test_parse_comments_and_blanks ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_template_as_false ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_all_null_fields ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resources_pve8_comma_tags ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_null_name ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_null_vmid ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_boolean_value ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_prepends_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_empty_map ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_empty_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_non_sequential ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_ignores_non_numeric_suffix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_null_value ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_skips_non_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_full_guest_agent_response_with_null_result ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_empty_interfaces ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_number_value ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_empty_ip_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_ip_with_cidr_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_sorted ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_ipv4_preferred ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_ip_field ... ok
[INFO] [stdout] test providers::proxmox::tests::test_full_guest_agent_response_with_null_data ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_ipv6_fallback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_loopback_then_real_ip ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_response_null_result ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_result_null_is_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_null_status ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_response_with_null_interface_name_in_array ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_result_missing_is_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_link_local ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_link_local_uppercase ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_loopback_ip_on_non_lo_iface ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_picks_ipv4_from_second_interface ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_strips_cidr_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_mixed_case_link_local ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_realistic_multi_nic ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_response_empty_data_object ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_ipv6_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_loopback_range ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_response_null_data ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_interface_null_ip_addresses ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_dhcp_falls_back_to_ip6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_interface_null_name ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_ip6_auto_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_prefers_ipv4_over_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_manual_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_is_unusable_ip_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_is_unusable_ip_normal_v4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_array_to_none ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_boolean_false_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_only_ip6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_number_to_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_zero_to_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_strips_cidr_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_two_ipv4_picks_first ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_ip_address_null_fields ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_ip6_manual_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_is_unusable_ip_unspecified_v6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_boolean_false_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_null_to_none ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_boolean_true_to_one ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_missing_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_null_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet6_loopback_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet6_multiple_tokens ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_tab_separated ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_with_scope_info ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_takes_precedence_over_ip_addresses ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_interface_null_ip_addresses ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_format_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_format_skips_link_local ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_interface_null_name ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_format_skips_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_format_ipv4_preferred_over_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_boolean_true ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet6_fallback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_float_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet6_global_with_scope ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_preferred ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_large_number_wraps ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_empty_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet6_skips_link_local ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet6_type ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_leading_whitespace ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_preferred_over_inet6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_skips_link_local_v4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_skips_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_strips_cidr ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_type_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_multi_interface_with_lo_first ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_full_line ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_dhcp_falls_back_to_ip6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_ip6_auto_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_multi_nic_net0_dhcp_net1_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_manual_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_resource_type_tag_no_duplicate ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_ipv6_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_ip6_manual_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_link_local_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_link_local_ipv6_colon ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_link_local_ipv6_zone_id ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_link_local_v4_falls_through_to_inet6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_only_lo_interface ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_mixed_case_link_local_inet6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_name_fallback_when_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_multi_nic_ipconfig_fallback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_api_suffix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_api_suffix_trailing_slash ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_empty_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_bare ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_http_preserved ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_multiple_trailing_slashes ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_just_api_path ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_loopback_ip_on_non_lo_iface ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_link_local_ipv6_zone_id_uppercase ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_loopback_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_no_port ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_with_subpath ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_cluster_resources ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_both_dhcp ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_guest_agent_response_double_wrapped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_dhcp ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_dhcp_with_ip6_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_auto ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_dhcp_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_auto_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_dhcp ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_only ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ipv4_preferred_over_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_trailing_slash ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_trailing_slashes_and_api ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_whitespace ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_whitespace_only ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_manual_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_dhcp_and_ip6_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_no_trailing ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_interfaces ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_manual_with_ip6_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_no_ip_key ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_auto_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_only ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ipv4_preferred_over_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_manual_with_ip6_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve8_comma_tags ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve7_semicolon_tags ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_dhcp ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve_tags_comma_separated ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve_space_tags ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_dhcp_with_ip6_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_whitespace_around_parts ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_auto ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_dhcp_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve_tags_mixed_separators ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_single_tag ... ok
[INFO] [stdout] test providers::proxmox::tests::test_resource_type_filter_storage_excluded ... ok
[INFO] [stdout] test providers::proxmox::tests::test_resource_type_tag_added ... ok
[INFO] [stdout] test providers::proxmox::tests::test_resource_type_tag_no_duplicate_when_pve_tag_matches ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_commas ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_consecutive_separators_produce_no_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_server_id_format_lxc ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_lowercased ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_mixed ... ok
[INFO] [stdout] test providers::proxmox::tests::test_server_id_format ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_semicolons ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_link_local_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_mixed_all_separators ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_link_local_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_loopback_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_spaces ... ok
[INFO] [stdout] test providers::proxmox::tests::test_usable_ip_private ... ok
[INFO] [stdout] test providers::proxmox::tests::test_usable_ip_public ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_whitespace ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_loopback_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_template_filtered ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_integer ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_integer_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_null ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_missing ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmid_zero_is_valid ... ok
[INFO] [stdout] test providers::sync::tests::test_build_alias ... ok
[INFO] [stdout] test providers::sync::tests::test_build_alias_prefix_with_hyphen ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_flatten_deserialization ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_default ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_boolean ... ok
[INFO] [stdout] test providers::sync::tests::test_deduplicate_alias_excluding_chain ... ok
[INFO] [stdout] test providers::sync::tests::test_build_alias_long_names ... ok
[INFO] [stdout] test providers::sync::tests::test_find_hosts_by_provider_mixed_includes_and_toplevel ... ok
[INFO] [stdout] test providers::sync::tests::test_find_hosts_by_provider_in_includes ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_consecutive_specials ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_dots_and_underscores ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_string ... ok
[INFO] [stdout] test providers::sync::tests::test_find_hosts_by_provider_wrong_provider_name ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_boolean_false ... ok
[INFO] [stdout] test providers::sync::tests::test_deduplicate_alias_excluding_self ... ok
[INFO] [stdout] test providers::sync::tests::test_find_hosts_by_provider_empty_includes ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_long_mixed_separators ... ok
[INFO] [stdout] test providers::sync::tests::test_deduplicate_alias_excluding_none ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_mixed_special_chars ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_emoji ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_leading_special ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_tabs_and_newlines ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_numbers_only ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_single_special_char ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_trailing_special ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_unicode ... ok
[INFO] [stdout] test providers::sync::tests::test_set_host_tags_empty_clears_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_adds_new_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_applies_identity_file_from_section ... ok
[INFO] [stdout] test providers::sync::tests::test_set_host_provider_updates_existing ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_single_char ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_alias_collision_dedup ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_combined_add_update_remove ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_deduplicates_alias ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_adds_group_header_on_first_host ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_applies_user_from_section ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_whitespace_only ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_add_count ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dedup_server_id_in_response ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_all_symbol_name_uses_server_fallback ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_duplicate_local_server_id_keeps_first ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_no_mutations ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_duplicate_server_id_deduped ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_duplicate_server_id_in_remote_skipped ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_ip_existing_host_counted_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_alias_prefix ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_remove_count ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_remove_count_preserves_config ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_remove_excludes_included_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_rename_no_renames_tracked ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_update_preserves_config ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_ip_existing_host_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_ip_not_added ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_ip_with_tags_not_added ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_user_not_set ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_remote_empty_config_noop ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_include_host_skips_remove ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_idempotent_same_data ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_merges_new_provider_tag_with_user_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_no_duplicate_header_on_repeated_sync ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_include_host_skips_update ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_host_in_entries_map_but_alias_changed_by_another_provider ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_no_group_header_for_second_host ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_identity_file_set_on_new_host ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_no_rename_when_prefix_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_mixed_resolved_empty_and_missing ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_no_double_blank_between_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_orphaned_provider_marker_counts_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_preserves_user_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_all_when_remote_empty ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_recognizes_include_hosts_prevents_duplicate_add ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_manual_comment_survives_cleanup ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_merge_case_insensitive ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_deletes_truly_gone_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_skips_empty_ip_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_cleans_up_group_header ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_removes_deleted ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_and_ip_change_simultaneously ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_and_tag_change_simultaneously ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_removes_orphan_header ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_only_affects_own_provider ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_dry_run_no_mutation ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_removes_header_when_all_hosts_deleted ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_and_ip_change ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_self_exclusion_no_collision ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_skips_included_host ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_stable_with_manual_collision ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_case_insensitive_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_renames_on_prefix_change ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_clears_stale_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_replaces_local_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_merge_case_insensitive_no_duplicate ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_result_counts_add_up ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_case_insensitive_no_update ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_replaces_local ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_unchanged_when_matching ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_merge_preserves_local_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_order_insensitive ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tags_cleared_remotely_preserved_locally ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_trimmed_remote_triggers_merge ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_whitespace_trimmed_on_store ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_two_providers_independent ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_server_name_change_updates_alias ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_merge_adds_new_remote_tag ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_result_default ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_unicode_name_uses_ascii_fallback ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_with_rename ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_empty_ip_address_skipped ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_updates_changed_ip ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_group_header_with_existing_trailing_blank ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_updates_changed_tags ... ok
[INFO] [stdout] test providers::tests::test_display_name_unknown_returns_input ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_without_remove_flag_keeps_deleted ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_writes_provider_tags ... ok
[INFO] [stdout] test providers::tests::test_display_name_all_providers ... ok
[INFO] [stdout] test providers::tests::test_get_provider_proxmox ... ok
[INFO] [stdout] test providers::tests::test_get_provider_hetzner ... ok
[INFO] [stdout] test providers::tests::test_get_provider_all_known ... ok
[INFO] [stdout] test providers::tests::test_get_provider_all_names_resolve ... ok
[INFO] [stdout] test providers::tests::test_get_provider_case_sensitive_and_unknown ... ok
[INFO] [stdout] test providers::tests::test_get_provider_digitalocean ... ok
[INFO] [stdout] test providers::tests::test_get_provider_linode ... ok
[INFO] [stdout] test providers::tests::test_get_provider_vultr ... ok
[INFO] [stdout] test providers::tests::test_get_provider_upcloud ... ok
[INFO] [stdout] test providers::tests::test_get_provider_with_config_proxmox_uses_url ... ok
[INFO] [stdout] test providers::tests::test_get_provider_with_config_unknown_returns_none ... ok
[INFO] [stdout] test providers::tests::test_provider_display_name_all ... ok
[INFO] [stdout] test providers::tests::test_provider_display_name_unknown ... ok
[INFO] [stdout] test providers::tests::test_get_provider_with_config_non_proxmox_delegates ... ok
[INFO] [stdout] test providers::tests::test_provider_error_debug_http ... ok
[INFO] [stdout] test providers::tests::test_provider_error_debug_partial_result ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_auth ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_http ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_parse ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_rate_limited ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_partial_result ... ok
[INFO] [stdout] test providers::tests::test_provider_host_clone ... ok
[INFO] [stdout] test providers::tests::test_provider_names_contains_all ... ok
[INFO] [stdout] test providers::tests::test_get_provider_unknown_returns_none ... ok
[INFO] [stdout] test providers::tests::test_provider_host_construction ... ok
[INFO] [stdout] test providers::tests::test_provider_names_count ... ok
[INFO] [stdout] test providers::tests::test_provider_host_empty_fields ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_large_batch ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_cancelled ... ok
[INFO] [stdout] test providers::tests::test_provider_names_has_all_six ... ok
[INFO] [stdout] test providers::tests::test_provider_short_labels ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_empty ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_bare_ipv6 ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv4_passthrough ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv6_full_notation ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv6_with_64 ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv6_with_prefix ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv4_with_8 ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_multiple_slashes ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_digit_then_letters_not_stripped ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_slash_without_digits ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv4_with_32 ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_empty_interfaces ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_slash_with_letters ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_private_not_in_public ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_trailing_slash ... ok
[INFO] [stdout] test providers::upcloud::tests::test_detail_empty_interfaces ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_filters_by_type ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_multiple_addresses_on_same_interface ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_just_slash ... ok
[INFO] [stdout] test providers::upcloud::tests::test_labels_only_no_tags ... ok
[INFO] [stdout] test providers::upcloud::tests::test_empty_server_list ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_two_public_interfaces ... ok
[INFO] [stdout] test providers::upcloud::tests::test_pagination_continues_when_count_equals_limit ... ok
[INFO] [stdout] test providers::upcloud::tests::test_pagination_stops_when_count_less_than_limit ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_no_matching_type ... ok
[INFO] [stdout] test providers::upcloud::tests::test_parse_detail_missing_networking ... ok
[INFO] [stdout] test providers::upcloud::tests::test_parse_missing_tags_and_labels ... ok
[INFO] [stdout] test providers::upcloud::tests::test_parse_server_detail_with_networking ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_across_multiple_public_interfaces ... ok
[INFO] [stdout] test providers::upcloud::tests::test_parse_server_list_response ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_both_placeholders ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_empty ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_multiple_public_v4_uses_first ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_placeholder_ipv4_falls_through_to_ipv6 ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_public_empty_addresses ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_private_only ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_public_ipv6_fallback ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_skips_placeholder_ipv4 ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_skips_placeholder_ipv6 ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_utility_skipped ... ok
[INFO] [stdout] test providers::upcloud::tests::test_server_name_hostname_fallback ... ok
[INFO] [stdout] test providers::upcloud::tests::test_server_name_title_preferred ... ok
[INFO] [stdout] test providers::upcloud::tests::test_server_uuid_is_string ... ok
[INFO] [stdout] test providers::upcloud::tests::test_server_name_uses_title_when_present ... ok
[INFO] [stdout] test providers::upcloud::tests::test_tags_lowercased_and_sorted ... ok
[INFO] [stdout] test providers::upcloud::tests::test_tags_only_no_labels ... ok
[INFO] [stdout] test providers::upcloud::tests::test_tags_combined_and_sorted ... ok
[INFO] [stdout] test providers::vultr::tests::test_parse_instance_response ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_utility_interface_ignored ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_public_ipv4 ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_cursor_pagination_empty_next_stops ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_default_tags_empty ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_both_placeholder_skipped ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_cursor_pagination_has_next ... ok
[INFO] [stdout] test providers::upcloud::tests::test_tags_label_empty_value_key_only ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_default_v6_empty_string ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_ip_skipped ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_instance_list_stops ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_v4_and_empty_v6 ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_v4_and_valid_v6 ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_extra_fields_ignored ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_label_with_special_chars ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_meta_extra_fields_ignored ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_missing_next_link ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_multiple_tags ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_placeholder_v4_no_v6_field ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_prefers_v4_over_v6 ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_string_id_preserved ... ok
[INFO] [stdout] test snippet::tests::test_get_found ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_tags_preserved ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_v4_zero_not_empty ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_v6_fallback ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_v6_placeholder_only ... ok
[INFO] [stdout] test snippet::tests::test_name_with_equals_roundtrip ... ok
[INFO] [stdout] test snippet::tests::test_get_not_found ... ok
[INFO] [stdout] test snippet::tests::test_parse_command_with_equals ... ok
[INFO] [stdout] test snippet::tests::test_parse_comments_and_blanks ... ok
[INFO] [stdout] test snippet::tests::test_parse_duplicate_sections_first_wins ... ok
[INFO] [stdout] test snippet::tests::test_parse_line_without_equals_ignored ... ok
[INFO] [stdout] test snippet::tests::test_parse_empty ... ok
[INFO] [stdout] test snippet::tests::test_parse_multiple_snippets ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_valid_v4_ignores_placeholder_v6 ... ok
[INFO] [stdout] test snippet::tests::test_description_optional ... ok
[INFO] [stdout] test snippet::tests::test_description_with_equals ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_label ... ok
[INFO] [stdout] test snippet::tests::test_parse_section_without_close_bracket ... ok
[INFO] [stdout] test snippet::tests::test_parse_trailing_content_after_last_section ... ok
[INFO] [stdout] test snippet::tests::test_parse_single_snippet ... ok
[INFO] [stdout] test snippet::tests::test_parse_unknown_keys_ignored ... ok
[INFO] [stdout] test snippet::tests::test_parse_whitespace_around_key_value ... ok
[INFO] [stdout] test snippet::tests::test_remove ... ok
[INFO] [stdout] test snippet::tests::test_remove_nonexistent_noop ... ok
[INFO] [stdout] test snippet::tests::test_save_roundtrip ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_multiple_instances_parsed ... ok
[INFO] [stdout] test snippet::tests::test_parse_only_comments_and_blanks ... ok
[INFO] [stdout] test snippet::tests::test_set_adds_new ... ok
[INFO] [stdout] test snippet::tests::test_parse_whitespace_in_section_name ... ok
[INFO] [stdout] test snippet::tests::test_set_replaces_existing ... ok
[INFO] [stdout] test snippet::tests::test_set_multiple_then_remove_all ... ok
[INFO] [stdout] test snippet::tests::test_set_overwrite_preserves_order ... ok
[INFO] [stdout] test snippet::tests::test_snippet_with_complex_command ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_valid ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_with_newline ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_empty ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_control_chars ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_special_chars ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_valid ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_whitespace ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_with_equals ... ok
[INFO] [stdout] test snippet::tests::test_snippet_command_with_pipes_and_redirects ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_control_chars ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_empty ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_whitespace_only ... ok
[INFO] [stdout] test snippet::tests::test_save_to_temp_file ... ok
[INFO] [stdout] test ssh_config::model::tests::add_forward_inserts_directive ... ok
[INFO] [stdout] test ssh_config::model::tests::add_forward_multi_pattern_host ... ok
[INFO] [stdout] test ssh_config::model::tests::add_multiple_forwards_same_type ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_coexists_with_provider_comment ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_host_with_multi_pattern_is_skipped ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_does_not_interfere_with_host_matching ... ok
[INFO] [stdout] test ssh_config::model::tests::add_forward_to_empty_block ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_idempotent_set_same_value ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_among_many_purple_comments ... ok
[INFO] [stdout] test ssh_config::model::tests::add_forward_preserves_indentation ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_ignores_empty_value ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_ignores_non_askpass_purple_comments ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_mixed_with_tunnel_directives ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_only_on_first_matching_host ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_bw_source ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_keychain ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_none_when_absent ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_custom_command ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_op_uri ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_tab_indent_preserved ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_with_crlf_line_endings ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_pass_source ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_survives_directive_reorder ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_vault_with_field ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_with_value_containing_equals ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_with_value_containing_hash ... ok
[INFO] [stdout] test ssh_config::model::tests::edit_tunnel_detects_duplicate_after_remove ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_with_long_op_uri ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_tab_whitespace_normalized ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_no_match ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_whitespace_normalized ... ok
[INFO] [stdout] test ssh_config::model::tests::find_tunnel_directives_multi_pattern_host ... ok
[INFO] [stdout] test ssh_config::model::tests::has_tunnels_true_with_forward ... ok
[INFO] [stdout] test ssh_config::model::tests::host_entry_tunnel_count_populated ... ok
[INFO] [stdout] test ssh_config::model::tests::find_tunnel_directives_no_match ... ok
[INFO] [stdout] test providers::sync::tests::test_deduplicate_alias_excluding_other ... ok
[INFO] [stdout] test ssh_config::model::tests::is_included_host_false_for_nonexistent ... ok
[INFO] [stdout] test ssh_config::model::tests::is_included_host_false_for_main_config ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dedup_resolves_back_to_same_alias_unchanged ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_exact_match ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_finds_match ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_case_insensitive_key ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_multi_pattern_host ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_case_insensitive_key_match ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_leaves_other_directives ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_tab_whitespace_normalized ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_multi_pattern_host ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_no_match_is_noop ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_adds_comment ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_empty_removes_comment ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_custom_command_with_percent ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_idempotent_same_value ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_does_not_remove_tags ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_on_nonexistent_host ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_preserves_indent ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_long_op_uri ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_on_host_with_many_directives ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_replaces_existing ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_preserves_other_directives ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_then_clear_then_set_again ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_preserves_other_non_directive_comments ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_with_hash_in_value ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_vault_with_hash_field ... ok
[INFO] [stdout] test ssh_config::model::tests::to_entry_askpass_none_when_absent ... ok
[INFO] [stdout] test ssh_config::model::tests::is_included_host_multi_pattern_main_config ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_with_equals_in_value ... ok
[INFO] [stdout] test ssh_config::model::tests::multiple_hosts_independent_askpass ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_count_counts_forwards ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_directives_extracts_all_types ... ok
[INFO] [stdout] test providers::tests::test_provider_fetch_hosts_delegates_to_cancellable ... ok
[INFO] [stdout] test ssh_config::model::tests::to_entry_includes_askpass ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_count_case_insensitive ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_count_zero_for_no_forwards ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_multiple_renames ... ok
[INFO] [stdout] test providers::tests::test_get_provider_with_config_all_providers ... ok
[INFO] [stdout] test snippet::tests::test_parse_snippet_without_command_skipped ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_with_tab ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_newline ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_directives_extracts_forwards ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_returns_false_on_no_match ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_returns_true_on_match ... ok
[INFO] [stdout] test ssh_config::model::tests::upsert_preserves_equals_separator ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_returns_false_for_unknown_host ... ok
[INFO] [stdout] test ssh_config::model::tests::upsert_preserves_spaced_equals_separator ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_removes_exact_match ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_directives_skips_malformed ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_comments_preserved ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_basic_host ... ok
[INFO] [stdout] test ssh_config::model::tests::upsert_preserves_space_separator_when_value_contains_equals ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_equals_in_value_not_treated_as_separator ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_empty_config ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_host_with_tab_separator ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_hostname_not_confused_with_host ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_match_block_is_global_line ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_equals_syntax_key_value ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_identity_file_and_proxy_jump ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_include_directive_parsed ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_match_block_round_trip ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_multiple_hosts ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_host_inline_comment_stripped ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_match_block_survives_host_deletion ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_include_round_trip ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_inline_comment_inside_quotes_preserved ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_match_at_start_of_file ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_inline_comment_outside_quotes_stripped ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_include_with_tab_separator ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_host_multi_pattern_with_inline_comment ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_ssh_command ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_unicode_comment_no_panic ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_unknown_directives_preserved ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_add_host_serializes ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_round_trip_basic ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_delete_host_serializes ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_round_trip_with_globals_and_wildcards ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_round_trip_with_comments ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_update_host_serializes ... ok
[INFO] [stdout] test tunnel::tests::display_dynamic ... ok
[INFO] [stdout] test tunnel::tests::display_local ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_update_host_preserves_unknown_directives ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_dynamic ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_wildcard_host_filtered ... ok
[INFO] [stdout] test tunnel::tests::display_ipv6_brackets ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_dynamic_empty_port ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_dynamic_non_numeric ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_dynamic_trailing_content ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_empty_bind_port ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_empty_remote_host ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_bare_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_dynamic_invalid_port_message ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_bind_port_0_message ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_empty_remote_host_message ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_unicode_multibyte_line_no_panic ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_bind_port_0_rejected ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_no_colon_message ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_unknown_type_message ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_remote_port_0_message ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_invalid ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_whitespace_in_remote_host ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_lowercase ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_local_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_missing_parts ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_local ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_multi_char_type ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_no_colons ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_extra_colons ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_remote_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_remote_port_0_rejected ... ok
[INFO] [stdout] test tunnel::tests::parse_dynamic_forward_port_only ... ok
[INFO] [stdout] test tunnel::tests::parse_dynamic_forward_with_bind_address ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_port_overflow ... ok
[INFO] [stdout] test tunnel::tests::parse_invalid_value_returns_none ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_remote ... ok
[INFO] [stdout] test tunnel::tests::parse_high_port_numbers ... ok
[INFO] [stdout] test tunnel::tests::parse_ipv6_bind_address ... ok
[INFO] [stdout] test tunnel::tests::parse_mismatched_bracket ... ok
[INFO] [stdout] test tunnel::tests::parse_missing_remote_host ... ok
[INFO] [stdout] test tunnel::tests::parse_missing_remote_port ... ok
[INFO] [stdout] test tunnel::tests::parse_empty_string ... ok
[INFO] [stdout] test tunnel::tests::parse_local_forward_with_bind_address ... ok
[INFO] [stdout] test tunnel::tests::parse_port_1_minimum ... ok
[INFO] [stdout] test tunnel::tests::parse_empty_brackets ... ok
[INFO] [stdout] test tunnel::tests::parse_remote_forward ... ok
[INFO] [stdout] test tunnel::tests::parse_port_negative_rejected ... ok
[INFO] [stdout] test tunnel::tests::parse_port_65536_rejected ... ok
[INFO] [stdout] test tunnel::tests::parse_leading_trailing_whitespace ... ok
[INFO] [stdout] test tunnel::tests::parse_single_word ... ok
[INFO] [stdout] test tunnel::tests::parse_tab_between_parts ... ok
[INFO] [stdout] test tunnel::tests::parse_local_forward_port_only ... ok
[INFO] [stdout] test tunnel::tests::parse_port_0_accepted ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_dynamic_with_bind ... ok
[INFO] [stdout] test tunnel::tests::parse_unknown_directive_returns_none ... ok
[INFO] [stdout] test tunnel::tests::parse_multiple_spaces_between_parts ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_dynamic_forward ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_ipv6_bind ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_ipv6_both ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_ipv6_dynamic ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_local_forward_with_bind ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_remote_forward ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_remote_forward_with_bind ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_empty_string_still_triggers ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_none_does_not_set_env ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_require_is_prefer ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_all_source_types_trigger ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_does_not_set_bw_session ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_env_var_names_match_connection ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_some_triggers_env_setup ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_stdin_is_null ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_sets_config_path_env ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_uses_dash_n_flag ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_ipv6_bind ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_local_with_bind ... ok
[INFO] [stdout] test tunnel::tests::tunnel_type_from_directive_key ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_local_forward ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_ipv6_dynamic ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_dynamic ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_ipv6_both ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_local ... ok
[INFO] [stdout] test tunnel::tests::tunnel_type_cycle ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 847 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/purple-d32810d9c83e674b)
[INFO] [stdout] 
[INFO] [stdout] running 1451 tests
[INFO] [stdout] test app::tests::test_add_host_from_form_calls_set_askpass ... ok
[INFO] [stdout] test app::tests::test_askpass_fallback_none_when_both_absent ... ok
[INFO] [stdout] test app::tests::test_askpass_fallback_per_host_takes_precedence ... ok
[INFO] [stdout] test app::tests::test_apply_filter_matches_hostname ... ok
[INFO] [stdout] test app::tests::test_add_host_config_mutation_without_askpass ... ok
[INFO] [stdout] test app::tests::test_apply_filter_matches_alias ... ok
[INFO] [stdout] test app::tests::test_apply_filter_empty_query ... ok
[INFO] [stdout] test app::tests::test_add_host_config_mutation_with_vault ... ok
[INFO] [stdout] test app::tests::test_apply_sync_result_unknown_provider ... ok
[INFO] [stdout] test app::tests::test_apply_filter_no_matches ... ok
[INFO] [stdout] test app::tests::test_add_host_config_mutation_with_askpass ... ok
[INFO] [stdout] test app::tests::test_apply_sync_result_no_config ... ok
[INFO] [stdout] test app::tests::select_host_by_alias_search_mode_not_in_results ... ok
[INFO] [stdout] test app::tests::test_apply_sync_result_with_hosts_returns_total ... ok
[INFO] [stdout] test app::tests::test_askpass_field_navigation ... ok
[INFO] [stdout] test app::tests::test_askpass_field_label ... ok
[INFO] [stdout] test app::tests::test_build_display_list_blank_line_breaks_group ... ok
[INFO] [stdout] test app::tests::test_apply_sync_result_write_failure_preserves_total ... ok
[INFO] [stdout] test app::tests::select_host_by_alias_normal_mode ... ok
[INFO] [stdout] test app::tests::select_host_by_alias_search_mode ... ok
[INFO] [stdout] test app::tests::test_askpass_field_is_seventh_in_form ... ok
[INFO] [stdout] test app::tests::test_askpass_field_between_proxyjump_and_tags ... ok
[INFO] [stdout] test app::tests::test_bw_session_cached_across_connections ... ok
[INFO] [stdout] test app::tests::test_bw_session_not_set_for_non_bw ... ok
[INFO] [stdout] test app::tests::test_cleanup_marker_contract ... ok
[INFO] [stdout] test app::tests::test_config_changed_since_form_open_no_mtime ... ok
[INFO] [stdout] test app::tests::test_config_set_host_askpass_adds ... ok
[INFO] [stdout] test app::tests::test_config_set_host_askpass_removes ... ok
[INFO] [stdout] test app::tests::test_edit_askpass_rollback_restores_none ... ok
[INFO] [stdout] test app::tests::test_config_set_host_askpass_changes ... ok
[INFO] [stdout] test app::tests::test_edit_askpass_rollback_restores_old_source ... ok
[INFO] [stdout] test app::tests::test_form_field_cycle_through_askpass ... ok
[INFO] [stdout] test app::tests::test_form_from_entry_with_askpass ... ok
[INFO] [stdout] test app::tests::test_form_from_entry_without_askpass ... ok
[INFO] [stdout] test app::tests::test_form_new_has_empty_askpass ... ok
[INFO] [stdout] test app::tests::test_edit_host_from_form_sets_askpass_in_config ... ok
[INFO] [stdout] test app::tests::test_form_field_all_includes_askpass ... ok
[INFO] [stdout] test app::tests::test_group_by_provider_creates_headers ... ok
[INFO] [stdout] test app::tests::test_group_by_provider_toggle_off_restores_flat ... ok
[INFO] [stdout] test app::tests::test_group_by_provider_no_header_for_none ... ok
[INFO] [stdout] test app::tests::test_host_entries_no_askpass ... ok
[INFO] [stdout] test app::tests::test_host_entries_vault_askpass ... ok
[INFO] [stdout] test app::tests::test_host_entries_include_askpass ... ok
[INFO] [stdout] test app::tests::test_pending_connect_none_askpass ... ok
[INFO] [stdout] test app::tests::test_password_picker_state_init ... ok
[INFO] [stdout] test app::tests::test_navigation_skips_headers ... ok
[INFO] [stdout] test app::tests::test_pending_connect_askpass_from_host ... ok
[INFO] [stdout] test app::tests::test_group_by_provider_with_alpha_sort ... ok
[INFO] [stdout] test app::tests::test_password_picker_initial_state_not_shown ... ok
[INFO] [stdout] test app::tests::test_pending_connect_tuple_structure ... ok
[INFO] [stdout] test app::tests::test_pending_connect_without_askpass ... ok
[INFO] [stdout] test app::tests::test_provider_form_field_auto_sync_is_last_in_both_field_lists ... ok
[INFO] [stdout] test app::tests::test_pending_connect_with_askpass ... ok
[INFO] [stdout] test app::tests::test_provider_form_field_cloud_fields_include_auto_sync ... ok
[INFO] [stdout] test app::tests::test_provider_form_field_proxmox_fields_include_auto_sync_and_verify_tls ... ok
[INFO] [stdout] test app::tests::test_provider_form_fields_new_defaults ... ok
[INFO] [stdout] test app::tests::test_sort_mode_round_trip ... ok
[INFO] [stdout] test app::tests::test_select_password_source_wrap_bottom ... ok
[INFO] [stdout] test app::tests::test_select_prev_password_source ... ok
[INFO] [stdout] test app::tests::test_provider_form_field_label_auto_sync ... ok
[INFO] [stdout] test app::tests::test_select_next_password_source ... ok
[INFO] [stdout] test app::tests::test_startup_auto_sync_filter_explicit_false_skips ... ok
[INFO] [stdout] test app::tests::test_to_entry_askpass_long_value ... ok
[INFO] [stdout] test app::tests::test_startup_auto_sync_filter_all_enabled ... ok
[INFO] [stdout] test app::tests::test_sync_history_cleared_on_provider_remove ... ok
[INFO] [stdout] test app::tests::test_startup_auto_sync_filter_skips_disabled_providers ... ok
[INFO] [stdout] test app::tests::test_sync_history_overwrite_replaces_error_with_success ... ok
[INFO] [stdout] test app::tests::test_select_password_source_wrap_top ... ok
[INFO] [stdout] test app::tests::test_to_entry_askpass_trimmed ... ok
[INFO] [stdout] test app::tests::test_to_entry_askpass_with_equals_sign ... ok
[INFO] [stdout] test app::tests::test_to_entry_askpass_with_hash ... ok
[INFO] [stdout] test app::tests::test_to_entry_with_askpass_bw ... ok
[INFO] [stdout] test app::tests::test_to_entry_with_askpass_custom_command ... ok
[INFO] [stdout] test app::tests::test_to_entry_with_askpass_empty ... ok
[INFO] [stdout] test app::tests::test_to_entry_with_askpass_pass ... ok
[INFO] [stdout] test app::tests::test_to_entry_with_askpass_op ... ok
[INFO] [stdout] test app::tests::test_to_entry_with_askpass_vault ... ok
[INFO] [stdout] test app::tests::test_to_entry_with_askpass_keychain ... ok
[INFO] [stdout] test app::tests::test_validate_askpass_allows_percent_substitution ... ok
[INFO] [stdout] test app::tests::test_validate_askpass_rejects_newline ... ok
[INFO] [stdout] test app::tests::test_validate_askpass_allows_normal_special_chars ... ok
[INFO] [stdout] test app::tests::test_validate_askpass_with_control_char ... ok
[INFO] [stdout] test app::tests::test_validate_empty_alias ... ok
[INFO] [stdout] test app::tests::test_to_entry_parses_tags ... ok
[INFO] [stdout] test app::tests::test_validate_askpass_normal_values_ok ... ok
[INFO] [stdout] test app::tests::test_to_entry_with_askpass_whitespace_only ... ok
[INFO] [stdout] test app::tests::test_validate_askpass_rejects_null_byte ... ok
[INFO] [stdout] test app::tests::test_validate_askpass_rejects_tab ... ok
[INFO] [stdout] test app::tests::test_validate_pattern_alias ... ok
[INFO] [stdout] test app::tests::test_validate_empty_hostname ... ok
[INFO] [stdout] test app::tests::test_validate_invalid_port ... ok
[INFO] [stdout] test app::tests::test_validate_rejects_hash_in_alias ... ok
[INFO] [stdout] test app::tests::test_validate_whitespace_alias ... ok
[INFO] [stdout] test app::tests::test_validate_port_zero ... ok
[INFO] [stdout] test app::tests::tunnel_form_field_next_dynamic_skips_remote ... ok
[INFO] [stdout] test app::tests::test_validate_rejects_control_chars ... ok
[INFO] [stdout] test app::tests::test_validate_valid_form ... ok
[INFO] [stdout] test app::tests::tunnel_form_from_rule_dynamic ... ok
[INFO] [stdout] test app::tests::tunnel_form_from_rule_ipv6_bind_address ... ok
[INFO] [stdout] test app::tests::tunnel_form_from_rule_with_bind_address ... ok
[INFO] [stdout] test app::tests::tunnel_form_to_directive_local ... ok
[INFO] [stdout] test app::tests::tunnel_form_to_directive_dynamic ... ok
[INFO] [stdout] test app::tests::tunnel_form_field_next_local ... ok
[INFO] [stdout] test app::tests::tunnel_form_to_directive_remote ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_dynamic_skips_remote ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_bad_remote_port ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_bad_bind_port ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_empty_remote_host ... ok
[INFO] [stdout] test app::tests::tunnel_form_field_prev_dynamic_skips_remote ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_spaces_in_remote_host ... ok
[INFO] [stdout] test app::tests::tunnel_form_field_prev_local ... ok
[INFO] [stdout] test app::tests::tunnel_form_from_rule_local ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_valid ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_control_chars ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_zero_remote_port ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_zero_bind_port ... ok
[INFO] [stdout] test app::tests::tunnel_validate_bind_port_zero_message ... ok
[INFO] [stdout] test app::tests::tunnel_validate_remote_host_empty_message ... ok
[INFO] [stdout] test app::tests::tunnel_validate_remote_host_whitespace_message ... ok
[INFO] [stdout] test app::tests::tunnel_validate_bind_port_non_numeric_message ... ok
[INFO] [stdout] test app::tests::tunnel_validate_remote_port_zero_message ... ok
[INFO] [stdout] test app::tests::validate_hostname_whitespace_rejected ... ok
[INFO] [stdout] test app::tests::validate_hostname_with_control_chars_rejected ... ok
[INFO] [stdout] test askpass::tests::bw_session_needed_for_bw_source ... ok
[INFO] [stdout] test app::tests::validate_user_whitespace_rejected ... ok
[INFO] [stdout] test askpass::tests::bw_session_not_needed_for_bw_prefix_without_colon ... ok
[INFO] [stdout] test askpass::tests::bw_session_not_needed_for_op ... ok
[INFO] [stdout] test askpass::tests::bw_session_not_needed_for_custom_command ... ok
[INFO] [stdout] test askpass::tests::bw_session_not_needed_for_keychain ... ok
[INFO] [stdout] test askpass::tests::bw_session_not_needed_for_vault ... ok
[INFO] [stdout] test askpass::tests::bw_session_not_needed_when_no_askpass ... ok
[INFO] [stdout] test askpass::tests::bw_session_not_needed_for_pass ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_empty_status_value ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_empty_output ... ok
[INFO] [stdout] test askpass::tests::bw_session_not_needed_when_already_cached ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_missing_status_key ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_locked ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_malformed_json ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_unknown_status_defaults_to_locked ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_unauthenticated ... ok
[INFO] [stdout] test askpass::tests::bw_unlock_valid_token_check ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_unlocked ... ok
[INFO] [stdout] test askpass::tests::bw_unlock_password_via_env_not_args ... ok
[INFO] [stdout] test askpass::tests::bw_unlock_empty_token_check_logic ... ok
[INFO] [stdout] test askpass::tests::bw_unlock_whitespace_only_token_check ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_with_extra_fields ... ok
[INFO] [stdout] test askpass::tests::cleanup_marker_noop_for_nonexistent ... ok
[INFO] [stdout] test askpass::tests::command_substitution_only_percent_a ... ok
[INFO] [stdout] test askpass::tests::command_substitution ... ok
[INFO] [stdout] test askpass::tests::bw_status_parse_with_whitespace ... ok
[INFO] [stdout] test askpass::tests::command_substitution_empty_alias ... ok
[INFO] [stdout] test askpass::tests::command_substitution_no_placeholders ... ok
[INFO] [stdout] test askpass::tests::command_substitution_multiple_occurrences ... ok
[INFO] [stdout] test askpass::tests::command_substitution_special_chars_in_hostname ... ok
[INFO] [stdout] test askpass::tests::describe_source_1password ... ok
[INFO] [stdout] test askpass::tests::describe_source_bw_minimal ... ok
[INFO] [stdout] test askpass::tests::describe_source_custom ... ok
[INFO] [stdout] test askpass::tests::describe_source_empty_string_is_custom ... ok
[INFO] [stdout] test askpass::tests::describe_source_keychain ... ok
[INFO] [stdout] test askpass::tests::describe_source_keychain_prefix_not_op ... ok
[INFO] [stdout] test askpass::tests::describe_source_matches_password_sources_labels ... ok
[INFO] [stdout] test askpass::tests::describe_source_pass ... ok
[INFO] [stdout] test askpass::tests::describe_source_op_minimal ... ok
[INFO] [stdout] test askpass::tests::describe_source_pass_colon_required ... ok
[INFO] [stdout] test askpass::tests::describe_source_random_command_is_custom ... ok
[INFO] [stdout] test askpass::tests::cleanup_marker_removes_file ... ok
[INFO] [stdout] test askpass::tests::describe_source_pass_minimal ... ok
[INFO] [stdout] test askpass::tests::describe_source_vault ... ok
[INFO] [stdout] test askpass::tests::describe_source_vault_colon_required ... ok
[INFO] [stdout] test askpass::tests::describe_source_vault_with_complex_path ... ok
[INFO] [stdout] test askpass::tests::describe_source_vault_no_field ... ok
[INFO] [stdout] test askpass::tests::describe_source_with_exact_picker_values ... ok
[INFO] [stdout] test askpass::tests::ensure_bw_session_first_attempt_says_try_again ... ok
[INFO] [stdout] test askpass::tests::ensure_bw_session_retry_count_is_two ... ok
[INFO] [stdout] test askpass::tests::ensure_bw_session_second_attempt_says_ssh_will_prompt ... ok
[INFO] [stdout] test askpass::tests::ensure_bw_session_status_locked_needs_prompt ... ok
[INFO] [stdout] test askpass::tests::ensure_bw_session_status_not_authenticated_returns_none ... ok
[INFO] [stdout] test askpass::tests::ensure_bw_session_status_not_installed_returns_none ... ok
[INFO] [stdout] test askpass::tests::ensure_bw_session_status_unlocked_returns_none ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_bw_source ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_custom_command ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_multiple_hosts_returns_correct ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_op_uri ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_pass_source ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_per_host_takes_precedence ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_returns_none_when_absent ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_returns_per_host_source ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_returns_vault ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_works_for_any_host ... ok
[INFO] [stdout] test askpass::tests::find_askpass_source_wrong_alias_returns_nothing ... ok
[INFO] [stdout] test askpass::tests::find_hostname_no_hostname_directive ... ok
[INFO] [stdout] test askpass::tests::find_hostname_returns_hostname ... ok
[INFO] [stdout] test askpass::tests::find_hostname_returns_correct_for_multiple_hosts ... ok
[INFO] [stdout] test askpass::tests::find_hostname_with_askpass_host ... ok
[INFO] [stdout] test askpass::tests::handle_exits_when_no_source_found ... ok
[INFO] [stdout] test askpass::tests::handle_proceeds_when_both_set ... ok
[INFO] [stdout] test askpass::tests::included_host_askpass_is_readable ... ok
[INFO] [stdout] test askpass::tests::find_hostname_returns_alias_when_not_found ... ok
[INFO] [stdout] test askpass::tests::is_recent_marker_returns_false_for_nonexistent ... ok
[INFO] [stdout] test askpass::tests::command_substitution_only_percent_h ... ok
[INFO] [stdout] test askpass::tests::describe_source_op_requires_double_slash ... ok
[INFO] [stdout] test askpass::tests::is_recent_marker_returns_true_for_fresh_file ... ok
[INFO] [stdout] test askpass::tests::keychain_is_not_prefix ... ok
[INFO] [stdout] test askpass::tests::keychain_service_name_is_purple_ssh ... ok
[INFO] [stdout] test askpass::tests::handle_requires_both_env_vars ... ok
[INFO] [stdout] test askpass::tests::marker_path_is_in_dot_purple_dir ... ok
[INFO] [stdout] test askpass::tests::marker_path_special_chars_in_alias ... ok
[INFO] [stdout] test askpass::tests::op_uri_strip_and_reconstruct_is_identity ... ok
[INFO] [stdout] test askpass::tests::marker_path_contains_alias ... ok
[INFO] [stdout] test askpass::tests::op_uri_strip_preserves_complex_paths ... ok
[INFO] [stdout] test askpass::tests::op_uri_strip_preserves_special_chars ... ok
[INFO] [stdout] test askpass::tests::pass_first_line_empty ... ok
[INFO] [stdout] test askpass::tests::pass_first_line_newline_only ... ok
[INFO] [stdout] test askpass::tests::pass_first_line_single_line ... ok
[INFO] [stdout] test askpass::tests::pass_first_line_multiline ... ok
[INFO] [stdout] test askpass::tests::password_command_remove_success_message_format ... ok
[INFO] [stdout] test askpass::tests::password_command_set_accepts_non_empty_password ... ok
[INFO] [stdout] test askpass::tests::pass_first_line_trailing_newline ... ok
[INFO] [stdout] test askpass::tests::password_sources_bitwarden_value ... ok
[INFO] [stdout] test askpass::tests::password_command_set_rejects_empty_password ... ok
[INFO] [stdout] test askpass::tests::password_command_set_success_message_format ... ok
[INFO] [stdout] test askpass::tests::password_sources_1password_value ... ok
[INFO] [stdout] test askpass::tests::password_sources_count ... ok
[INFO] [stdout] test askpass::tests::password_sources_hints_non_empty ... ok
[INFO] [stdout] test askpass::tests::password_sources_keychain_is_first ... ok
[INFO] [stdout] test askpass::tests::password_sources_none_empty_value ... ok
[INFO] [stdout] test askpass::tests::password_sources_none_is_last ... ok
[INFO] [stdout] test askpass::tests::password_sources_pass_value ... ok
[INFO] [stdout] test askpass::tests::password_sources_order_matches_routing ... ok
[INFO] [stdout] test askpass::tests::password_sources_vault_value ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_extracts_askpass ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_first_askpass_wins ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_handles_value_with_equals_sign ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_preserves_special_chars_in_value ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_returns_none_for_empty_value ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_returns_none_for_whitespace_only_value ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_returns_none_when_absent ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_skips_comments ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_skips_empty_lines ... ok
[INFO] [stdout] test askpass::tests::preferences_parser_trims_whitespace_around_equals ... ok
[INFO] [stdout] test askpass::tests::prefix_sources_end_with_colon_or_slash ... ok
[INFO] [stdout] test askpass::tests::prompt_allows_empty ... ok
[INFO] [stdout] test askpass::tests::prompt_allows_generic_password ... ok
[INFO] [stdout] test askpass::tests::prompt_allows_password_prompt ... ok
[INFO] [stdout] test askpass::tests::prompt_allows_password_prompt_root ... ok
[INFO] [stdout] test askpass::tests::prompt_filter_case_insensitive_passphrase ... ok
[INFO] [stdout] test askpass::tests::prompt_filter_ed25519_passphrase ... ok
[INFO] [stdout] test askpass::tests::prompt_filter_host_key_yes_no ... ok
[INFO] [stdout] test askpass::tests::prompt_filter_host_key_yes_no_fingerprint ... ok
[INFO] [stdout] test askpass::tests::password_sources_custom_command_value ... ok
[INFO] [stdout] test askpass::tests::password_sources_labels_unique ... ok
[INFO] [stdout] test askpass::tests::prompt_filter_keyboard_interactive ... ok
[INFO] [stdout] test askpass::tests::prompt_filter_rsa_passphrase ... ok
[INFO] [stdout] test askpass::tests::prompt_filtering_host_key ... ok
[INFO] [stdout] test askpass::tests::prompt_filtering_host_key_fingerprint ... ok
[INFO] [stdout] test askpass::tests::prompt_password_not_filtered ... ok
[INFO] [stdout] test askpass::tests::prompt_filtering_passphrase ... ok
[INFO] [stdout] test askpass::tests::remove_keychain_linux_uses_secret_tool_clear ... ok
[INFO] [stdout] test askpass::tests::retrieve_error_messages_are_descriptive ... ok
[INFO] [stdout] test askpass::tests::retrieve_keychain_linux_uses_secret_tool_lookup ... ok
[INFO] [stdout] test askpass::tests::retrieve_password_routes_bitwarden ... ok
[INFO] [stdout] test askpass::tests::retrieve_password_routes_keychain ... ok
[INFO] [stdout] test askpass::tests::retrieve_password_routes_pass ... ok
[INFO] [stdout] test askpass::tests::retrieve_password_routes_vault ... ok
[INFO] [stdout] test askpass::tests::retrieve_password_routes_op ... ok
[INFO] [stdout] test askpass::tests::retrieve_routing_custom_command_no_prefix ... ok
[INFO] [stdout] test askpass::tests::retrieve_routing_bw_strip_prefix ... ok
[INFO] [stdout] test askpass::tests::retrieve_routing_keychain_exact_match ... ok
[INFO] [stdout] test askpass::tests::retrieve_routing_op_strip_prefix ... ok
[INFO] [stdout] test askpass::tests::retrieve_routing_vault_strip_prefix ... ok
[INFO] [stdout] test askpass::tests::retrieve_routing_pass_strip_prefix ... ok
[INFO] [stdout] test askpass::tests::routing_keychain_does_not_match_prefix ... ok
[INFO] [stdout] test askpass::tests::routing_all_password_sources_have_backend ... ok
[INFO] [stdout] test askpass::tests::retry_marker_lifecycle_create_then_detect ... ok
[INFO] [stdout] test askpass::tests::routing_vault_without_colon_is_command ... ok
[INFO] [stdout] test askpass::tests::store_keychain_linux_uses_secret_tool ... ok
[INFO] [stdout] test askpass::tests::vault_spec_deep_path ... ok
[INFO] [stdout] test askpass::tests::routing_op_single_slash_is_command ... ok
[INFO] [stdout] test askpass::tests::vault_spec_trailing_hash ... ok
[INFO] [stdout] test askpass::tests::vault_spec_field_at_right_of_last_hash ... ok
[INFO] [stdout] test askpass::tests::vault_spec_multiple_hashes ... ok
[INFO] [stdout] test askpass::tests::vault_spec_with_field ... ok
[INFO] [stdout] test askpass::tests::vault_spec_without_field ... ok
[INFO] [stdout] test connection::tests::askpass_and_bw_session_both_set ... ok
[INFO] [stdout] test connection::tests::askpass_env_var_names ... ok
[INFO] [stdout] test connection::tests::askpass_none_does_not_set_env ... ok
[INFO] [stdout] test connection::tests::askpass_some_triggers_env ... ok
[INFO] [stdout] test connection::tests::askpass_without_bw_session ... ok
[INFO] [stdout] test connection::tests::bw_session_env_not_set_when_none ... ok
[INFO] [stdout] test connection::tests::bw_session_env_set_when_some ... ok
[INFO] [stdout] test connection::tests::connection_all_askpass_source_types_trigger_env ... ok
[INFO] [stdout] test connection::tests::connection_env_vars_include_config_path ... ok
[INFO] [stdout] test connection::tests::connection_exe_fallback_chain ... ok
[INFO] [stdout] test connection::tests::connection_inherits_stdin_and_stdout ... ok
[INFO] [stdout] test connection::tests::connection_uses_double_dash_before_alias ... ok
[INFO] [stdout] test connection::tests::parse_host_key_error_detects_changed_key ... ok
[INFO] [stdout] test connection::tests::parse_host_key_error_handles_custom_known_hosts_path ... ok
[INFO] [stdout] test app::tests::test_apply_sync_result_empty_hosts_returns_zero_total ... ok
[INFO] [stdout] test app::tests::test_askpass_fallback_uses_global_when_no_per_host ... ok
[INFO] [stdout] test app::tests::test_build_display_list_with_group_headers ... ok
[INFO] [stdout] test connection::tests::parse_host_key_error_handles_ip_address ... ok
[INFO] [stdout] test app::tests::test_config_changed_since_form_open_detects_change ... ok
[INFO] [stdout] test app::tests::test_config_changed_since_form_open_same_mtime ... ok
[INFO] [stdout] test app::tests::test_focused_value_mut_askpass ... ok
[INFO] [stdout] test app::tests::test_form_entry_roundtrip_all_sources ... ok
[INFO] [stdout] test app::tests::tunnel_form_validate_empty_bind_port ... ok
[INFO] [stdout] test askpass::tests::describe_source_bitwarden ... ok
[INFO] [stdout] test askpass::tests::describe_source_bw_colon_required ... ok
[INFO] [stdout] test askpass::tests::describe_source_vault_minimal ... ok
[INFO] [stdout] test askpass::tests::retrieve_routing_priority_order ... ok
[INFO] [stdout] test connection::tests::parse_host_key_error_handles_ipv6 ... ok
[INFO] [stdout] test connection::tests::parse_host_key_error_returns_none_for_other_errors ... ok
[INFO] [stdout] test handler::tests::test_all_cloud_providers_default_auto_sync_true ... ok
[INFO] [stdout] test handler::tests::test_askpass_placeholder_text ... ok
[INFO] [stdout] test connection::tests::parse_host_key_error_returns_none_for_empty ... ok
[INFO] [stdout] test handler::tests::test_askpass_unicode_in_custom_command ... ok
[INFO] [stdout] test handler::tests::test_backspace_after_prefix_selection ... ok
[INFO] [stdout] test connection::tests::purple_askpass_mode_value_is_one ... ok
[INFO] [stdout] test handler::tests::test_backspace_in_askpass_field ... ok
[INFO] [stdout] test handler::tests::test_backspace_blocked_when_auto_sync_focused ... ok
[INFO] [stdout] test connection::tests::ssh_askpass_require_value_is_prefer ... ok
[INFO] [stdout] test handler::tests::test_connect_mode_askpass_none ... ok
[INFO] [stdout] test handler::tests::test_delete_undo_preserves_askpass_in_config ... ok
[INFO] [stdout] test handler::tests::test_e_key_opens_edit_form_with_askpass ... ok
[INFO] [stdout] test handler::tests::test_edit_form_populates_askpass ... ok
[INFO] [stdout] test handler::tests::test_e_key_opens_edit_form_without_askpass ... ok
[INFO] [stdout] test handler::tests::test_connect_mode_nonexistent_host ... ok
[INFO] [stdout] test handler::tests::test_backspace_on_empty_askpass_is_noop ... ok
[INFO] [stdout] test handler::tests::test_enter_on_askpass_field_opens_picker ... ok
[INFO] [stdout] test handler::tests::test_bw_session_none_for_non_bw_source ... ok
[INFO] [stdout] test handler::tests::test_edit_host_populates_empty_askpass ... ok
[INFO] [stdout] test handler::tests::test_bw_session_stored_in_app ... ok
[INFO] [stdout] test handler::tests::test_char_input_blocked_when_auto_sync_focused ... ok
[INFO] [stdout] test handler::tests::test_clear_askpass_with_backspace ... ok
[INFO] [stdout] test handler::tests::test_connect_mode_askpass_lookup ... ok
[INFO] [stdout] test handler::tests::test_edit_form_empty_askpass_when_none ... ok
[INFO] [stdout] test handler::tests::test_edit_host_populates_askpass_in_form ... ok
[INFO] [stdout] test handler::tests::test_ctrl_p_on_provider_form_does_not_open_password_picker ... ok
[INFO] [stdout] test handler::tests::test_enter_on_askpass_field_select_replaces_value ... ok
[INFO] [stdout] test handler::tests::test_enter_on_askpass_opens_password_picker ... ok
[INFO] [stdout] test handler::tests::test_full_flow_picker_keychain_then_tab_away ... ok
[INFO] [stdout] test handler::tests::test_full_flow_clear_askpass_via_picker_none ... ok
[INFO] [stdout] test handler::tests::test_form_submit_with_all_password_source_types ... ok
[INFO] [stdout] test handler::tests::test_password_picker_blocks_tab ... ok
[INFO] [stdout] test handler::tests::test_full_flow_picker_to_typed_value ... ok
[INFO] [stdout] test handler::tests::test_included_host_edit_blocked ... ok
[INFO] [stdout] test handler::tests::test_form_submit_empty_askpass_is_none ... ok
[INFO] [stdout] test handler::tests::test_host_list_enter_carries_askpass ... ok
[INFO] [stdout] test handler::tests::test_host_list_enter_carries_vault_askpass ... ok
[INFO] [stdout] test handler::tests::test_password_picker_ctrl_d_source_label_in_status ... ok
[INFO] [stdout] test handler::tests::test_host_list_enter_no_askpass ... ok
[INFO] [stdout] test handler::tests::test_host_list_enter_no_askpass_is_none ... ok
[INFO] [stdout] test handler::tests::test_password_picker_ctrl_d_closes_picker ... ok
[INFO] [stdout] test handler::tests::test_host_list_r_shift_opens_snippet_picker_all ... ok
[INFO] [stdout] test handler::tests::test_included_host_connect_still_carries_askpass ... ok
[INFO] [stdout] test handler::tests::test_included_host_delete_blocked ... ok
[INFO] [stdout] test handler::tests::test_multiple_hosts_different_askpass_sources ... ok
[INFO] [stdout] test handler::tests::test_password_picker_ctrl_d_does_not_change_form_askpass ... ok
[INFO] [stdout] test handler::tests::test_host_list_r_opens_snippet_picker ... ok
[INFO] [stdout] test handler::tests::test_password_picker_blocks_char_input ... ok
[INFO] [stdout] test handler::tests::test_password_picker_down_arrow ... ok
[INFO] [stdout] test handler::tests::test_password_picker_enter_with_no_selection ... ok
[INFO] [stdout] test handler::tests::test_password_picker_item_count_matches_sources ... ok
[INFO] [stdout] test handler::tests::test_password_picker_esc_closes ... ok
[INFO] [stdout] test handler::tests::test_password_picker_ignores_unknown_keys ... ok
[INFO] [stdout] test handler::tests::test_password_picker_none_sets_cleared_status ... ok
[INFO] [stdout] test handler::tests::test_password_picker_j_moves_down ... ok
[INFO] [stdout] test handler::tests::test_password_picker_prefix_bw_focuses_askpass ... ok
[INFO] [stdout] test handler::tests::test_password_picker_prefix_source_focuses_askpass_field ... ok
[INFO] [stdout] test handler::tests::test_password_picker_prefix_vault_focuses_askpass ... ok
[INFO] [stdout] test handler::tests::test_password_picker_keychain_sets_status_message ... ok
[INFO] [stdout] test handler::tests::test_password_picker_select_bitwarden ... ok
[INFO] [stdout] test handler::tests::test_password_picker_select_pass ... ok
[INFO] [stdout] test handler::tests::test_password_picker_select_1password ... ok
[INFO] [stdout] test handler::tests::test_password_picker_prefix_pass_focuses_askpass ... ok
[INFO] [stdout] test handler::tests::test_password_picker_select_vault ... ok
[INFO] [stdout] test handler::tests::test_password_picker_k_moves_up ... ok
[INFO] [stdout] test handler::tests::test_password_picker_up_arrow ... ok
[INFO] [stdout] test handler::tests::test_password_picker_takes_priority_over_key_picker ... ok
[INFO] [stdout] test handler::tests::test_password_picker_works_on_edit_host ... ok
[INFO] [stdout] test handler::tests::test_password_picker_select_custom ... ok
[INFO] [stdout] test handler::tests::test_password_sources_fit_picker_width ... ok
[INFO] [stdout] test handler::tests::test_password_picker_select_none ... ok
[INFO] [stdout] test handler::tests::test_picker_keychain_sets_status_message ... ok
[INFO] [stdout] test handler::tests::test_picker_none_sets_cleared_status ... ok
[INFO] [stdout] test handler::tests::test_provider_form_backspace_removes_from_focused_field ... ok
[INFO] [stdout] test handler::tests::test_picker_prefix_source_shows_guidance ... ok
[INFO] [stdout] test handler::tests::test_picker_select_keychain_no_further_typing_needed ... ok
[INFO] [stdout] test handler::tests::test_picker_esc_preserves_existing_askpass ... ok
[INFO] [stdout] test handler::tests::test_password_picker_select_keychain ... ok
[INFO] [stdout] test handler::tests::test_password_picker_wraps_around_top ... ok
[INFO] [stdout] test handler::tests::test_provider_form_init_existing_do_preserves_auto_sync_true ... ok
[INFO] [stdout] test handler::tests::test_password_picker_wraps_around_bottom ... ok
[INFO] [stdout] test handler::tests::test_provider_form_init_new_proxmox_defaults_to_false ... ok
[INFO] [stdout] test handler::tests::test_picker_select_op_then_type_rest ... ok
[INFO] [stdout] test handler::tests::test_provider_form_esc_returns_to_provider_list ... ok
[INFO] [stdout] test handler::tests::test_provider_form_proxmox_default_alias_prefix ... ok
[INFO] [stdout] test handler::tests::test_picker_select_vault_then_type_rest ... ok
[INFO] [stdout] test handler::tests::test_provider_form_init_existing_do_explicit_false_preserved ... ok
[INFO] [stdout] test handler::tests::test_provider_form_init_existing_proxmox_preserves_auto_sync_false ... ok
[INFO] [stdout] test handler::tests::test_provider_form_proxmox_has_extra_fields ... ok
[INFO] [stdout] test handler::tests::test_provider_form_tab_cycles_cloud_fields ... ok
[INFO] [stdout] test handler::tests::test_provider_list_delete_unconfigured_is_noop ... ok
[INFO] [stdout] test handler::tests::test_provider_form_backspace_verify_tls_blocked ... ok
[INFO] [stdout] test handler::tests::test_provider_list_esc_cancels_running_syncs ... ok
[INFO] [stdout] test handler::tests::test_provider_list_enter_opens_form_with_defaults ... ok
[INFO] [stdout] test handler::tests::test_provider_list_j_selects_next ... ok
[INFO] [stdout] test handler::tests::test_provider_list_esc_returns_to_host_list ... ok
[INFO] [stdout] test handler::tests::test_provider_list_enter_opens_form_with_existing_config ... ok
[INFO] [stdout] test handler::tests::test_provider_list_sync_unconfigured_shows_status ... ok
[INFO] [stdout] test handler::tests::test_provider_form_char_appended_to_focused_field ... ok
[INFO] [stdout] test handler::tests::test_provider_form_shift_tab_reverse ... ok
[INFO] [stdout] test handler::tests::test_provider_form_space_toggles_verify_tls ... ok
[INFO] [stdout] test handler::tests::test_provider_list_q_returns_to_host_list ... ok
[INFO] [stdout] test handler::tests::test_proxmox_defaults_auto_sync_false ... ok
[INFO] [stdout] test handler::tests::test_provider_list_k_selects_prev ... ok
[INFO] [stdout] test handler::tests::test_shift_tab_from_tags_goes_to_askpass ... ok
[INFO] [stdout] test handler::tests::test_provider_form_char_input_verify_tls_blocked ... ok
[INFO] [stdout] test handler::tests::test_search_enter_carries_askpass ... ok
[INFO] [stdout] test handler::tests::test_search_enter_carries_askpass_op_uri ... ok
[INFO] [stdout] test handler::tests::test_provider_list_delete_removes_config ... ok
[INFO] [stdout] test handler::tests::test_search_enter_no_askpass ... ok
[INFO] [stdout] test handler::tests::test_provider_form_init_new_digitalocean_defaults_to_true ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_backspace ... ok
[INFO] [stdout] test handler::tests::test_select_different_hosts_carries_correct_askpass ... ok
[INFO] [stdout] test handler::tests::test_shift_tab_from_askpass_to_proxyjump ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_char_insert ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_submit_rejects_empty_name ... ok
[INFO] [stdout] test handler::tests::test_password_picker_ctrl_d_none_sets_status ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_esc_returns_to_picker ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_tab_cycles_fields ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_submit_add ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_e_opens_edit_form ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_enter_clears_multi_select ... ok
[INFO] [stdout] test handler::tests::test_provider_form_enter_opens_key_picker ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_a_opens_add_form ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_enter_sets_pending ... ok
[INFO] [stdout] test handler::tests::test_space_on_other_field_does_not_affect_auto_sync ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_enter_with_no_selection ... ok
[INFO] [stdout] test handler::tests::test_space_toggles_auto_sync_false_to_true ... ok
[INFO] [stdout] test handler::tests::test_submit_form_no_keychain_removal_for_add ... ok
[INFO] [stdout] test handler::tests::test_space_toggles_auto_sync_true_to_false ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_esc_returns_to_hostlist ... ok
[INFO] [stdout] test handler::tests::test_submit_form_no_keychain_removal_when_unchanged ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_nav_down_up ... ok
[INFO] [stdout] test handler::tests::test_submit_form_old_askpass_tracked_for_edit ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_submit_rejects_duplicate_name ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_accepts_empty_alias_prefix ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_q_returns_to_hostlist ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_submit_edit ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_d_last_item_selects_none ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_d_deletes_and_saves ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_accepts_hyphenated_alias ... ok
[INFO] [stdout] test handler::tests::test_submit_non_proxmox_url_not_required ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_persists_auto_sync_false ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_control_chars_in_alias_prefix ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_control_chars_in_token ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_control_chars_in_identity_file ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_negation_alias ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_question_mark_alias ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_space_in_alias_prefix ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_pattern_alias_prefix ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_whitespace_only_token ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_control_chars_in_url ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_whitespace_in_user ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_empty_token ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_rejects_control_chars_in_user ... ok
[INFO] [stdout] test handler::tests::test_submit_provider_form_persists_auto_sync_true ... ok
[INFO] [stdout] test handler::tests::test_submit_proxmox_rejects_bare_hostname_url ... ok
[INFO] [stdout] test handler::tests::test_submit_proxmox_rejects_http_url ... ok
[INFO] [stdout] test handler::tests::test_tab_from_askpass_goes_to_tags ... ok
[INFO] [stdout] test handler::tests::test_tunnel_handler_reads_askpass_from_hosts ... ok
[INFO] [stdout] test handler::tests::test_tunnel_handler_askpass_none_when_absent ... ok
[INFO] [stdout] test handler::tests::test_type_askpass_directly_without_picker ... ok
[INFO] [stdout] test handler::tests::test_tab_reaches_askpass_field ... ok
[INFO] [stdout] test handler::tests::test_type_custom_command_directly ... ok
[INFO] [stdout] test handler::tests::test_tab_from_askpass_to_tags ... ok
[INFO] [stdout] test handler::tests::test_tunnel_askpass_lookup_different_sources ... ok
[INFO] [stdout] test handler::tests::test_submit_proxmox_accepts_https_url ... ok
[INFO] [stdout] test handler::tests::test_submit_proxmox_rejects_empty_url ... ok
[INFO] [stdout] test history::tests::test_frecency_score_unknown_alias ... ok
[INFO] [stdout] test import::tests::test_is_bare_ip ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_bracket_pattern_skipped ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_bracket_trailing_colon_fails ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_bracketed_ip_first_comma_picks_hostname ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_hashed ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_all_ips_comma_skipped ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_ip_first_comma_picks_hostname ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_ip_only ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_ipv6_first_comma_picks_hostname ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_malformed_is_failure ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_marker_is_skipped ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_ipv6_skipped ... ok
[INFO] [stdout] test handler::tests::test_submit_proxmox_https_case_insensitive ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_hex_hostname_not_skipped ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_bracket_junk_after_close_fails ... ok
[INFO] [stdout] test handler::tests::test_typing_in_askpass_field ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_invalid_port ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_comma_separated ... ok
[INFO] [stdout] test history::tests::test_format_time_ago_recent ... ok
[INFO] [stdout] test history::tests::test_format_time_ago_zero ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_numeric_first_label_not_skipped ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_negation_pattern_skipped ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_with_port ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_bracket_no_port ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_simple ... ok
[INFO] [stdout] test preferences::tests::load_askpass_preserves_vault_uri ... ok
[INFO] [stdout] test import::tests::test_parse_known_hosts_wildcard_is_skipped ... ok
[INFO] [stdout] test preferences::tests::load_askpass_returns_none_for_empty ... ok
[INFO] [stdout] test preferences::tests::save_value_replaces_existing ... ok
[INFO] [stdout] test providers::config::tests::test_alias_prefix_override ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_default_all_others_true ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_default_false_for_proxmox ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_default_proxmox_false ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_explicit_true ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_default_true_for_non_proxmox ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_false_variants ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_explicit_false_non_proxmox ... ok
[INFO] [stdout] test preferences::tests::load_askpass_returns_value ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_malformed_value_treated_as_true ... ok
[INFO] [stdout] test preferences::tests::save_value_appends_new_key ... ok
[INFO] [stdout] test preferences::tests::load_askpass_among_other_prefs ... ok
[INFO] [stdout] test preferences::tests::save_value_builds_correct_line ... ok
[INFO] [stdout] test preferences::tests::load_askpass_returns_none_when_missing ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_not_written_when_default ... ok
[INFO] [stdout] test preferences::tests::load_askpass_preserves_op_uri ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_override_proxmox_to_true ... ok
[INFO] [stdout] test providers::config::tests::test_configured_providers_returns_all_sections ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_true_variants ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_from_short_label ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_digitalocean ... ok
[INFO] [stdout] test providers::config::tests::test_blank_lines_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_written_only_when_non_default ... ok
[INFO] [stdout] test providers::config::tests::test_comments_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_proxmox ... ok
[INFO] [stdout] test providers::config::tests::test_configured_providers_empty ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_override_do_to_false ... ok
[INFO] [stdout] test providers::config::tests::test_default_identity_file_empty ... ok
[INFO] [stdout] test providers::config::tests::test_default_user_is_root ... ok
[INFO] [stdout] test providers::config::tests::test_default_url_empty ... ok
[INFO] [stdout] test providers::config::tests::test_default_user_root_when_not_specified ... ok
[INFO] [stdout] test providers::config::tests::test_defaults_applied ... ok
[INFO] [stdout] test providers::config::tests::test_duplicate_section_first_wins ... ok
[INFO] [stdout] test providers::config::tests::test_configured_providers_returns_all ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_unknown_provider ... ok
[INFO] [stdout] test providers::config::tests::test_default_alias_prefix_upcloud ... ok
[INFO] [stdout] test providers::config::tests::test_multiple_providers ... ok
[INFO] [stdout] test providers::config::tests::test_line_without_equals_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_parse_comments_and_blanks ... ok
[INFO] [stdout] test providers::config::tests::test_parse_duplicate_sections_first_wins ... ok
[INFO] [stdout] test providers::config::tests::test_parse_duplicate_sections_trailing ... ok
[INFO] [stdout] test providers::config::tests::test_parse_key_field_sets_identity_file ... ok
[INFO] [stdout] test providers::config::tests::test_non_proxmox_url_not_written ... ok
[INFO] [stdout] test providers::config::tests::test_non_proxmox_url_parsed_but_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_parse_empty ... ok
[INFO] [stdout] test providers::config::tests::test_parse_single_section ... ok
[INFO] [stdout] test providers::config::tests::test_parse_unknown_keys_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_parse_url_and_verify_tls ... ok
[INFO] [stdout] test providers::config::tests::test_parse_unknown_provider_still_parsed ... ok
[INFO] [stdout] test providers::config::tests::test_parse_value_with_equals ... ok
[INFO] [stdout] test providers::config::tests::test_parse_whitespace_around_key_value ... ok
[INFO] [stdout] test providers::config::tests::test_parse_whitespace_in_section_name ... ok
[INFO] [stdout] test providers::config::tests::test_proxmox_token_with_exclamation ... ok
[INFO] [stdout] test providers::config::tests::test_remove_section_keeps_others ... ok
[INFO] [stdout] test providers::config::tests::test_remove_section_all ... ok
[INFO] [stdout] test providers::config::tests::test_section_by_name ... ok
[INFO] [stdout] test providers::config::tests::test_remove_nonexistent_section_noop ... ok
[INFO] [stdout] test providers::config::tests::test_auto_sync_values ... ok
[INFO] [stdout] test providers::config::tests::test_section_lookup ... ok
[INFO] [stdout] test providers::config::tests::test_remove_section ... ok
[INFO] [stdout] test providers::config::tests::test_section_lookup_found ... ok
[INFO] [stdout] test providers::config::tests::test_parse_multiple_sections ... ok
[INFO] [stdout] test providers::config::tests::test_section_lookup_missing ... ok
[INFO] [stdout] test providers::config::tests::test_proxmox_url_fallback_in_section ... ok
[INFO] [stdout] test providers::config::tests::test_serialize_roundtrip_single_provider ... ok
[INFO] [stdout] test providers::config::tests::test_proxmox_url_parsed ... ok
[INFO] [stdout] test providers::config::tests::test_section_not_found ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_add ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_multiple_adds ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_adds_new ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_replace ... ok
[INFO] [stdout] test providers::config::tests::test_set_section_replaces_existing ... ok
[INFO] [stdout] test providers::config::tests::test_unknown_key_ignored ... ok
[INFO] [stdout] test providers::config::tests::test_user_override ... ok
[INFO] [stdout] test providers::config::tests::test_verify_tls_default_true ... ok
[INFO] [stdout] test providers::config::tests::test_verify_tls_false_variants ... ok
[INFO] [stdout] test providers::config::tests::test_verify_tls_values ... ok
[INFO] [stdout] test providers::config::tests::test_verify_tls_true_variants ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_empty_networks_skipped ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_large_id ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_multiple_private_v4_no_public ... ok
[INFO] [stdout] test providers::config::tests::test_url_and_verify_tls_round_trip ... ok
[INFO] [stdout] test providers::config::tests::test_token_with_equals_sign ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_multiple_public_v4_uses_first ... ok
[INFO] [stdout] test providers::config::tests::test_whitespace_around_section_name ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_default_tags_empty ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_id_is_u64 ... ok
[INFO] [stdout] test providers::config::tests::test_whitespace_around_key_value ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_private_v4_public_v6_uses_v6 ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_private_v6_not_used ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_empty_droplet_list_stops_pagination ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_meta_extra_fields_ignored ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_ipv6_only_droplet_uses_v6 ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_pagination_continues_when_total_exceeds_fetched ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_pagination_stops_when_fetched_reaches_total ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_parse_droplet_response ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_both_null_skipped ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_default_labels_empty ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_both_empty_skipped ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_ipv4_skipped ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_dual_stack_prefers_v4 ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_prefers_v4_over_v6 ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_ipv4_with_v6_uses_v6 ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_private_only_skipped ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_tags_preserved ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_extra_fields_ignored ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_extra_fields_ignored ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_labels_sorted ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_ipinfo_extra_fields_ignored ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_labels_to_tags_empty_value ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_labels_to_tags_key_value ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_label_empty_value_uses_key ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_name ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_server_list ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_pagination_extra_fields_ignored ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_empty_v6_skipped ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_labels_with_special_chars ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_many_labels_sorted ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_large_id ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_multiple_labels ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_multiple_servers_parsed ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_no_ip_skipped ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_null_v6_field ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_pagination_continues ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_v6_cidr_128 ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_v6_only_fallback ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip ... ok
[INFO] [stdout] test providers::hetzner::tests::test_parse_hetzner_response ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_100_128_not_cgnat ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_100_63_not_cgnat ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_v6_without_cidr ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_100_range_boundary ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_nonnumeric ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_pagination_stops ... ok
[INFO] [stdout] test providers::hetzner::tests::test_hetzner_prefers_v4_over_v6 ... ok
[INFO] [stdout] test providers::linode::tests::test_ipv6_only_instance_uses_v6 ... ok
[INFO] [stdout] test providers::hetzner::tests::test_ipv6_only_server_uses_v6 ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_15_not_private ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_32_not_private ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_all_boundary_octets ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_loopback ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_public_ranges ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_cgnat_100_64_is_private ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_empty_data_stops_pagination ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_all_private_falls_back_to_first ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_empty_ipv4_empty_ipv6_returns_none ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_no_cidr ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_cidr_stripped ... ok
[INFO] [stdout] test providers::linode::tests::test_is_private_ip_172_range_boundary ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_empty_string ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_default_tags_empty ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_field_omitted_falls_to_private ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_empty_label ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_ipv6_null ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_multiple_instances_parsed ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_no_ips_at_all ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_multiple_public_ips_uses_first ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_pagination_continues ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_private_ip_first_then_public ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_private_v4_and_v6_prefers_private_v4 ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_private_only_falls_back_to_private ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_large_id ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_missing_ipv6_field ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_pagination_stops ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_public_ipv4_preferred_over_ipv6 ... ok
[INFO] [stdout] test providers::linode::tests::test_linode_tags_preserved ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_disabled_explicit ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_disabled_explicit_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_disabled_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_disabled_simple ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_explicit_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_2_not_treated_as_enabled ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_explicit ... ok
[INFO] [stdout] test providers::linode::tests::test_parse_linode_prefers_public_ip ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_explicit_zero_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_many_options ... ok
[INFO] [stdout] test providers::linode::tests::test_parse_linode_response ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_only_commas ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_simple ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_with_options ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_enabled_with_spaces ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_none ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_already_prefixed ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_ldap_user ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_complex_token ... ok
[INFO] [stdout] test providers::proxmox::tests::test_agent_garbage_value ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_droplet_v6_default_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_prepends_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_with_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_auth_header_without_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_ip_comma_separated_treated_as_single ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_ip_unusable_filtered ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_ip_with_cidr_stripped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_ip_field ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_all_null_fields ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_null_name ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_null_vmid ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_partial_null_in_array ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_null_status ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_template_as_boolean ... ok
[INFO] [stdout] test providers::digitalocean::tests::test_network_ip_extra_fields_ignored ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_template_as_false ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resource_template_as_null ... ok
[INFO] [stdout] test providers::proxmox::tests::test_cluster_resources_pve8_comma_tags ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_boolean_value ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_empty_map ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_empty_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_ignores_non_numeric_suffix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_non_sequential ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_null_value ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_number_value ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_skips_non_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_extract_numbered_values_sorted ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_empty_ip_address_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_empty_ip_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_loopback_then_real_ip ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_picks_ipv4_from_second_interface ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_realistic_multi_nic ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_ip_with_cidr_prefix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_response_null_result ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_response_empty_data_object ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_ipv4_preferred ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_response_null_data ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_ipv6_fallback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_response_with_null_interface_name_in_array ... ok
[INFO] [stdout] test providers::proxmox::tests::test_full_guest_agent_response_with_null_data ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_link_local ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_link_local_uppercase ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_loopback_ip_on_non_lo_iface ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_result_missing_is_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_result_null_is_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_ipv6_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_loopback_range ... ok
[INFO] [stdout] test providers::proxmox::tests::test_full_guest_agent_response_with_null_result ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_two_ipv4_picks_first ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_interface_null_ip_addresses ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_interface_null_name ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_ip_address_null_fields ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_strips_cidr_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_ip6_manual_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_strips_cidr_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_ip6_auto_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_manual_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_dhcp_falls_back_to_ip6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_skips_mixed_case_link_local ... ok
[INFO] [stdout] test providers::proxmox::tests::test_is_unusable_ip_normal_v4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_array_to_none ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_boolean_true_to_one ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_boolean_false_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_only_ip6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_is_unusable_ip_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_is_unusable_ip_unspecified_v6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_null_to_none ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_number_to_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_guest_agent_empty_interfaces ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_float_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_large_number_wraps ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet6_fallback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_missing_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet6_global_with_scope ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet6_loopback_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet6_multiple_tokens ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_empty_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_null_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_leading_whitespace ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_preferred ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_tab_separated ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_takes_precedence_over_ip_addresses ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_string_zero_to_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_boolean_true ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lenient_u8_boolean_false_to_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_interface_null_ip_addresses ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_format_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_interface_null_name ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_format_ipv4_preferred_over_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_format_skips_link_local ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet6_skips_link_local ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_format_skips_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet6_type ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_preferred_over_inet6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_loopback_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_skips_link_local_v4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_ipconfig_prefers_ipv4_over_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_skips_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_strips_cidr ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_ip_addresses_inet_type_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_link_local_v4_falls_through_to_inet6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_multi_interface_with_lo_first ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_ip6_auto_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_dhcp_falls_back_to_ip6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_ip6_manual_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_manual_skipped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_multi_nic_net0_dhcp_net1_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_net_full_line ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_link_local_ipv6_colon ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_only_lo_interface ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_resource_type_tag_no_duplicate ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_ipv6_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_link_local_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_link_local_ipv6_zone_id ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_loopback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_link_local_ipv6_zone_id_uppercase ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_loopback_ip_on_non_lo_iface ... ok
[INFO] [stdout] test providers::proxmox::tests::test_multi_nic_ipconfig_fallback ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_api_suffix ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_empty_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_name_fallback_when_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_api_suffix_trailing_slash ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_just_api_path ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_multiple_trailing_slashes ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_no_port ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_trailing_slashes_and_api ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_with_subpath ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_guest_agent_response_double_wrapped ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_skips_mixed_case_link_local_inet6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_bare ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_dhcp ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_cluster_resources ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_http_preserved ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_trailing_slash ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_whitespace ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_both_dhcp ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_whitespace_only ... ok
[INFO] [stdout] test providers::proxmox::tests::test_normalize_url_no_trailing ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_dhcp_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_dhcp_and_ip6_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_dhcp_with_ip6_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_auto ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_dhcp ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_only ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_lxc_inet_with_scope_info ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ipv4_preferred_over_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_no_ip_key ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_whitespace_around_parts ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_dhcp ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_interfaces ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip6_auto_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_dhcp_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_ip_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_auto_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_manual_case_insensitive ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_ipconfig_manual_with_ip6_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_auto ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_dhcp_with_ip6_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip6_only ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ip_manual ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_ipv4_preferred_over_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve8_comma_tags ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve_tags_comma_separated ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve_space_tags ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve_tags_mixed_separators ... ok
[INFO] [stdout] test providers::proxmox::tests::test_resource_type_filter_storage_excluded ... ok
[INFO] [stdout] test providers::proxmox::tests::test_resource_type_tag_added ... ok
[INFO] [stdout] test providers::proxmox::tests::test_resource_type_tag_no_duplicate_when_pve_tag_matches ... ok
[INFO] [stdout] test providers::proxmox::tests::test_pve7_semicolon_tags ... ok
[INFO] [stdout] test providers::proxmox::tests::test_server_id_format ... ok
[INFO] [stdout] test providers::proxmox::tests::test_parse_lxc_net_manual_with_ip6_static ... ok
[INFO] [stdout] test providers::proxmox::tests::test_server_id_format_lxc ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_commas ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_mixed ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_mixed_all_separators ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_single_tag ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_semicolons ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_whitespace ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_spaces ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_template_filtered ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_link_local_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_link_local_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_loopback_ipv4 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_usable_ip_public ... ok
[INFO] [stdout] test providers::proxmox::tests::test_usable_ip_private ... ok
[INFO] [stdout] test providers::proxmox::tests::test_unusable_ip_loopback_ipv6 ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_integer_zero ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_null ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_missing ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_string ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_consecutive_separators_produce_no_empty ... ok
[INFO] [stdout] test providers::proxmox::tests::test_tags_lowercased ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_boolean ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_boolean_false ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_agent_as_integer ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_default ... ok
[INFO] [stdout] test providers::sync::tests::test_build_alias ... ok
[INFO] [stdout] test providers::sync::tests::test_build_alias_long_names ... ok
[INFO] [stdout] test providers::sync::tests::test_deduplicate_alias_excluding_none ... ok
[INFO] [stdout] test providers::sync::tests::test_deduplicate_alias_excluding_other ... ok
[INFO] [stdout] test providers::sync::tests::test_deduplicate_alias_excluding_self ... ok
[INFO] [stdout] test providers::sync::tests::test_find_hosts_by_provider_in_includes ... ok
[INFO] [stdout] test providers::sync::tests::test_find_hosts_by_provider_mixed_includes_and_toplevel ... ok
[INFO] [stdout] test providers::sync::tests::test_find_hosts_by_provider_wrong_provider_name ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name ... ok
[INFO] [stdout] test providers::sync::tests::test_find_hosts_by_provider_empty_includes ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmconfig_flatten_deserialization ... ok
[INFO] [stdout] test providers::proxmox::tests::test_vmid_zero_is_valid ... ok
[INFO] [stdout] test providers::sync::tests::test_build_alias_prefix_with_hyphen ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_consecutive_specials ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_long_mixed_separators ... ok
[INFO] [stdout] test providers::sync::tests::test_deduplicate_alias_excluding_chain ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_leading_special ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_dots_and_underscores ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_trailing_special ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_unicode ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_whitespace_only ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_mixed_special_chars ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_numbers_only ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_emoji ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_single_char ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_single_special_char ... ok
[INFO] [stdout] test providers::sync::tests::test_set_host_provider_updates_existing ... ok
[INFO] [stdout] test providers::sync::tests::test_set_host_tags_empty_clears_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sanitize_name_tabs_and_newlines ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_adds_group_header_on_first_host ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_alias_collision_dedup ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_adds_new_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_applies_identity_file_from_section ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_applies_user_from_section ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_add_count ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dedup_resolves_back_to_same_alias_unchanged ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_edit_rename_rollback_on_save_failure ... FAILED
[INFO] [stdout] test providers::sync::tests::test_sync_deduplicates_alias ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_all_symbol_name_uses_server_fallback ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_combined_add_update_remove ... ok
[INFO] [stdout] test askpass::tests::keychain_has_password_returns_bool ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_no_mutations ... ok
[INFO] [stdout] test handler::tests::test_snippet_form_submit_rollback_on_save_failure ... FAILED
[INFO] [stdout] test providers::sync::tests::test_sync_duplicate_local_server_id_keeps_first ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_duplicate_server_id_in_remote_skipped ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_duplicate_server_id_deduped ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_alias_prefix ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_ip_not_added ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_remove_count_preserves_config ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_ip_existing_host_counted_unchanged ... ok
[INFO] [stdout] test handler::tests::test_snippet_picker_d_rollback_on_save_failure ... FAILED
[INFO] [stdout] test providers::sync::tests::test_sync_empty_ip_with_tags_not_added ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_ip_existing_host_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_remove_excludes_included_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_rename_no_renames_tracked ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_update_preserves_config ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dedup_server_id_in_response ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_dry_run_remove_count ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_remote_empty_config_noop ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_empty_user_not_set ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_group_header_with_existing_trailing_blank ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_host_in_entries_map_but_alias_changed_by_another_provider ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_no_duplicate_header_on_repeated_sync ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_identity_file_set_on_new_host ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_idempotent_same_data ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_include_host_skips_remove ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_include_host_skips_update ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_manual_comment_survives_cleanup ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_merge_case_insensitive ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_multiple_renames ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_no_double_blank_between_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_merges_new_provider_tag_with_user_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_no_group_header_for_second_host ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_mixed_resolved_empty_and_missing ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_all_when_remote_empty ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_only_affects_own_provider ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_and_ip_change_simultaneously ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_preserves_user_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_and_tag_change_simultaneously ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_removes_deleted ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_no_rename_when_prefix_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_removes_header_when_all_hosts_deleted ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_cleans_up_group_header ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_orphaned_provider_marker_counts_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_removes_orphan_header ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_recognizes_include_hosts_prevents_duplicate_add ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_skips_empty_ip_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_remove_deletes_truly_gone_hosts ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_and_ip_change ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_case_insensitive_no_update ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_case_insensitive_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_replaces_local_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_replaces_local ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_result_counts_add_up ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_with_rename ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_stable_with_manual_collision ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_dry_run_no_mutation ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_result_default ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_skips_included_host ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_server_name_change_updates_alias ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_merge_adds_new_remote_tag ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_renames_on_prefix_change ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_clears_stale_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_order_insensitive ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_reset_tags_unchanged_when_matching ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_whitespace_trimmed_on_store ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_trimmed_remote_triggers_merge ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_merge_preserves_local_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tags_cleared_remotely_preserved_locally ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_rename_self_exclusion_no_collision ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_tag_merge_case_insensitive_no_duplicate ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_unicode_name_uses_ascii_fallback ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_without_remove_flag_keeps_deleted ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_writes_provider_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_updates_changed_ip ... ok
[INFO] [stdout] test providers::tests::test_display_name_all_providers ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_updates_changed_tags ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_two_providers_independent ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_unchanged ... ok
[INFO] [stdout] test providers::sync::tests::test_sync_large_batch ... ok
[INFO] [stdout] test providers::tests::test_display_name_unknown_returns_input ... ok
[INFO] [stdout] test providers::tests::test_get_provider_all_names_resolve ... ok
[INFO] [stdout] test providers::tests::test_get_provider_all_known ... ok
[INFO] [stdout] test providers::tests::test_get_provider_case_sensitive_and_unknown ... ok
[INFO] [stdout] test providers::tests::test_get_provider_digitalocean ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_auth ... ok
[INFO] [stdout] test providers::tests::test_get_provider_linode ... ok
[INFO] [stdout] test providers::tests::test_get_provider_proxmox ... ok
[INFO] [stdout] test providers::tests::test_get_provider_unknown_returns_none ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_cancelled ... ok
[INFO] [stdout] test providers::tests::test_get_provider_vultr ... ok
[INFO] [stdout] test providers::tests::test_get_provider_with_config_all_providers ... ok
[INFO] [stdout] test providers::tests::test_get_provider_hetzner ... ok
[INFO] [stdout] test providers::tests::test_get_provider_with_config_non_proxmox_delegates ... ok
[INFO] [stdout] test providers::tests::test_get_provider_with_config_proxmox_uses_url ... ok
[INFO] [stdout] test providers::tests::test_get_provider_with_config_unknown_returns_none ... ok
[INFO] [stdout] test providers::tests::test_provider_display_name_unknown ... ok
[INFO] [stdout] test providers::tests::test_provider_error_debug_http ... ok
[INFO] [stdout] test providers::tests::test_get_provider_upcloud ... ok
[INFO] [stdout] test providers::tests::test_provider_display_name_all ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_http ... ok
[INFO] [stdout] test providers::tests::test_provider_error_debug_partial_result ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_partial_result ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_rate_limited ... ok
[INFO] [stdout] test providers::tests::test_provider_host_clone ... ok
[INFO] [stdout] test providers::tests::test_provider_error_display_parse ... ok
[INFO] [stdout] test providers::tests::test_provider_names_contains_all ... ok
[INFO] [stdout] test providers::tests::test_provider_short_labels ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_bare_ipv6 ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_digit_then_letters_not_stripped ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_empty ... ok
[INFO] [stdout] test providers::tests::test_provider_host_construction ... ok
[INFO] [stdout] test providers::tests::test_provider_fetch_hosts_delegates_to_cancellable ... ok
[INFO] [stdout] test providers::tests::test_provider_host_empty_fields ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv4_with_32 ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv6_full_notation ... ok
[INFO] [stdout] test providers::tests::test_provider_names_count ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv4_with_8 ... ok
[INFO] [stdout] test providers::tests::test_provider_names_has_all_six ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv6_with_prefix ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_just_slash ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv6_with_64 ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_multiple_slashes ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_slash_with_letters ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_slash_without_digits ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_trailing_slash ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_empty_interfaces ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_filters_by_type ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_private_not_in_public ... ok
[INFO] [stdout] test providers::tests::test_strip_cidr_ipv4_passthrough ... ok
[INFO] [stdout] test providers::upcloud::tests::test_empty_server_list ... ok
[INFO] [stdout] test providers::upcloud::tests::test_pagination_continues_when_count_equals_limit ... ok
[INFO] [stdout] test providers::upcloud::tests::test_parse_detail_missing_networking ... ok
[INFO] [stdout] test providers::upcloud::tests::test_pagination_stops_when_count_less_than_limit ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_no_matching_type ... ok
[INFO] [stdout] test providers::upcloud::tests::test_parse_server_detail_with_networking ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_across_multiple_public_interfaces ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_both_placeholders ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_empty ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_multiple_public_v4_uses_first ... ok
[INFO] [stdout] test providers::upcloud::tests::test_parse_missing_tags_and_labels ... ok
[INFO] [stdout] test providers::upcloud::tests::test_parse_server_list_response ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_multiple_addresses_on_same_interface ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_placeholder_ipv4_falls_through_to_ipv6 ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_public_ipv4 ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_utility_interface_ignored ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_private_only ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_public_empty_addresses ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_public_ipv6_fallback ... ok
[INFO] [stdout] test providers::upcloud::tests::test_collect_ips_two_public_interfaces ... ok
[INFO] [stdout] test providers::upcloud::tests::test_detail_empty_interfaces ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_skips_placeholder_ipv6 ... ok
[INFO] [stdout] test providers::upcloud::tests::test_labels_only_no_tags ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_utility_skipped ... ok
[INFO] [stdout] test providers::upcloud::tests::test_server_name_hostname_fallback ... ok
[INFO] [stdout] test providers::upcloud::tests::test_select_ip_skips_placeholder_ipv4 ... ok
[INFO] [stdout] test providers::upcloud::tests::test_server_uuid_is_string ... ok
[INFO] [stdout] test providers::upcloud::tests::test_tags_combined_and_sorted ... ok
[INFO] [stdout] test providers::upcloud::tests::test_tags_label_empty_value_key_only ... ok
[INFO] [stdout] test providers::upcloud::tests::test_tags_only_no_labels ... ok
[INFO] [stdout] test providers::upcloud::tests::test_server_name_title_preferred ... ok
[INFO] [stdout] test providers::vultr::tests::test_parse_instance_response ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_both_placeholder_skipped ... ok
[INFO] [stdout] test providers::upcloud::tests::test_tags_lowercased_and_sorted ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_cursor_pagination_empty_next_stops ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_default_tags_empty ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_cursor_pagination_has_next ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_default_v6_empty_string ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_instance_list_stops ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_label ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_v4_and_valid_v6 ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_v4_and_empty_v6 ... ok
[INFO] [stdout] test providers::upcloud::tests::test_server_name_uses_title_when_present ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_missing_next_link ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_empty_ip_skipped ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_multiple_instances_parsed ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_label_with_special_chars ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_prefers_v4_over_v6 ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_extra_fields_ignored ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_multiple_tags ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_meta_extra_fields_ignored ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_placeholder_v4_no_v6_field ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_string_id_preserved ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_tags_preserved ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_v4_zero_not_empty ... ok
[INFO] [stdout] test quick_add::tests::test_full_target ... ok
[INFO] [stdout] test quick_add::tests::test_empty_hostname ... ok
[INFO] [stdout] test quick_add::tests::test_bracketed_ipv6_with_port ... ok
[INFO] [stdout] test quick_add::tests::test_empty_user ... ok
[INFO] [stdout] test quick_add::tests::test_empty_target ... ok
[INFO] [stdout] test quick_add::tests::test_host_only ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_v6_fallback ... ok
[INFO] [stdout] test quick_add::tests::test_host_and_port ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_v6_placeholder_only ... ok
[INFO] [stdout] test providers::vultr::tests::test_vultr_valid_v4_ignores_placeholder_v6 ... ok
[INFO] [stdout] test quick_add::tests::test_bare_ipv6 ... ok
[INFO] [stdout] test quick_add::tests::test_bracketed_ipv6_no_port ... ok
[INFO] [stdout] test quick_add::tests::test_invalid_port_text ... ok
[INFO] [stdout] test quick_add::tests::test_looks_like_target_bare_ipv6 ... ok
[INFO] [stdout] test quick_add::tests::test_looks_like_target_plain_host ... ok
[INFO] [stdout] test quick_add::tests::test_looks_like_target_bracketed_ipv6 ... ok
[INFO] [stdout] test quick_add::tests::test_looks_like_target_with_at ... ok
[INFO] [stdout] test quick_add::tests::test_looks_like_target_with_port ... ok
[INFO] [stdout] test quick_add::tests::test_port_overflow ... ok
[INFO] [stdout] test quick_add::tests::test_trailing_colon ... ok
[INFO] [stdout] test quick_add::tests::test_user_and_host ... ok
[INFO] [stdout] test quick_add::tests::test_user_at_ipv6 ... ok
[INFO] [stdout] test quick_add::tests::test_port_zero ... ok
[INFO] [stdout] test snippet::tests::test_get_not_found ... ok
[INFO] [stdout] test snippet::tests::test_name_with_equals_roundtrip ... ok
[INFO] [stdout] test snippet::tests::test_parse_duplicate_sections_first_wins ... ok
[INFO] [stdout] test quick_add::tests::test_user_with_space ... ok
[INFO] [stdout] test quick_add::tests::test_hostname_with_control_char ... ok
[INFO] [stdout] test snippet::tests::test_parse_empty ... ok
[INFO] [stdout] test quick_add::tests::test_hostname_with_space ... ok
[INFO] [stdout] test snippet::tests::test_parse_line_without_equals_ignored ... ok
[INFO] [stdout] test snippet::tests::test_parse_command_with_equals ... ok
[INFO] [stdout] test snippet::tests::test_parse_comments_and_blanks ... ok
[INFO] [stdout] test quick_add::tests::test_user_with_control_char ... ok
[INFO] [stdout] test snippet::tests::test_get_found ... ok
[INFO] [stdout] test snippet::tests::test_parse_only_comments_and_blanks ... ok
[INFO] [stdout] test snippet::tests::test_parse_multiple_snippets ... ok
[INFO] [stdout] test snippet::tests::test_description_with_equals ... ok
[INFO] [stdout] test snippet::tests::test_description_optional ... ok
[INFO] [stdout] test snippet::tests::test_parse_trailing_content_after_last_section ... ok
[INFO] [stdout] test snippet::tests::test_parse_whitespace_in_section_name ... ok
[INFO] [stdout] test snippet::tests::test_remove ... ok
[INFO] [stdout] test snippet::tests::test_parse_section_without_close_bracket ... ok
[INFO] [stdout] test snippet::tests::test_save_roundtrip ... ok
[INFO] [stdout] test snippet::tests::test_parse_single_snippet ... ok
[INFO] [stdout] test snippet::tests::test_remove_nonexistent_noop ... ok
[INFO] [stdout] test snippet::tests::test_snippet_with_complex_command ... ok
[INFO] [stdout] test snippet::tests::test_parse_snippet_without_command_skipped ... ok
[INFO] [stdout] test snippet::tests::test_parse_whitespace_around_key_value ... ok
[INFO] [stdout] test snippet::tests::test_set_adds_new ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_control_chars ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_empty ... ok
[INFO] [stdout] test snippet::tests::test_set_multiple_then_remove_all ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_valid ... ok
[INFO] [stdout] test snippet::tests::test_parse_unknown_keys_ignored ... ok
[INFO] [stdout] test snippet::tests::test_set_overwrite_preserves_order ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_with_newline ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_with_tab ... ok
[INFO] [stdout] test snippet::tests::test_set_replaces_existing ... ok
[INFO] [stdout] test snippet::tests::test_snippet_command_with_pipes_and_redirects ... ok
[INFO] [stdout] test snippet::tests::test_save_to_temp_file ... ok
[INFO] [stdout] test snippet::tests::test_validate_command_whitespace_only ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_control_chars ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_empty ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_newline ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_valid ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_whitespace ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_special_chars ... ok
[INFO] [stdout] test snippet::tests::test_validate_name_with_equals ... ok
[INFO] [stdout] test ssh_config::model::tests::add_forward_preserves_indentation ... ok
[INFO] [stdout] test ssh_config::model::tests::add_forward_to_empty_block ... ok
[INFO] [stdout] test ssh_config::model::tests::add_forward_multi_pattern_host ... ok
[INFO] [stdout] test ssh_config::model::tests::add_multiple_forwards_same_type ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_coexists_with_provider_comment ... ok
[INFO] [stdout] test ssh_config::model::tests::add_forward_inserts_directive ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_host_with_multi_pattern_is_skipped ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_ignores_non_askpass_purple_comments ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_among_many_purple_comments ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_only_on_first_matching_host ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_mixed_with_tunnel_directives ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_custom_command ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_bw_source ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_keychain ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_idempotent_set_same_value ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_ignores_empty_value ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_does_not_interfere_with_host_matching ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_op_uri ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_vault_with_field ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_none_when_absent ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_returns_pass_source ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_survives_directive_reorder ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_tab_indent_preserved ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_with_crlf_line_endings ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_with_long_op_uri ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_with_value_containing_hash ... ok
[INFO] [stdout] test ssh_config::model::tests::find_tunnel_directives_multi_pattern_host ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_case_insensitive_key ... ok
[INFO] [stdout] test ssh_config::model::tests::edit_tunnel_detects_duplicate_after_remove ... ok
[INFO] [stdout] test ssh_config::model::tests::find_tunnel_directives_no_match ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_finds_match ... ok
[INFO] [stdout] test ssh_config::model::tests::askpass_with_value_containing_equals ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_multi_pattern_host ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_tab_whitespace_normalized ... ok
[INFO] [stdout] test ssh_config::model::tests::has_tunnels_true_with_forward ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_whitespace_normalized ... ok
[INFO] [stdout] test ssh_config::model::tests::is_included_host_false_for_nonexistent ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_no_match ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_leaves_other_directives ... ok
[INFO] [stdout] test ssh_config::model::tests::host_entry_tunnel_count_populated ... ok
[INFO] [stdout] test ssh_config::model::tests::multiple_hosts_independent_askpass ... ok
[INFO] [stdout] test ssh_config::model::tests::is_included_host_false_for_main_config ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_case_insensitive_key_match ... ok
[INFO] [stdout] test ssh_config::model::tests::is_included_host_multi_pattern_main_config ... ok
[INFO] [stdout] test ssh_config::model::tests::has_forward_exact_match ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_multi_pattern_host ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_no_match_is_noop ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_idempotent_same_value ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_long_op_uri ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_preserves_other_directives ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_preserves_other_non_directive_comments ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_removes_exact_match ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_replaces_existing ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_on_host_with_many_directives ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_returns_false_for_unknown_host ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_on_nonexistent_host ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_returns_false_on_no_match ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_preserves_indent ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_returns_true_on_match ... ok
[INFO] [stdout] test ssh_config::model::tests::remove_forward_tab_whitespace_normalized ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_adds_comment ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_custom_command_with_percent ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_does_not_remove_tags ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_empty_removes_comment ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_with_hash_in_value ... ok
[INFO] [stdout] test ssh_config::model::tests::to_entry_askpass_none_when_absent ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_with_equals_in_value ... ok
[INFO] [stdout] test ssh_config::model::tests::to_entry_includes_askpass ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_directives_skips_malformed ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_directives_extracts_forwards ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_count_counts_forwards ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_then_clear_then_set_again ... ok
[INFO] [stdout] test ssh_config::model::tests::upsert_preserves_spaced_equals_separator ... ok
[INFO] [stdout] test ssh_config::model::tests::set_askpass_vault_with_hash_field ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_basic_host ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_comments_preserved ... ok
[INFO] [stdout] test ssh_config::model::tests::upsert_preserves_equals_separator ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_count_zero_for_no_forwards ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_equals_syntax_key_value ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_empty_config ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_host_inline_comment_stripped ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_host_with_tab_separator ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_host_multi_pattern_with_inline_comment ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_hostname_not_confused_with_host ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_identity_file_and_proxy_jump ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_include_directive_parsed ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_directives_extracts_all_types ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_equals_in_value_not_treated_as_separator ... ok
[INFO] [stdout] test ssh_config::model::tests::tunnel_count_case_insensitive ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_inline_comment_inside_quotes_preserved ... ok
[INFO] [stdout] test ssh_config::model::tests::upsert_preserves_space_separator_when_value_contains_equals ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_inline_comment_outside_quotes_stripped ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_ssh_command ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_unicode_comment_no_panic ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_multiple_hosts ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_match_block_is_global_line ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_wildcard_host_filtered ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_match_at_start_of_file ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_add_host_serializes ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_include_round_trip ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_delete_host_serializes ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_unicode_multibyte_line_no_panic ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_unknown_directives_preserved ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_match_block_round_trip ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_include_with_tab_separator ... ok
[INFO] [stdout] test ssh_config::parser::tests::test_match_block_survives_host_deletion ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_round_trip_basic ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_round_trip_with_comments ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_update_host_serializes ... ok
[INFO] [stdout] test ssh_keys::tests::test_parse_keygen_output_comment_with_spaces ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_round_trip_with_globals_and_wildcards ... ok
[INFO] [stdout] test ssh_keys::tests::test_find_linked_hosts_display_path ... ok
[INFO] [stdout] test ssh_keys::tests::test_parse_keygen_output_ed25519 ... ok
[INFO] [stdout] test ssh_keys::tests::test_find_linked_hosts_full_path ... ok
[INFO] [stdout] test ssh_config::writer::tests::test_update_host_preserves_unknown_directives ... ok
[INFO] [stdout] test ssh_keys::tests::test_find_linked_hosts_no_identity_file_links_to_all ... ok
[INFO] [stdout] test ssh_keys::tests::test_find_linked_hosts_wrong_identity_file ... ok
[INFO] [stdout] test ssh_keys::tests::test_parse_keygen_output_no_comment ... ok
[INFO] [stdout] test ssh_keys::tests::test_parse_keygen_output_rsa ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_dynamic_empty_port ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_empty_bind_port ... ok
[INFO] [stdout] test ssh_keys::tests::test_parse_keygen_output_no_type_parens ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_empty_remote_host ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_dynamic_non_numeric ... ok
[INFO] [stdout] test ssh_keys::tests::test_type_display ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_bind_port_0_message ... ok
[INFO] [stdout] test tunnel::tests::display_dynamic ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_dynamic_invalid_port_message ... ok
[INFO] [stdout] test tunnel::tests::display_ipv6_brackets ... ok
[INFO] [stdout] test ssh_keys::tests::test_parse_keygen_output_too_short ... ok
[INFO] [stdout] test tunnel::tests::display_local ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_remote_port_0_message ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_dynamic_trailing_content ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_no_colon_message ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_empty_remote_host_message ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_bind_port_0_rejected ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_dynamic ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_bare_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_unknown_type_message ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_error_whitespace_in_remote_host ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_invalid ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_extra_colons ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_missing_parts ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_local ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_no_colons ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_remote ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_remote_port_0_rejected ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_remote_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::parse_dynamic_forward_port_only ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_local_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::parse_dynamic_forward_with_bind_address ... ok
[INFO] [stdout] test tunnel::tests::parse_empty_brackets ... ok
[INFO] [stdout] test tunnel::tests::parse_empty_string ... ok
[INFO] [stdout] test tunnel::tests::parse_high_port_numbers ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_multi_char_type ... ok
[INFO] [stdout] test tunnel::tests::parse_invalid_value_returns_none ... ok
[INFO] [stdout] test tunnel::tests::parse_leading_trailing_whitespace ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_port_overflow ... ok
[INFO] [stdout] test tunnel::tests::parse_local_forward_port_only ... ok
[INFO] [stdout] test tunnel::tests::parse_multiple_spaces_between_parts ... ok
[INFO] [stdout] test tunnel::tests::parse_port_0_accepted ... ok
[INFO] [stdout] test tunnel::tests::parse_port_1_minimum ... ok
[INFO] [stdout] test tunnel::tests::parse_port_65536_rejected ... ok
[INFO] [stdout] test tunnel::tests::parse_remote_forward ... ok
[INFO] [stdout] test tunnel::tests::parse_tab_between_parts ... ok
[INFO] [stdout] test tunnel::tests::parse_missing_remote_host ... ok
[INFO] [stdout] test tunnel::tests::parse_missing_remote_port ... ok
[INFO] [stdout] test tunnel::tests::parse_port_negative_rejected ... ok
[INFO] [stdout] test tunnel::tests::parse_single_word ... ok
[INFO] [stdout] test tunnel::tests::parse_ipv6_bind_address ... ok
[INFO] [stdout] test tunnel::tests::parse_local_forward_with_bind_address ... ok
[INFO] [stdout] test tunnel::tests::from_cli_spec_lowercase ... ok
[INFO] [stdout] test tunnel::tests::parse_mismatched_bracket ... ok
[INFO] [stdout] test tunnel::tests::parse_unknown_directive_returns_none ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_dynamic_forward ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_dynamic_with_bind ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_ipv6_both ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_all_source_types_trigger ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_require_is_prefer ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_does_not_set_bw_session ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_env_var_names_match_connection ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_some_triggers_env_setup ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_stdin_is_null ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_sets_config_path_env ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_uses_dash_n_flag ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_none_does_not_set_env ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_dynamic ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_remote_forward_with_bind ... ok
[INFO] [stdout] test tunnel::tests::start_tunnel_askpass_empty_string_still_triggers ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_local_forward ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_ipv6_bind ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_local_forward_with_bind ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_remote_forward ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_ipv6_remote ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_local_with_bind ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_local ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_ipv6_bind ... ok
[INFO] [stdout] test ui::provider_list::tests::truncate_exact_fit ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_ipv6_dynamic ... ok
[INFO] [stdout] test ui::provider_list::tests::truncate_fits ... ok
[INFO] [stdout] test ui::provider_list::tests::truncate_mixed_ascii_cjk ... ok
[INFO] [stdout] test ui::provider_list::tests::truncate_multibyte_emoji ... ok
[INFO] [stdout] test ui::provider_list::tests::truncate_no_room ... ok
[INFO] [stdout] test tunnel::tests::roundtrip_ipv6_dynamic ... ok
[INFO] [stdout] test tunnel::tests::tunnel_type_cycle ... ok
[INFO] [stdout] test tunnel::tests::to_directive_value_ipv6_both ... ok
[INFO] [stdout] test ui::provider_list::tests::truncate_wide_cjk_odd_boundary ... ok
[INFO] [stdout] test update::tests::test_cache_empty_content ... ok
[INFO] [stdout] test ui::provider_list::tests::truncate_wide_cjk ... ok
[INFO] [stdout] test ui::provider_list::tests::truncate_ascii ... ok
[INFO] [stdout] test update::tests::test_cache_empty_version ... ok
[INFO] [stdout] test tunnel::tests::tunnel_type_from_directive_key ... ok
[INFO] [stdout] test update::tests::test_cache_fresh_up_to_date ... ok
[INFO] [stdout] test update::tests::test_detect_cargo_default ... ok
[INFO] [stdout] test update::tests::test_cache_garbage ... ok
[INFO] [stdout] test update::tests::test_cache_non_numeric_timestamp ... ok
[INFO] [stdout] test update::tests::test_cache_only_timestamp ... ok
[INFO] [stdout] test update::tests::test_cargo_default_path ... ok
[INFO] [stdout] test update::tests::test_cache_exactly_at_ttl ... ok
[INFO] [stdout] test update::tests::test_cache_expired ... ok
[INFO] [stdout] test update::tests::test_cache_fresh_newer_version ... ok
[INFO] [stdout] test update::tests::test_cargo_rejects_nested_bin ... ok
[INFO] [stdout] test update::tests::test_cache_fresh_older_version ... ok
[INFO] [stdout] test update::tests::test_cache_invalid_version_format ... ok
[INFO] [stdout] test update::tests::test_cache_missing_version_line ... ok
[INFO] [stdout] test update::tests::test_cargo_custom_home ... ok
[INFO] [stdout] test update::tests::test_cargo_rejects_prefix_overlap ... ok
[INFO] [stdout] test update::tests::test_detect_curl_local_bin ... ok
[INFO] [stdout] test update::tests::test_detect_homebrew_cellar ... ok
[INFO] [stdout] test update::tests::test_detect_homebrew_default_intel ... ok
[INFO] [stdout] test update::tests::test_current_version_is_valid ... ok
[INFO] [stdout] test update::tests::test_detect_curl_usr_local_bin ... ok
[INFO] [stdout] test update::tests::test_detect_unknown_path ... ok
[INFO] [stdout] test update::tests::test_extract_version_invalid_format ... ok
[INFO] [stdout] test update::tests::test_extract_version_with_v_prefix ... ok
[INFO] [stdout] test update::tests::test_extract_version_without_prefix ... ok
[INFO] [stdout] test update::tests::test_homebrew_cellar_rejects_bare_cellar ... ok
[INFO] [stdout] test update::tests::test_homebrew_cellar_rejects_non_cellar_suffix ... ok
[INFO] [stdout] test update::tests::test_homebrew_cellar_intel ... ok
[INFO] [stdout] test update::tests::test_is_newer_equal ... ok
[INFO] [stdout] test update::tests::test_homebrew_cellar_rejects_prefix_overlap ... ok
[INFO] [stdout] test update::tests::test_is_newer_major ... ok
[INFO] [stdout] test update::tests::test_is_newer_minor ... ok
[INFO] [stdout] test update::tests::test_is_newer_patch ... ok
[INFO] [stdout] test update::tests::test_parse_version ... ok
[INFO] [stdout] test update::tests::test_detect_no_false_positive_homebrew_in_name ... ok
[INFO] [stdout] test update::tests::test_parse_version_invalid ... ok
[INFO] [stdout] test update::tests::test_detect_root_path ... ok
[INFO] [stdout] test update::tests::test_extract_version_missing_tag ... ok
[INFO] [stdout] test update::tests::test_homebrew_cellar_apple_silicon ... ok
[INFO] [stdout] test update::tests::test_is_newer_invalid ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- handler::tests::test_snippet_form_edit_rename_rollback_on_save_failure stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'handler::tests::test_snippet_form_edit_rename_rollback_on_save_failure' (1304) panicked at src/handler.rs:4323:9:
[INFO] [stdout] assertion failed: app.snippet_store.get("check-disk").is_some()
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e8248dd8102 - std::backtrace_rs::backtrace::libunwind::trace::hff358a60abf734fc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5e8248dd8102 - std::backtrace_rs::backtrace::trace_unsynchronized::h3b121f916dd95ec6
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5e8248dd8102 - std::sys::backtrace::_print_fmt::hde0a62ded68798e9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5e8248dd8102 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h93773fc827e3113d
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5e8248deacea - core::fmt::rt::Argument::fmt::h01eff69902dad97f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5e8248deacea - core::fmt::write::hed7b5c73d82ecb7c
[INFO] [stdout]    6:     0x5e8248da0f66 - std::io::default_write_fmt::h2f696ff5b8bbaa4b
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5e8248da0f66 - std::io::Write::write_fmt::h5e66814db8a9cfce
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5e8248db6069 - std::sys::backtrace::BacktraceLock::print::h8b1d6fcc5a56d1a3
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5e8248db6069 - std::panicking::default_hook::{{closure}}::h2be84df4f189ae36
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5e8248db5f01 - std::panicking::default_hook::hf0ea8939246f43a9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5e8248d0c8de - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h02d35e3888986252
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   12:     0x5e8248d0c8de - test::test_main_with_exit_callback::{{closure}}::h939640a27d647173
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5e8248db6392 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hc9df09ff391af3e7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   14:     0x5e8248db6392 - std::panicking::panic_with_hook::hb4bd9ac1123582a0
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5e8248db615a - std::panicking::panic_handler::{{closure}}::hde00dd15f5637fe2
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:691:13
[INFO] [stdout]   16:     0x5e8248dafda9 - std::sys::backtrace::__rust_end_short_backtrace::hb72197fa777c1785
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5e8248d949bd - __rustc[4425a7e20b4c8619]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5e8248df3bac - core::panicking::panic_fmt::ha59b517dd231f4da
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5e8248df3b72 - core::panicking::panic::hbff2745fd4c5afec
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:150:5
[INFO] [stdout]   20:     0x5e82487d2218 - purple::handler::tests::test_snippet_form_edit_rename_rollback_on_save_failure::h99c82b13739b664d
[INFO] [stdout]                                at /opt/rustwide/workdir/src/handler.rs:4323:9
[INFO] [stdout]   21:     0x5e82487d2317 - purple::handler::tests::test_snippet_form_edit_rename_rollback_on_save_failure::{{closure}}::hd308eabe2e5b24ed
[INFO] [stdout]                                at /opt/rustwide/workdir/src/handler.rs:4307:64
[INFO] [stdout]   22:     0x5e82487e9e36 - core::ops::function::FnOnce::call_once::h6f760d02a6ccf422
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x5e8248d0c69b - core::ops::function::FnOnce::call_once::hddb3cd395c36bfbb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5e8248d0c69b - test::__rust_begin_short_backtrace::h0b6a7601d9750bfa
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:663:18
[INFO] [stdout]   25:     0x5e8248d200aa - test::run_test_in_process::{{closure}}::h444209903f00b347
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:74
[INFO] [stdout]   26:     0x5e8248d200aa - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hfb3ba8f46e537649
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   27:     0x5e8248d200aa - std::panicking::catch_unwind::do_call::h1672a45911fcf9dc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   28:     0x5e8248d200aa - std::panicking::catch_unwind::h0fadaee22787a6dd
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   29:     0x5e8248d200aa - std::panic::catch_unwind::hc47ad190f2c8e188
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   30:     0x5e8248d200aa - test::run_test_in_process::hcd7faaf934f29999
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:27
[INFO] [stdout]   31:     0x5e8248d200aa - test::run_test::{{closure}}::hddc4550da4871867
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:607:43
[INFO] [stdout]   32:     0x5e8248cfa504 - test::run_test::{{closure}}::h98ae26689f13ed94
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:637:41
[INFO] [stdout]   33:     0x5e8248cfa504 - std::sys::backtrace::__rust_begin_short_backtrace::h3ec4d1f21ad44588
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   34:     0x5e8248cfdea2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::{{closure}}::hd8bf2c73d479939f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   35:     0x5e8248cfdea2 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h3b4248f358af2491
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   36:     0x5e8248cfdea2 - std::panicking::catch_unwind::do_call::hda10a64f4b8daebe
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   37:     0x5e8248cfdea2 - std::panicking::catch_unwind::h659e5ee8336ec8c7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   38:     0x5e8248cfdea2 - std::panic::catch_unwind::h9d4d66a538912c18
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   39:     0x5e8248cfdea2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::h7557906bb51d79f1
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   40:     0x5e8248cfdea2 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h9e460d1d7fc83d35
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   41:     0x5e8248daad2f - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h61282da819d64ea9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2206:9
[INFO] [stdout]   42:     0x5e8248daad2f - std::sys::thread::unix::Thread::new::thread_start::h982f9ea829d1b5fb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/thread/unix.rs:127:17
[INFO] [stdout]   43:     0x7bb7ef2faaa4 - <unknown>
[INFO] [stdout]   44:     0x7bb7ef387a64 - clone
[INFO] [stdout]   45:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- handler::tests::test_snippet_form_submit_rollback_on_save_failure stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'handler::tests::test_snippet_form_submit_rollback_on_save_failure' (1310) panicked at src/handler.rs:4301:9:
[INFO] [stdout] assertion `left == right` failed
[INFO] [stdout]   left: 3
[INFO] [stdout]  right: 2
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e8248dd8102 - std::backtrace_rs::backtrace::libunwind::trace::hff358a60abf734fc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5e8248dd8102 - std::backtrace_rs::backtrace::trace_unsynchronized::h3b121f916dd95ec6
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5e8248dd8102 - std::sys::backtrace::_print_fmt::hde0a62ded68798e9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5e8248dd8102 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h93773fc827e3113d
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5e8248deacea - core::fmt::rt::Argument::fmt::h01eff69902dad97f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5e8248deacea - core::fmt::write::hed7b5c73d82ecb7c
[INFO] [stdout]    6:     0x5e8248da0f66 - std::io::default_write_fmt::h2f696ff5b8bbaa4b
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5e8248da0f66 - std::io::Write::write_fmt::h5e66814db8a9cfce
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5e8248db6069 - std::sys::backtrace::BacktraceLock::print::h8b1d6fcc5a56d1a3
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5e8248db6069 - std::panicking::default_hook::{{closure}}::h2be84df4f189ae36
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5e8248db5f01 - std::panicking::default_hook::hf0ea8939246f43a9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5e8248d0c8de - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h02d35e3888986252
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   12:     0x5e8248d0c8de - test::test_main_with_exit_callback::{{closure}}::h939640a27d647173
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5e8248db6392 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hc9df09ff391af3e7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   14:     0x5e8248db6392 - std::panicking::panic_with_hook::hb4bd9ac1123582a0
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5e8248db6128 - std::panicking::panic_handler::{{closure}}::hde00dd15f5637fe2
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:698:13
[INFO] [stdout]   16:     0x5e8248dafda9 - std::sys::backtrace::__rust_end_short_backtrace::hb72197fa777c1785
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5e8248d949bd - __rustc[4425a7e20b4c8619]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5e8248df3bac - core::panicking::panic_fmt::ha59b517dd231f4da
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5e8248df3a63 - core::panicking::assert_failed_inner::h3c3301979dc81b81
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:439:17
[INFO] [stdout]   20:     0x5e8248df38f3 - core::panicking::assert_failed::h59d9a1fd9655a77e
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:394:5
[INFO] [stdout]   21:     0x5e82487cee80 - purple::handler::tests::test_snippet_form_submit_rollback_on_save_failure::h4ba46944418da077
[INFO] [stdout]                                at /opt/rustwide/workdir/src/handler.rs:4301:9
[INFO] [stdout]   22:     0x5e82487cf017 - purple::handler::tests::test_snippet_form_submit_rollback_on_save_failure::{{closure}}::h730b2ffee01eb3a5
[INFO] [stdout]                                at /opt/rustwide/workdir/src/handler.rs:4285:59
[INFO] [stdout]   23:     0x5e82487e0ee6 - core::ops::function::FnOnce::call_once::h0defd125fbe248da
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5e8248d0c69b - core::ops::function::FnOnce::call_once::hddb3cd395c36bfbb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x5e8248d0c69b - test::__rust_begin_short_backtrace::h0b6a7601d9750bfa
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:663:18
[INFO] [stdout]   26:     0x5e8248d200aa - test::run_test_in_process::{{closure}}::h444209903f00b347
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:74
[INFO] [stdout]   27:     0x5e8248d200aa - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hfb3ba8f46e537649
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   28:     0x5e8248d200aa - std::panicking::catch_unwind::do_call::h1672a45911fcf9dc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   29:     0x5e8248d200aa - std::panicking::catch_unwind::h0fadaee22787a6dd
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   30:     0x5e8248d200aa - std::panic::catch_unwind::hc47ad190f2c8e188
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x5e8248d200aa - test::run_test_in_process::hcd7faaf934f29999
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:27
[INFO] [stdout]   32:     0x5e8248d200aa - test::run_test::{{closure}}::hddc4550da4871867
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:607:43
[INFO] [stdout]   33:     0x5e8248cfa504 - test::run_test::{{closure}}::h98ae26689f13ed94
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:637:41
[INFO] [stdout]   34:     0x5e8248cfa504 - std::sys::backtrace::__rust_begin_short_backtrace::h3ec4d1f21ad44588
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x5e8248cfdea2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::{{closure}}::hd8bf2c73d479939f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   36:     0x5e8248cfdea2 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h3b4248f358af2491
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   37:     0x5e8248cfdea2 - std::panicking::catch_unwind::do_call::hda10a64f4b8daebe
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   38:     0x5e8248cfdea2 - std::panicking::catch_unwind::h659e5ee8336ec8c7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   39:     0x5e8248cfdea2 - std::panic::catch_unwind::h9d4d66a538912c18
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x5e8248cfdea2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::h7557906bb51d79f1
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   41:     0x5e8248cfdea2 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h9e460d1d7fc83d35
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x5e8248daad2f - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h61282da819d64ea9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2206:9
[INFO] [stdout]   43:     0x5e8248daad2f - std::sys::thread::unix::Thread::new::thread_start::h982f9ea829d1b5fb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/thread/unix.rs:127:17
[INFO] [stdout]   44:     0x7bb7ef2faaa4 - <unknown>
[INFO] [stdout]   45:     0x7bb7ef387a64 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- handler::tests::test_snippet_picker_d_rollback_on_save_failure stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'handler::tests::test_snippet_picker_d_rollback_on_save_failure' (1315) panicked at src/handler.rs:4133:9:
[INFO] [stdout] assertion `left == right` failed
[INFO] [stdout]   left: 1
[INFO] [stdout]  right: 2
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e8248dd8102 - std::backtrace_rs::backtrace::libunwind::trace::hff358a60abf734fc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5e8248dd8102 - std::backtrace_rs::backtrace::trace_unsynchronized::h3b121f916dd95ec6
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5e8248dd8102 - std::sys::backtrace::_print_fmt::hde0a62ded68798e9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5e8248dd8102 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h93773fc827e3113d
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5e8248deacea - core::fmt::rt::Argument::fmt::h01eff69902dad97f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5e8248deacea - core::fmt::write::hed7b5c73d82ecb7c
[INFO] [stdout]    6:     0x5e8248da0f66 - std::io::default_write_fmt::h2f696ff5b8bbaa4b
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5e8248da0f66 - std::io::Write::write_fmt::h5e66814db8a9cfce
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5e8248db6069 - std::sys::backtrace::BacktraceLock::print::h8b1d6fcc5a56d1a3
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5e8248db6069 - std::panicking::default_hook::{{closure}}::h2be84df4f189ae36
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5e8248db5f01 - std::panicking::default_hook::hf0ea8939246f43a9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5e8248d0c8de - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h02d35e3888986252
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   12:     0x5e8248d0c8de - test::test_main_with_exit_callback::{{closure}}::h939640a27d647173
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5e8248db6392 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hc9df09ff391af3e7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   14:     0x5e8248db6392 - std::panicking::panic_with_hook::hb4bd9ac1123582a0
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5e8248db6128 - std::panicking::panic_handler::{{closure}}::hde00dd15f5637fe2
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:698:13
[INFO] [stdout]   16:     0x5e8248dafda9 - std::sys::backtrace::__rust_end_short_backtrace::hb72197fa777c1785
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5e8248d949bd - __rustc[4425a7e20b4c8619]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5e8248df3bac - core::panicking::panic_fmt::ha59b517dd231f4da
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5e8248df3a63 - core::panicking::assert_failed_inner::h3c3301979dc81b81
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:439:17
[INFO] [stdout]   20:     0x5e8248df38f3 - core::panicking::assert_failed::h59d9a1fd9655a77e
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:394:5
[INFO] [stdout]   21:     0x5e82487caa5d - purple::handler::tests::test_snippet_picker_d_rollback_on_save_failure::ha69c542af5c5c4e6
[INFO] [stdout]                                at /opt/rustwide/workdir/src/handler.rs:4133:9
[INFO] [stdout]   22:     0x5e82487cabf7 - purple::handler::tests::test_snippet_picker_d_rollback_on_save_failure::{{closure}}::h8b8552b29cd11100
[INFO] [stdout]                                at /opt/rustwide/workdir/src/handler.rs:4125:56
[INFO] [stdout]   23:     0x5e82487ef0e6 - core::ops::function::FnOnce::call_once::ha8d1a5e4c9ad301e
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5e8248d0c69b - core::ops::function::FnOnce::call_once::hddb3cd395c36bfbb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x5e8248d0c69b - test::__rust_begin_short_backtrace::h0b6a7601d9750bfa
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:663:18
[INFO] [stdout]   26:     0x5e8248d200aa - test::run_test_in_process::{{closure}}::h444209903f00b347
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:74
[INFO] [stdout]   27:     0x5e8248d200aa - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hfb3ba8f46e537649
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   28:     0x5e8248d200aa - std::panicking::catch_unwind::do_call::h1672a45911fcf9dc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   29:     0x5e8248d200aa - std::panicking::catch_unwind::h0fadaee22787a6dd
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   30:     0x5e8248d200aa - std::panic::catch_unwind::hc47ad190f2c8e188
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x5e8248d200aa - test::run_test_in_process::hcd7faaf934f29999
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:27
[INFO] [stdout]   32:     0x5e8248d200aa - test::run_test::{{closure}}::hddc4550da4871867
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:607:43
[INFO] [stdout]   33:     0x5e8248cfa504 - test::run_test::{{closure}}::h98ae26689f13ed94
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:637:41
[INFO] [stdout]   34:     0x5e8248cfa504 - std::sys::backtrace::__rust_begin_short_backtrace::h3ec4d1f21ad44588
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x5e8248cfdea2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::{{closure}}::hd8bf2c73d479939f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   36:     0x5e8248cfdea2 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h3b4248f358af2491
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   37:     0x5e8248cfdea2 - std::panicking::catch_unwind::do_call::hda10a64f4b8daebe
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   38:     0x5e8248cfdea2 - std::panicking::catch_unwind::h659e5ee8336ec8c7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   39:     0x5e8248cfdea2 - std::panic::catch_unwind::h9d4d66a538912c18
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x5e8248cfdea2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::h7557906bb51d79f1
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   41:     0x5e8248cfdea2 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h9e460d1d7fc83d35
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x5e8248daad2f - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h61282da819d64ea9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2206:9
[INFO] [stdout]   43:     0x5e8248daad2f - std::sys::thread::unix::Thread::new::thread_start::h982f9ea829d1b5fb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/thread/unix.rs:127:17
[INFO] [stdout]   44:     0x7bb7ef2faaa4 - <unknown>
[INFO] [stdout]   45:     0x7bb7ef387a64 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     handler::tests::test_snippet_form_edit_rename_rollback_on_save_failure
[INFO] [stdout]     handler::tests::test_snippet_form_submit_rollback_on_save_failure
[INFO] [stdout]     handler::tests::test_snippet_picker_d_rollback_on_save_failure
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 1448 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--bin purple`
[INFO] running `Command { std: "docker" "inspect" "74745bea58959448c0a25c24d2e852fb84e80224c02ab26703497dbc7486a233", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "74745bea58959448c0a25c24d2e852fb84e80224c02ab26703497dbc7486a233", kill_on_drop: false }`
[INFO] [stdout] 74745bea58959448c0a25c24d2e852fb84e80224c02ab26703497dbc7486a233
