[INFO] fetching crate repoverlay 0.13.0... [INFO] testing repoverlay-0.13.0 against try#dec9417b8611e34e787a3e4c37686b5131f9e5c5 for pr-154210-2 [INFO] extracting crate repoverlay 0.13.0 into /workspace/builds/worker-6-tc2/source [INFO] removed /workspace/builds/worker-6-tc2/source/.cargo/config.toml [INFO] removed /workspace/builds/worker-6-tc2/source/rust-toolchain.toml [INFO] started tweaking crates.io crate repoverlay 0.13.0 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate repoverlay 0.13.0 [INFO] tweaked toml for crates.io crate repoverlay 0.13.0 written to /workspace/builds/worker-6-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate repoverlay 0.13.0 on toolchain dec9417b8611e34e787a3e4c37686b5131f9e5c5 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate repoverlay 0.13.0 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" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 259ce899a2d1153c441783233fea74414dc75634e353a5ab3c595e45d46a6279 [INFO] running `Command { std: "docker" "start" "-a" "259ce899a2d1153c441783233fea74414dc75634e353a5ab3c595e45d46a6279", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "259ce899a2d1153c441783233fea74414dc75634e353a5ab3c595e45d46a6279", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "259ce899a2d1153c441783233fea74414dc75634e353a5ab3c595e45d46a6279", kill_on_drop: false }` [INFO] [stdout] 259ce899a2d1153c441783233fea74414dc75634e353a5ab3c595e45d46a6279 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-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" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] f2e10eea36673932e59508eccbe4d9c6d87e20efc731a6f0f5252511d939918f [INFO] running `Command { std: "docker" "start" "-a" "f2e10eea36673932e59508eccbe4d9c6d87e20efc731a6f0f5252511d939918f", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.185 [INFO] [stderr] Compiling fnv v1.0.7 [INFO] [stderr] Compiling pkg-config v0.3.33 [INFO] [stderr] Compiling num_threads v0.1.7 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Compiling castaway v0.2.4 [INFO] [stderr] Compiling anstyle-parse v1.0.0 [INFO] [stderr] Compiling anstyle-query v1.1.5 [INFO] [stderr] Compiling colorchoice v1.0.5 [INFO] [stderr] Compiling instability v0.3.12 [INFO] [stderr] Compiling anstyle v1.0.14 [INFO] [stderr] Compiling is_terminal_polyfill v1.70.2 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling compact_str v0.9.0 [INFO] [stderr] Compiling vergen-lib v9.1.0 [INFO] [stderr] Compiling convert_case v0.10.0 [INFO] [stderr] Compiling openssl v0.10.77 [INFO] [stderr] Compiling aho-corasick v1.1.4 [INFO] [stderr] Compiling vergen v9.1.0 [INFO] [stderr] Compiling itertools v0.14.0 [INFO] [stderr] Compiling regex-syntax v0.8.10 [INFO] [stderr] Compiling clap_lex v1.1.0 [INFO] [stderr] Compiling cfg_aliases v0.2.1 [INFO] [stderr] Compiling anstream v1.0.0 [INFO] [stderr] Compiling litrs v1.0.0 [INFO] [stderr] Compiling native-tls v0.2.18 [INFO] [stderr] Compiling nix v0.31.2 [INFO] [stderr] Compiling line-clipping v0.3.7 [INFO] [stderr] Compiling option-ext v0.2.0 [INFO] [stderr] Compiling openssl-probe v0.2.1 [INFO] [stderr] Compiling clap_builder v4.6.0 [INFO] [stderr] Compiling lru v0.16.4 [INFO] [stderr] Compiling percent-encoding v2.3.2 [INFO] [stderr] Compiling openssl-sys v0.9.113 [INFO] [stderr] Compiling indexmap v2.14.0 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling thread_local v1.1.9 [INFO] [stderr] Compiling document-features v0.2.12 [INFO] [stderr] Compiling form_urlencoded v1.2.2 [INFO] [stderr] Compiling unit-prefix v0.5.2 [INFO] [stderr] Compiling semver v1.0.28 [INFO] [stderr] Compiling shell-words v1.1.1 [INFO] [stderr] Compiling jiff v0.2.23 [INFO] [stderr] Compiling fuzzy-matcher v0.3.7 [INFO] [stderr] Compiling glob v0.3.3 [INFO] [stderr] Compiling similar v2.7.0 [INFO] [stderr] Compiling colored v3.1.1 [INFO] [stderr] Compiling time v0.3.47 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling unicode-truncate v2.0.1 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling mio v1.2.0 [INFO] [stderr] Compiling console v0.16.3 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling dirs-sys v0.5.0 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling tempfile v3.27.0 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling directories v6.0.0 [INFO] [stderr] Compiling dirs v6.0.0 [INFO] [stderr] Compiling indicatif v0.18.4 [INFO] [stderr] Compiling dialoguer v0.12.0 [INFO] [stderr] Compiling ctrlc v3.5.2 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling darling_core v0.20.11 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling zerovec-derive v0.11.3 [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 openssl-macros v0.1.1 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling clap_derive v4.6.0 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling zerofrom-derive v0.1.7 [INFO] [stderr] Compiling yoke-derive v0.8.2 [INFO] [stderr] Compiling derive_more v2.1.1 [INFO] [stderr] Compiling crossterm v0.29.0 [INFO] [stderr] Compiling env_filter v1.0.1 [INFO] [stderr] Compiling env_logger v0.11.10 [INFO] [stderr] Compiling zerofrom v0.1.7 [INFO] [stderr] Compiling yoke v0.8.2 [INFO] [stderr] Compiling zerovec v0.11.6 [INFO] [stderr] Compiling zerotrie v0.2.4 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling kasuari v0.4.12 [INFO] [stderr] Compiling darling_macro v0.20.11 [INFO] [stderr] Compiling strum v0.27.2 [INFO] [stderr] Compiling ratatui-core v0.1.0 [INFO] [stderr] Compiling darling v0.20.11 [INFO] [stderr] Compiling derive_builder_core v0.20.2 [INFO] [stderr] Compiling clap v4.6.0 [INFO] [stderr] Compiling clap-markdown v0.1.5 [INFO] [stderr] Compiling clap_complete v4.6.2 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling tinystr v0.8.3 [INFO] [stderr] Compiling potential_utf v0.1.5 [INFO] [stderr] Compiling icu_locale_core v2.2.0 [INFO] [stderr] Compiling icu_collections v2.2.0 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling derive_builder_macro v0.20.2 [INFO] [stderr] Compiling ratatui-widgets v0.3.0 [INFO] [stderr] Compiling ratatui-crossterm v0.1.0 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling derive_builder v0.20.2 [INFO] [stderr] Compiling icu_provider v2.2.0 [INFO] [stderr] Compiling repoverlay v0.13.0 (/opt/rustwide/workdir) [INFO] [stderr] Compiling icu_normalizer v2.2.0 [INFO] [stderr] Compiling icu_properties v2.2.0 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling sickle v0.2.0 [INFO] [stderr] Compiling minreq v2.14.1 [INFO] [stderr] Compiling tiny-update-check v1.1.1 [INFO] [stderr] Compiling tui-tree-widget v0.24.0 [INFO] [stderr] Compiling ratatui v0.30.0 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 07s [INFO] running `Command { std: "docker" "inspect" "f2e10eea36673932e59508eccbe4d9c6d87e20efc731a6f0f5252511d939918f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f2e10eea36673932e59508eccbe4d9c6d87e20efc731a6f0f5252511d939918f", kill_on_drop: false }` [INFO] [stdout] f2e10eea36673932e59508eccbe4d9c6d87e20efc731a6f0f5252511d939918f [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-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" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 30739cd43581dc9dc7d2174b59fff1b93af2917ef89447d29e80bfe35cc59465 [INFO] running `Command { std: "docker" "start" "-a" "30739cd43581dc9dc7d2174b59fff1b93af2917ef89447d29e80bfe35cc59465", kill_on_drop: false }` [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling similar v2.7.0 [INFO] [stderr] Compiling predicates-core v1.0.10 [INFO] [stderr] Compiling repoverlay v0.13.0 (/opt/rustwide/workdir) [INFO] [stderr] Compiling float-cmp v0.10.0 [INFO] [stderr] Compiling assert_cmd v2.2.0 [INFO] [stderr] Compiling termtree v0.5.1 [INFO] [stderr] Compiling normalize-line-endings v0.3.0 [INFO] [stderr] Compiling difflib v0.4.0 [INFO] [stderr] Compiling wait-timeout v0.2.1 [INFO] [stderr] Compiling predicates-tree v1.0.13 [INFO] [stderr] Compiling insta v1.47.2 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling bstr v1.12.1 [INFO] [stderr] Compiling env_filter v1.0.1 [INFO] [stderr] Compiling predicates v3.1.4 [INFO] [stderr] Compiling env_logger v0.11.10 [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 28.25s [INFO] running `Command { std: "docker" "inspect" "30739cd43581dc9dc7d2174b59fff1b93af2917ef89447d29e80bfe35cc59465", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "30739cd43581dc9dc7d2174b59fff1b93af2917ef89447d29e80bfe35cc59465", kill_on_drop: false }` [INFO] [stdout] 30739cd43581dc9dc7d2174b59fff1b93af2917ef89447d29e80bfe35cc59465 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-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" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] f4040a3bed4949c90939752b99a2a97900a2b3bd5db78f9d891422f00d1825e5 [INFO] running `Command { std: "docker" "start" "-a" "f4040a3bed4949c90939752b99a2a97900a2b3bd5db78f9d891422f00d1825e5", kill_on_drop: false }` [INFO] [stderr] Compiling repoverlay v0.13.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 16.29s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/repoverlay-b76931f38b07cb06) [INFO] [stdout] [INFO] [stdout] running 1150 tests [INFO] [stdout] test cache::tests::test_cache_dir_function ... ok [INFO] [stdout] test cache::tests::test_clear_cache_empty ... ok [INFO] [stdout] test cache::tests::test_cache_meta_roundtrip ... ok [INFO] [stdout] test cache::tests::test_cache_manager_cache_dir_accessor ... ok [INFO] [stdout] test cache::tests::test_cache_manager_creation ... ok [INFO] [stdout] test cache::tests::test_clear_cache_with_repos ... ok [INFO] [stdout] test cache::tests::test_check_for_updates_nonexistent_repo ... ok [INFO] [stdout] test cache::tests::test_list_cached_empty_cache ... ok [INFO] [stdout] test cache::tests::test_load_meta_returns_none_for_missing_file ... ok [INFO] [stdout] test cache::tests::test_list_cached_with_repos ... ok [INFO] [stdout] test cache::tests::test_list_cached_with_metadata ... ok [INFO] [stdout] test cache::tests::test_list_cached_skips_non_directories ... ok [INFO] [stdout] test cache::tests::test_list_cached_skips_files_in_owner_directory ... ok [INFO] [stdout] test cache::tests::test_load_meta_returns_none_for_invalid_content ... ok [INFO] [stdout] test cache::tests::test_remove_cached_cleans_empty_owner_dir ... ok [INFO] [stdout] test cache::tests::test_remove_cached_existing ... ok [INFO] [stdout] test cache::tests::test_remove_cached_nonexistent ... ok [INFO] [stdout] test cache::tests::test_save_and_load_meta_roundtrip ... ok [INFO] [stdout] test cache::tests::test_remove_cached_preserves_sibling_repos ... ok [INFO] [stdout] test cache::tests::test_repo_path ... ok [INFO] [stdout] test cache::tests::test_repo_path_with_subpath ... ok [INFO] [stdout] test cache::tests::check_for_updates_handles_fetch_failure_gracefully ... ok [INFO] [stdout] test cli::tests::apply::applies_directory_symlink ... ok [INFO] [stdout] test cli::tests::apply::applies_single_file ... ok [INFO] [stdout] test cli::tests::apply::applies_nested_files ... ok [INFO] [stdout] test cli::tests::apply::applies_directory_with_copy_mode ... ok [INFO] [stdout] test cli::tests::apply::applies_with_copy_mode ... ok [INFO] [stdout] test cli::tests::apply::directory_symlink_skips_files_inside ... ok [INFO] [stdout] test cache::tests::test_get_current_commit_fails_on_non_git_dir ... ok [INFO] [stdout] test cache::tests::save_meta_fails_gracefully_when_dir_read_only ... FAILED [INFO] [stdout] test cache::tests::ensure_cached_propagates_git_errors_cleanly ... ok [INFO] [stdout] test cli::tests::apply::directory_conflict_with_existing_overlay ... ok [INFO] [stdout] test cli::tests::apply::directory_conflict_with_existing_path ... ok [INFO] [stdout] test cli::tests::apply::fails_on_non_git_directory ... ok [INFO] [stdout] test cli::tests::apply::fails_on_duplicate_overlay_name ... ok [INFO] [stdout] test cli::tests::apply::directory_symlink_warns_on_nonexistent ... ok [INFO] [stdout] test cli::tests::apply::directory_path_not_a_directory_warning ... ok [INFO] [stdout] test cli::tests::apply::directory_symlink_updates_git_exclude_with_trailing_slash ... ok [INFO] [stdout] test cli::tests::apply::fails_on_file_conflict_with_repo ... ok [INFO] [stdout] test cli::tests::apply::dry_run_does_not_apply_overlay ... ok [INFO] [stdout] test cache::tests::test_ref_exists_returns_false_for_nonexistent_ref ... ok [INFO] [stdout] test cache::tests::clone_repo_propagates_errors_for_invalid_repo ... ok [INFO] [stdout] test cli::tests::apply::fails_on_empty_overlay ... ok [INFO] [stdout] test cache::tests::test_get_current_commit_succeeds_on_git_repo ... ok [INFO] [stdout] test cache::tests::test_check_for_updates_tag_returns_none ... ok [INFO] [stdout] test cache::tests::test_check_for_updates_commit_returns_none ... ok [INFO] [stdout] test cli::tests::apply::force_overwrites_existing_directory ... ok [INFO] [stdout] test cli::tests::apply::fails_on_file_conflict_between_overlays ... ok [INFO] [stdout] test cli::tests::apply::nested_directory_symlinks_use_forward_slashes ... ok [INFO] [stdout] test cli::tests::apply::fails_on_nonexistent_source ... ok [INFO] [stdout] test cli::tests::cache_command_tests::cache_remove_fails_on_invalid_format ... ok [INFO] [stdout] test cli::tests::cache_command_tests::cache_remove_fails_on_too_many_slashes ... ok [INFO] [stdout] test cli::tests::cache_command_tests::cache_remove_fails_when_no_repo_or_all ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_merge_combinable_with_force ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_merge_combinable_with_skip_conflicts ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_parses_all_options ... ok [INFO] [stdout] test cli::tests::apply::mapping_supports_nested_paths_in_key_and_value ... ok [INFO] [stdout] test cli::tests::apply::force_overwrites_existing_file ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_parses_force_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_parses_interactive_flag ... ok [INFO] [stdout] test cache::tests::test_ref_exists_returns_true_for_existing_ref ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_parses_dry_run ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_parses_interactive_short_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_parses_merge_flag ... ok [INFO] [stdout] test cli::tests::apply::skip_conflicts_skips_cross_overlay_directory_conflict ... ok [INFO] [stdout] test cli::tests::apply::skip_conflicts_skips_existing_directory ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_parses_skip_conflicts_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_rejects_force_and_skip_conflicts_together ... ok [INFO] [stdout] test cli::tests::apply::skip_conflicts_fails_on_same_name_overlay ... ok [INFO] [stdout] test cli::tests::apply::updates_git_exclude_with_overlay_section ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_rejects_skip_conflicts_and_interactive_together ... ok [INFO] [stdout] test cli::tests::apply::force_fails_on_cross_overlay_directory_conflict ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_parses_source_argument ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_requires_source ... ok [INFO] [stdout] test cli::tests::cli_parsing::apply_rejects_force_and_interactive_together ... ok [INFO] [stdout] test cli::tests::apply::uses_name_override ... ok [INFO] [stdout] test cli::tests::apply::uses_overlay_name_from_config ... ok [INFO] [stdout] test cli::tests::apply::respects_path_mappings ... ok [INFO] [stdout] test cli::tests::apply::skip_conflicts_skips_existing_file ... ok [INFO] [stdout] test cli::tests::cli_parsing::browse_parses_no_interactive ... ok [INFO] [stdout] test cli::tests::cli_parsing::browse_parses_source_argument ... ok [INFO] [stdout] test cli::tests::cli_parsing::browse_defaults_show_all_false ... ok [INFO] [stdout] test cli::tests::cli_parsing::browse_parses_target ... ok [INFO] [stdout] test cli::tests::cli_parsing::browse_source_with_other_flags ... ok [INFO] [stdout] test cli::tests::cli_parsing::browse_source_is_optional ... ok [INFO] [stdout] test cli::tests::cli_parsing::cache_clear_subcommand ... ok [INFO] [stdout] test cli::tests::cli_parsing::browse_parses_dry_run ... ok [INFO] [stdout] test cli::tests::cli_parsing::cache_clear_with_yes_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::cache_list_subcommand ... ok [INFO] [stdout] test cli::tests::cli_parsing::browse_parses_filter ... ok [INFO] [stdout] test cli::tests::apply::force_reapplies_same_name_overlay ... ok [INFO] [stdout] test cli::tests::cli_parsing::browse_parses_show_all ... ok [INFO] [stdout] test cli::tests::cli_parsing::cache_path_subcommand ... ok [INFO] [stdout] test cli::tests::cli_parsing::cache_remove_all_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::create_accepts_no_args ... ok [INFO] [stdout] test cli::tests::cli_parsing::create_parses_options ... ok [INFO] [stdout] test cli::tests::cli_parsing::create_with_output_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_deprecated_dry_run_parses ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_add_subcommand_with_target_and_dry_run ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_add_subcommand_parses ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_deprecated_interactive_conflicts_with_add ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_deprecated_combined_add_remove ... ok [INFO] [stdout] test cli::tests::cli_parsing::cache_remove_parses_repo ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_deprecated_add_flag_parses ... ok [INFO] [stdout] test cli::tests::cli_parsing::cache_remove_no_args_parses_ok ... ok [INFO] [stdout] test cli::tests::apply::force_fails_on_cross_overlay_file_conflict ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_name_only_is_interactive ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_no_args_parses_for_interactive_selection ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_remove_subcommand_parses ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_deprecated_interactive_conflicts_with_remove ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_deprecated_remove_flag_parses ... ok [INFO] [stdout] test cli::tests::cli_parsing::edit_deprecated_target_flag_parses ... ok [INFO] [stdout] test cli::tests::cli_parsing::remove_parses_dry_run ... ok [INFO] [stdout] test cli::tests::cli_parsing::remove_parses_name_argument ... ok [INFO] [stdout] test cli::tests::cli_parsing::remove_parses_all_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::invalid_command_rejected ... ok [INFO] [stdout] test cli::tests::cli_parsing::remove_parses_short_interactive ... ok [INFO] [stdout] test cli::tests::cli_parsing::remove_parses_interactive ... ok [INFO] [stdout] test cli::tests::cli_parsing::restore_parses_dry_run ... ok [INFO] [stdout] test cli::tests::cli_parsing::restore_parses_interactive_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::restore_parses_skip_conflicts_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::restore_parses_force_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::restore_rejects_force_and_skip_conflicts_together ... ok [INFO] [stdout] test cli::tests::cli_parsing::status_parses_json_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::status_parses_quiet_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::short_flags_work ... ok [INFO] [stdout] test cli::tests::cli_parsing::switch_parses_interactive_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::switch_parses_source ... ok [INFO] [stdout] test cli::tests::cli_parsing::switch_parses_force_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::status_parses_name_filter ... ok [INFO] [stdout] test cli::tests::cli_parsing::status_json_with_name_filter ... ok [INFO] [stdout] test cli::tests::cli_parsing::restore_rejects_force_and_interactive_together ... ok [INFO] [stdout] test cli::tests::cli_parsing::switch_parses_dry_run ... ok [INFO] [stdout] test cli::tests::apply::skip_conflicts_skips_cross_overlay_file_conflict ... ok [INFO] [stdout] test cli::tests::cli_parsing::cli_structure_is_valid ... ok [INFO] [stdout] test cli::tests::cli_parsing::status_parses_without_arguments ... ok [INFO] [stdout] test cli::tests::cli_parsing::status_parses_short_quiet ... ok [INFO] [stdout] test cli::tests::cli_parsing::switch_rejects_force_and_interactive_together ... ok [INFO] [stdout] test cli::tests::cli_parsing::switch_parses_skip_conflicts_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::sync_parses_all_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::sync_parses_no_args ... ok [INFO] [stdout] test cli::tests::cli_parsing::switch_rejects_force_and_skip_conflicts_together ... ok [INFO] [stdout] test cli::tests::cli_parsing::sync_parses_dry_run ... ok [INFO] [stdout] test cli::tests::cli_parsing::sync_parses_target_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::update_parses_force_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::update_parses_overlay_name ... ok [INFO] [stdout] test cli::tests::cli_parsing::update_parses_interactive_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::update_rejects_force_and_interactive_together ... ok [INFO] [stdout] test cli::tests::cli_parsing::unknown_flag_rejected ... ok [INFO] [stdout] test cli::tests::cli_parsing::update_rejects_force_and_skip_conflicts_together ... ok [INFO] [stdout] test cli::tests::cli_parsing::update_parses_skip_conflicts_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing::sync_parses_name ... ok [INFO] [stdout] test cli::tests::cli_parsing::sync_parses_all_with_dry_run ... ok [INFO] [stdout] test cli::tests::parse_overlay_name_arg_additional_tests::empty_name_in_full_form ... ok [INFO] [stdout] test cli::tests::create::fails_on_non_git_source ... ok [INFO] [stdout] test cli::tests::parse_overlay_name_arg_additional_tests::two_slash_path_with_hyphens_and_underscores ... ok [INFO] [stdout] test cli::tests::create::generates_repoverlay_ccl_with_name ... ok [INFO] [stdout] test cli::tests::create::dry_run_does_not_create_files ... ok [INFO] [stdout] test cli::tests::create::fails_on_nonexistent_include_path ... ok [INFO] [stdout] test cli::tests::create::creates_overlay_with_single_file ... ok [INFO] [stdout] test cli::tests::create::create_output_with_name_creates_subdirectory ... ok [INFO] [stdout] test cli::tests::detect_target_repo_tests::fails_for_non_github_remote ... ok [INFO] [stdout] test cli::tests::create::create_local_dry_run_does_not_create_files ... ok [INFO] [stdout] test cli::tests::detect_target_repo_tests::fails_without_remote ... ok [INFO] [stdout] test cli::tests::parse_overlay_name_arg_additional_tests::five_slash_path_errors ... ok [INFO] [stdout] test cli::tests::create::create_local_creates_overlay_in_output_directory ... ok [INFO] [stdout] test cli::tests::parse_overlay_name_arg_tests::fails_on_invalid_single_slash ... ok [INFO] [stdout] test cli::tests::create::creates_overlay_with_directory ... ok [INFO] [stdout] test cli::tests::detect_target_repo_tests::detects_https_github_remote ... ok [INFO] [stdout] test cli::tests::parse_overlay_name_arg_tests::fails_on_too_many_slashes ... ok [INFO] [stdout] test cli::tests::parse_overlay_name_arg_tests::fails_on_empty_parts_in_full_form ... ok [INFO] [stdout] test cli::tests::parse_overlay_name_arg_tests::short_form_requires_git_remote ... ok [INFO] [stdout] test cli::tests::detect_target_repo_tests::detects_ssh_github_remote ... ok [INFO] [stdout] test cli::tests::parse_overlay_name_arg_tests::parses_full_form_org_repo_name ... ok [INFO] [stdout] test cli::tests::parse_overlay_name_arg_tests::short_form_works_with_github_remote ... ok [INFO] [stdout] test cli::tests::remove::cleans_git_exclude_for_overlay ... ok [INFO] [stdout] test cli::tests::create::dry_run_shows_discovered_files ... ok [INFO] [stdout] test cli::tests::remove::handle_remove_requires_name_or_interactive_flag ... ok [INFO] [stdout] test cli::tests::remove_section::empty_content ... ok [INFO] [stdout] test cli::tests::remove_section::no_section_present ... ok [INFO] [stdout] test cli::tests::remove_section::only_section ... ok [INFO] [stdout] test cli::tests::remove_section::removes_only_specified_overlay ... ok [INFO] [stdout] test cli::tests::remove_section::section_at_beginning ... ok [INFO] [stdout] test cli::tests::remove_section::section_at_end ... ok [INFO] [stdout] test cli::tests::remove_section::section_in_middle ... ok [INFO] [stdout] test cli::tests::remove::fails_when_no_overlay_applied ... ok [INFO] [stdout] test cli::tests::remove::preserves_non_empty_parent_directories ... ok [INFO] [stdout] test cli::tests::remove::dry_run_all_does_not_remove_overlays ... ok [INFO] [stdout] test cli::tests::remove::removes_copied_directory ... ok [INFO] [stdout] test cli::tests::remove::dry_run_does_not_remove_overlay ... ok [INFO] [stdout] test cli::tests::remove::fails_on_unknown_overlay_name ... ok [INFO] [stdout] test cli::tests::remove::handle_remove_with_name_succeeds ... ok [INFO] [stdout] test cli::tests::source_resolver_bugs::issue_145_update_code_should_handle_overlay_repo_separately ... ok [INFO] [stdout] test cli::tests::remove::removes_overlay_by_name ... ok [INFO] [stdout] test cli::tests::source_resolver_bugs::issue_147_resolve_should_use_source_name ... ok [INFO] [stdout] test cli::tests::remove::removes_all_overlays ... ok [INFO] [stdout] test cli::tests::remove::removes_directory_symlink ... ok [INFO] [stdout] test cli::tests::remove::handle_remove_with_all_flag_succeeds ... ok [INFO] [stdout] test cli::tests::source_resolver_bugs::issue_148_add_should_check_mutability_before_filesystem_changes ... ok [INFO] [stdout] test cli::tests::create::fails_when_no_files_specified_and_none_discovered ... ok [INFO] [stdout] test cli::tests::remove::handles_already_deleted_files ... ok [INFO] [stdout] test cli::tests::remove::removes_empty_parent_directories ... ok [INFO] [stdout] test cli::tests::source_resolver_bugs::issue_142_resolve_source_path_github_should_not_bail ... ok [INFO] [stdout] test cli::tests::switch::fails_on_non_git_target ... ok [INFO] [stdout] test cli::tests::switch::default_fails_on_existing_repo_file ... ok [INFO] [stdout] test cli::tests::status::shows_no_overlay_when_none_applied ... ok [INFO] [stdout] test cli::tests::source_resolver_bugs::issue_277_sync_single_rejects_library_source ... ok [INFO] [stdout] test cli::tests::status::fails_on_unknown_overlay_filter ... ok [INFO] [stdout] test cli::tests::source_resolver_bugs::issue_171_sync_single_name_calls_try_upgrade_github_source ... ok [INFO] [stdout] test cli::tests::source_resolver_bugs::issue_146_sync_single_name_should_check_source_type ... ok [INFO] [stdout] test cli::tests::source_resolver_bugs::issue_143_add_files_should_reject_github_clearly ... ok [INFO] [stdout] test cli::tests::source_resolver_bugs::issue_143_add_files_should_check_source_type_for_local ... ok [INFO] [stdout] test cli::tests::switch::applies_to_empty_repo ... ok [INFO] [stdout] test cli::tests::status::shows_status_for_multiple_overlays ... ok [INFO] [stdout] test cli::tests::sync::handle_sync_fails_on_non_git_target ... ok [INFO] [stdout] test cli::tests::sync::handle_sync_all_skips_github_sources ... ok [INFO] [stdout] test cli::tests::switch::skip_conflicts_skips_existing_repo_file ... ok [INFO] [stdout] test cli::tests::status::shows_status_when_overlay_applied ... ok [INFO] [stdout] test cli::tests::sync::handle_sync_all_skips_all_non_syncable_mixed ... ok [INFO] [stdout] test cli::tests::status::shows_status_for_specific_overlay ... ok [INFO] [stdout] test cli::tests::remove::removes_one_overlay_preserves_others ... ok [INFO] [stdout] test cli::tests::switch::removes_existing_overlays_before_applying ... ok [INFO] [stdout] test cli::tests::sync::handle_sync_all_identifies_overlay_repo_sources ... ok [INFO] [stdout] test cli::tests::sync::try_upgrade_github_source_happy_path_with_configured_source ... ok [INFO] [stdout] test cli::tests::sync::try_upgrade_github_source_empty_subpath_parts_no_upgrade ... ok [INFO] [stdout] test cli::tests::sync::try_upgrade_github_source_invalid_subpath_no_upgrade ... ok [INFO] [stdout] test cli::tests::sync::handle_sync_all_skips_library_sources ... ok [INFO] [stdout] test cli::tests::sync::try_upgrade_github_source_four_part_subpath_no_upgrade ... ok [INFO] [stdout] test cli::tests::sync::try_upgrade_github_source_no_matching_configured_source ... ok [INFO] [stdout] test cli::tests::sync::handle_sync_all_with_no_overlays ... ok [INFO] [stdout] test config::tests::test_bare_owner_to_url_uses_custom_repo_name ... ok [INFO] [stdout] test config::tests::test_config_dir ... ok [INFO] [stdout] test config::tests::test_config_dir_with_xdg_value ... ok [INFO] [stdout] test cli::tests::sync::handle_sync_all_skips_local_sources ... ok [INFO] [stdout] test config::tests::test_config_dir_without_xdg_uses_home ... ok [INFO] [stdout] test config::tests::test_config_merge_repo_sources_come_first ... ok [INFO] [stdout] test cli::tests::sync::handle_sync_requires_name_or_all ... ok [INFO] [stdout] test config::tests::test_default_overlay_repo_name_with_env_falls_back_to_constant ... ok [INFO] [stdout] test cli::tests::sync::sync_single_overlay_copies_multiple_files ... ok [INFO] [stdout] test cli::tests::sync::handle_sync_all_with_mixed_sources_identifies_correctly ... ok [INFO] [stdout] test cli::tests::sync::sync_single_overlay_copies_files_back ... ok [INFO] [stdout] test cli::tests::switch::force_overwrites_existing_repo_file ... ok [INFO] [stdout] test cli::tests::sync::try_upgrade_github_source_without_subpath_no_upgrade ... ok [INFO] [stdout] test cli::tests::sync::try_upgrade_github_source_single_part_subpath_no_upgrade ... ok [INFO] [stdout] test config::tests::test_default_overlay_repo_name_with_env_uses_value ... ok [INFO] [stdout] test config::tests::test_get_default_overlay_repo_config_from_sources ... ok [INFO] [stdout] test config::tests::test_deserialize_source_with_github_shorthand ... ok [INFO] [stdout] test config::tests::test_deserialize_source_with_bare_owner_expands ... ok [INFO] [stdout] test config::tests::test_default_repoverlay_config ... ok [INFO] [stdout] test config::tests::test_load_config_uses_global_when_no_repo ... ok [INFO] [stdout] test config::tests::test_load_global_config_missing ... ok [INFO] [stdout] test config::tests::test_get_default_overlay_repo_config_no_sources ... ok [INFO] [stdout] test config::tests::test_empty_config_file ... ok [INFO] [stdout] test config::tests::test_get_overlay_repo_config_by_name_found ... ok [INFO] [stdout] test config::tests::test_load_repo_config_ignores_unknown_keys ... ok [INFO] [stdout] test config::tests::test_get_overlay_repo_config_by_name_not_found ... ok [INFO] [stdout] test config::tests::test_global_config_path ... ok [INFO] [stdout] test config::tests::test_get_overlay_repo_config_by_name_none_falls_back_to_default ... ok [INFO] [stdout] test config::tests::test_load_config_none_returns_global_only ... ok [INFO] [stdout] test config::tests::test_load_repo_config_no_file_returns_none ... ok [INFO] [stdout] test config::tests::test_load_repo_config_with_url_source ... ok [INFO] [stdout] test config::tests::test_mixed_sources_ccl_roundtrip ... ok [INFO] [stdout] test config::tests::test_load_repo_config_valid ... ok [INFO] [stdout] test config::tests::test_parse_sources_missing_name ... ok [INFO] [stdout] test config::tests::test_parse_repo_config_with_path_source ... ok [INFO] [stdout] test config::tests::test_repo_config_path ... ok [INFO] [stdout] test config::tests::test_parse_sources_multiple ... ok [INFO] [stdout] test config::tests::test_source_equality ... ok [INFO] [stdout] test config::tests::test_load_config_merges_repo_before_global ... ok [INFO] [stdout] test config::tests::test_parse_sources_single ... ok [INFO] [stdout] test config::tests::test_load_repo_config_missing ... ok [INFO] [stdout] test config::tests::snapshot_source_url_input_display ... ok [INFO] [stdout] test config::tests::test_parse_sources_empty ... ok [INFO] [stdout] test config::tests::test_source_url_input_absolute_path_is_local ... ok [INFO] [stdout] test config::tests::test_parse_sources_missing_url_and_path ... ok [INFO] [stdout] test config::tests::test_source_url_input_bare_owner ... ok [INFO] [stdout] test config::tests::test_source_url_input_bare_owner_not_local ... ok [INFO] [stdout] test config::tests::test_source_url_input_dot_dot_is_local ... ok [INFO] [stdout] test config::tests::test_source_url_input_dot_slash_is_local ... ok [INFO] [stdout] test config::tests::test_source_url_input_empty_rejected ... ok [INFO] [stdout] test config::tests::test_source_url_input_display ... ok [INFO] [stdout] test config::tests::test_save_repo_config_roundtrip ... ok [INFO] [stdout] test cli::tests::sync::try_upgrade_github_source_non_github_source_no_upgrade ... ok [INFO] [stdout] test cli::tests::switch::removes_multiple_overlays_before_applying ... ok [INFO] [stdout] test config::tests::test_source_url_input_file_url_display ... ok [INFO] [stdout] test config::tests::test_source_url_input_file_url_empty_path_rejected ... ok [INFO] [stdout] test config::tests::test_source_url_input_file_url_not_git_url ... ok [INFO] [stdout] test config::tests::test_source_url_input_file_url_is_file_url ... ok [INFO] [stdout] test config::tests::test_source_url_input_file_url_two_slashes ... ok [INFO] [stdout] test config::tests::test_source_url_input_file_url_preserves_original ... ok [INFO] [stdout] test config::tests::test_source_url_input_local_path_absolute ... ok [INFO] [stdout] test config::tests::test_source_url_input_local_path_parent ... ok [INFO] [stdout] test config::tests::test_source_url_input_local_path_relative ... ok [INFO] [stdout] test config::tests::test_source_url_input_ssh_url ... ok [INFO] [stdout] test config::tests::test_save_repo_config_creates_directory ... ok [INFO] [stdout] test config::tests::test_source_url_input_local_path_tilde ... ok [INFO] [stdout] test config::tests::test_source_url_input_git_url ... ok [INFO] [stdout] test config::tests::test_source_url_input_tilde_is_local ... ok [INFO] [stdout] test config::tests::test_source_url_input_owner_repo_not_local ... ok [INFO] [stdout] test config::tests::test_source_url_input_owner_repo_still_github_shorthand ... ok [INFO] [stdout] test config::tests::test_source_url_input_whitespace_rejected ... ok [INFO] [stdout] test config::tests::test_source_validate_both_set_err ... ok [INFO] [stdout] test config::tests::test_source_validate_path_only_ok ... ok [INFO] [stdout] test config::tests::test_source_validate_neither_set_err ... ok [INFO] [stdout] test config::tests::test_source_validate_url_only_ok ... ok [INFO] [stdout] test config::tests::test_validate_source_url_bare_owner_expanded ... ok [INFO] [stdout] test config::tests::test_validate_source_url_bare_owner_with_whitespace_rejected ... ok [INFO] [stdout] test config::tests::test_validate_source_url_github_shorthand ... ok [INFO] [stdout] test config::tests::test_source_with_path_ccl_roundtrip ... ok [INFO] [stdout] test config::tests::test_validate_source_url_empty_rejected ... ok [INFO] [stdout] test config::tests::test_validate_source_url_git_protocol ... ok [INFO] [stdout] test config::tests::test_validate_source_url_full_ssh ... ok [INFO] [stdout] test config::tests::test_validate_source_url_full_https ... ok [INFO] [stdout] test config::tests::test_validate_source_url_whitespace_rejected ... ok [INFO] [stdout] test config::tests::test_validate_source_url_whitespace_only_rejected ... ok [INFO] [stdout] test config::tests::test_sources_roundtrip ... ok [INFO] [stdout] test config::tests::test_validate_source_url_bare_owner_with_hyphens ... ok [INFO] [stdout] test config::tests::test_source_url_input_github_shorthand ... ok [INFO] [stdout] test config::tests::test_whitespace_only_config_file ... ok [INFO] [stdout] test config::tests::test_save_repo_config_with_path_source_roundtrip ... ok [INFO] [stdout] test create::tests::copy_files_to_overlay_additional_tests::preserves_file_content ... ok [INFO] [stdout] test create::tests::copy_files_to_overlay_additional_tests::copies_multiple_files ... ok [INFO] [stdout] test create::tests::generate_overlay_config_additional_tests::handles_empty_name ... ok [INFO] [stdout] test create::tests::generate_overlay_config_additional_tests::handles_special_characters_in_name ... ok [INFO] [stdout] test create::tests::generate_overlay_config_additional_tests::includes_comment_header ... ok [INFO] [stdout] test create::tests::expand_include_globs_tests::mixed_literal_and_glob ... ok [INFO] [stdout] test create::tests::copy_files_to_overlay_additional_tests::creates_output_dir_if_missing ... ok [INFO] [stdout] test create::tests::copy_files_to_overlay_tests::copies_directory_recursively ... ok [INFO] [stdout] test create::tests::expand_include_globs_tests::glob_no_match_errors ... ok [INFO] [stdout] test create::tests::generate_overlay_config_tests::generates_valid_ccl ... ok [INFO] [stdout] test create::tests::generate_overlay_config_tests::includes_commented_mappings ... ok [INFO] [stdout] test create::tests::generate_overlay_config_additional_tests::includes_mappings_example ... ok [INFO] [stdout] test create::tests::copy_files_to_overlay_tests::creates_parent_directories ... ok [INFO] [stdout] test create::tests::copy_files_to_overlay_tests::copies_single_file ... ok [INFO] [stdout] test create::tests::generate_overlay_config_tests::includes_overlay_name ... ok [INFO] [stdout] test detection::tests::test_ai_config_directory_category_equality ... ok [INFO] [stdout] test create::tests::expand_include_globs_tests::glob_double_star_matches_nested ... ok [INFO] [stdout] test create::tests::expand_include_globs_tests::literal_path_missing_errors ... ok [INFO] [stdout] test cli::tests::sync::sync_single_overlay_fails_if_overlay_not_in_repo ... ok [INFO] [stdout] test create::tests::expand_include_globs_tests::glob_star_matches_files ... ok [INFO] [stdout] test cli::tests::sync::sync_single_overlay_creates_parent_directories ... ok [INFO] [stdout] test detection::tests::test_detect_directory_children_deeply_nested ... ok [INFO] [stdout] test cli::tests::sync::sync_single_overlay_skips_missing_target_files ... ok [INFO] [stdout] test detection::tests::test_detect_ai_configs ... ok [INFO] [stdout] test detection::tests::test_detect_ai_config_directories_empty_repo ... ok [INFO] [stdout] test detection::tests::test_detect_ai_config_directories ... ok [INFO] [stdout] test detection::tests::test_detect_untracked_excludes_ai_configs ... ok [INFO] [stdout] test detection::tests::test_detect_untracked_files ... ok [INFO] [stdout] test create::tests::restore_overlays_tests::reapplying_overlay_clears_removed_marker ... ok [INFO] [stdout] test detection::tests::test_detected_file_clone ... ok [INFO] [stdout] test create::tests::expand_include_globs_tests::literal_path_passes_through ... ok [INFO] [stdout] test detection::tests::test_file_category_equality ... ok [INFO] [stdout] test detection::tests::test_group_by_category ... ok [INFO] [stdout] test detection::tests::test_group_by_category_empty ... ok [INFO] [stdout] test detection::tests::test_group_by_category_single_category ... ok [INFO] [stdout] test detection::tests::test_group_by_category_with_directories ... ok [INFO] [stdout] test detection::tests::test_is_ai_config_aider ... ok [INFO] [stdout] test detection::tests::test_is_ai_config_cody ... ok [INFO] [stdout] test detection::tests::test_is_ai_config_continue ... ok [INFO] [stdout] test detection::tests::test_is_ai_config_exact_match ... ok [INFO] [stdout] test detection::tests::test_is_ai_config_generic ... ok [INFO] [stdout] test detection::tests::test_is_ai_config_github_copilot ... ok [INFO] [stdout] test detection::tests::test_is_ai_config_non_match ... ok [INFO] [stdout] test detection::tests::test_is_ai_config_subdirectory ... ok [INFO] [stdout] test detection::tests::test_is_ai_config_windsurf ... ok [INFO] [stdout] test detection::tests::test_is_tracked_config_excludes_source_by_extension ... ok [INFO] [stdout] test detection::tests::test_is_tracked_config_excludes_source_code ... ok [INFO] [stdout] test detection::tests::test_is_tracked_config_excludes_specific_files ... ok [INFO] [stdout] test detection::tests::test_is_tracked_config_includes_dotfile_directories ... ok [INFO] [stdout] test detection::tests::test_is_tracked_config_includes_dotfiles ... ok [INFO] [stdout] test detection::tests::test_is_tracked_config_includes_root_config_files ... ok [INFO] [stdout] test fuzzy::tests::empty_candidates_returns_empty ... ok [INFO] [stdout] test fuzzy::tests::empty_query_still_works ... ok [INFO] [stdout] test fuzzy::tests::find_exact_match ... ok [INFO] [stdout] test fuzzy::tests::find_partial_match ... ok [INFO] [stdout] test fuzzy::tests::find_typo_match ... ok [INFO] [stdout] test fuzzy::tests::matches_sorted_by_score_descending ... ok [INFO] [stdout] test fuzzy::tests::max_results_zero_returns_empty ... ok [INFO] [stdout] test fuzzy::tests::no_match_returns_empty ... ok [INFO] [stdout] test fuzzy::tests::overlay_matcher_default ... ok [INFO] [stdout] test fuzzy::tests::respects_max_results ... ok [INFO] [stdout] test fuzzy::tests::scored_match_clone_and_eq ... ok [INFO] [stdout] test fuzzy::tests::scored_match_debug ... ok [INFO] [stdout] test fuzzy::tests::scored_match_fields ... ok [INFO] [stdout] test fuzzy::tests::suggest_formats_correctly ... ok [INFO] [stdout] test fuzzy::tests::suggest_returns_values_only ... ok [INFO] [stdout] test git_exclude::tests::any_overlay_sections_remain_tests::ignores_partial_markers ... ok [INFO] [stdout] test detection::tests::test_detect_untracked_files_non_git_directory ... ok [INFO] [stdout] test detection::tests::test_detect_gitignored_excludes_ai_configs ... ok [INFO] [stdout] test detection::tests::test_detect_gitignored_files_non_git_directory ... ok [INFO] [stdout] test cli::tests::sync::sync_single_overlay_dry_run_does_not_modify ... ok [INFO] [stdout] test detection::tests::test_detect_ai_configs_empty_repo ... ok [INFO] [stdout] test detection::tests::test_detect_tracked_config_files ... ok [INFO] [stdout] test detection::tests::test_detect_directory_children_includes_subdirectories ... ok [INFO] [stdout] test create::tests::restore_overlays_tests::does_not_restore_explicitly_removed_overlay ... ok [INFO] [stdout] test detection::tests::test_detect_tracked_config_excludes_ai_configs ... ok [INFO] [stdout] test git_exclude::tests::any_overlay_sections_remain_tests::returns_false_for_empty_content ... ok [INFO] [stdout] test git_exclude::tests::any_overlay_sections_remain_tests::returns_false_for_no_sections ... ok [INFO] [stdout] test git_exclude::tests::any_overlay_sections_remain_tests::returns_false_for_only_managed_section ... ok [INFO] [stdout] test git_exclude::tests::any_overlay_sections_remain_tests::returns_true_for_multiple_overlay_sections ... ok [INFO] [stdout] test git_exclude::tests::any_overlay_sections_remain_tests::returns_true_for_overlay_plus_managed_section ... ok [INFO] [stdout] test git_exclude::tests::any_overlay_sections_remain_tests::returns_true_for_overlay_section ... ok [INFO] [stdout] test git_exclude::tests::line_ending_edge_cases::remove_overlay_section_preserves_trailing_newline ... ok [INFO] [stdout] test detection::tests::test_detect_ai_config_directories_skips_files ... ok [INFO] [stdout] test git_exclude::tests::line_ending_edge_cases::remove_overlay_section_with_mixed_line_endings ... ok [INFO] [stdout] test git_exclude::tests::line_ending_edge_cases::remove_overlay_section_with_only_crlf ... ok [INFO] [stdout] test git_exclude::tests::line_ending_edge_cases::remove_overlay_section_with_no_trailing_newline ... ok [INFO] [stdout] test git_exclude::tests::malformed_section_tests::any_overlay_sections_remain_with_extra_spaces ... ok [INFO] [stdout] test git_exclude::tests::malformed_section_tests::any_overlay_sections_remain_with_malformed_marker ... ok [INFO] [stdout] test git_exclude::tests::malformed_section_tests::remove_overlay_section_cleans_many_trailing_newlines ... ok [INFO] [stdout] test git_exclude::tests::malformed_section_tests::remove_overlay_section_cleans_multiple_trailing_newlines ... ok [INFO] [stdout] test git_exclude::tests::malformed_section_tests::remove_overlay_section_with_duplicate_start_markers ... ok [INFO] [stdout] test git_exclude::tests::malformed_section_tests::remove_overlay_section_with_nested_markers ... ok [INFO] [stdout] test git_exclude::tests::malformed_section_tests::remove_overlay_section_with_unclosed_section ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::fails_on_empty_repo ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::fails_on_malformed_url ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::fails_on_non_github_url ... ok [INFO] [stdout] test detection::tests::test_discover_files_finds_committed_config ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::handles_url_with_extra_path ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::parses_http_url ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::parses_https_url ... ok [INFO] [stdout] test detection::tests::test_discover_files_deduplicates ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::parses_https_url_with_git_suffix ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::parses_ssh_url ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::parses_ssh_url_with_git_suffix ... ok [INFO] [stdout] test git_exclude::tests::parse_github_owner_repo_tests::fails_on_empty_owner ... ok [INFO] [stdout] test git_exclude::tests::remove_overlay_section_additional_tests::handles_empty_section ... ok [INFO] [stdout] test git_exclude::tests::remove_overlay_section_additional_tests::handles_whitespace_around_markers ... ok [INFO] [stdout] test git_exclude::tests::remove_overlay_section_additional_tests::removes_only_specified_overlay ... ok [INFO] [stdout] test git_exclude::tests::remove_overlay_section_additional_tests::handles_similar_named_overlays ... ok [INFO] [stdout] test git_exclude::tests::remove_overlay_section_additional_tests::handles_windows_line_endings ... ok [INFO] [stdout] test git_exclude::tests::remove_overlay_section_additional_tests::preserves_content_before_and_after ... ok [INFO] [stdout] test github::tests::test_cache_key ... ok [INFO] [stdout] test github::tests::snapshot_git_ref_display ... ok [INFO] [stdout] test github::tests::test_cache_key_tag ... ok [INFO] [stdout] test github::tests::test_clone_url ... ok [INFO] [stdout] test detection::tests::test_detect_gitignored_files ... ok [INFO] [stdout] test github::tests::test_display_url ... ok [INFO] [stdout] test github::tests::test_git_ref_allows_hyphen_not_at_start ... ok [INFO] [stdout] test github::tests::test_git_ref_as_str ... ok [INFO] [stdout] test github::tests::test_git_ref_display ... ok [INFO] [stdout] test github::tests::test_display_url_default_with_subpath ... ok [INFO] [stdout] test git_exclude::tests::update_git_exclude_tests::appends_to_existing_exclude_file ... ok [INFO] [stdout] test github::tests::test_git_ref_from_str_commit ... ok [INFO] [stdout] test github::tests::test_git_ref_from_str_not_commit_non_hex ... ok [INFO] [stdout] test github::tests::test_git_ref_from_str_not_commit_wrong_length ... ok [INFO] [stdout] test github::tests::test_git_ref_is_default ... ok [INFO] [stdout] test github::tests::test_git_ref_parse_almost_commit_sha ... ok [INFO] [stdout] test github::tests::test_git_ref_display_short_commit ... ok [INFO] [stdout] test github::tests::test_is_github_url_case_insensitivity ... ok [INFO] [stdout] test github::tests::test_is_github_url_with_trailing_slash ... ok [INFO] [stdout] test github::tests::test_git_ref_from_str_branch ... ok [INFO] [stdout] test github::tests::test_git_ref_rejects_flag_injection ... ok [INFO] [stdout] test github::tests::test_parse_github_url_with_hyphens_and_underscores ... ok [INFO] [stdout] test github::tests::test_parse_github_url_with_dots_in_repo_name ... ok [INFO] [stdout] test github::tests::test_is_github_url ... ok [INFO] [stdout] test github::tests::test_parse_remote_url_https ... ok [INFO] [stdout] test github::tests::test_parse_remote_url_https_invalid_format ... ok [INFO] [stdout] test github::tests::test_parse_github_url_with_ref_containing_slashes ... ok [INFO] [stdout] test detection::tests::test_discover_files_combines_all ... ok [INFO] [stdout] test github::tests::test_parse_github_url_with_numbers ... ok [INFO] [stdout] test github::tests::test_parse_remote_url_non_github ... ok [INFO] [stdout] test github::tests::test_parse_basic_url ... ok [INFO] [stdout] test github::tests::test_parse_remote_url_ssh_invalid_format ... ok [INFO] [stdout] test github::tests::test_parse_remote_url_ssh_no_suffix ... ok [INFO] [stdout] test github::tests::test_parse_unknown_path_component ... ok [INFO] [stdout] test github::tests::test_parse_remote_url_with_extra_path_segments ... ok [INFO] [stdout] test github::tests::test_parse_url_rejects_flag_ref ... ok [INFO] [stdout] test github::tests::test_parse_remote_url_with_trailing_whitespace ... ok [INFO] [stdout] test github::tests::test_parse_url_with_branch_and_subpath ... ok [INFO] [stdout] test github::tests::test_parse_url_with_commit ... ok [INFO] [stdout] test github::tests::test_parse_remote_url_with_trailing_slash ... ok [INFO] [stdout] test github::tests::test_parse_url_with_branch ... ok [INFO] [stdout] test github::tests::test_parse_remote_url_ssh ... ok [INFO] [stdout] test create::tests::restore_overlays_tests::restores_overlay_after_git_clean ... ok [INFO] [stdout] test github::tests::test_parse_url_with_git_suffix ... ok [INFO] [stdout] test github::tests::test_parse_url_with_subpath_deep ... ok [INFO] [stdout] test github::tests::test_reject_blob_url ... ok [INFO] [stdout] test github::tests::test_parse_url_with_tag ... ok [INFO] [stdout] test git_exclude::tests::line_ending_edge_cases::update_git_exclude_with_existing_crlf_content ... ok [INFO] [stdout] test github::tests::test_reject_missing_repo ... ok [INFO] [stdout] test github::tests::test_reject_non_github_url ... ok [INFO] [stdout] test github::tests::test_sanitize_for_path ... ok [INFO] [stdout] test github::tests::test_with_ref_override_commit ... ok [INFO] [stdout] test github::tests::test_reject_invalid_url ... ok [INFO] [stdout] test github::tests::test_with_ref_override ... ok [INFO] [stdout] test git_exclude::tests::update_git_exclude_tests::adds_managed_section_with_first_overlay ... ok [INFO] [stdout] test git_exclude::tests::update_git_exclude_tests::creates_exclude_file_if_missing ... ok [INFO] [stdout] test git_exclude::tests::update_git_exclude_tests::removes_section_when_add_is_false ... ok [INFO] [stdout] test git_exclude::tests::update_git_exclude_multiple_tests::handles_multiple_entries_per_overlay ... ok [INFO] [stdout] test json_merge::tests::merge_array_to_object_type_mismatch ... ok [INFO] [stdout] test github::tests::test_with_ref_override_rejects_flag ... ok [INFO] [stdout] test json_merge::tests::merge_arrays_overlay_replaces ... ok [INFO] [stdout] test json_merge::tests::is_json_file_detects_extension ... ok [INFO] [stdout] test github::tests::test_with_ref_override_none ... ok [INFO] [stdout] test git_exclude::tests::update_git_exclude_multiple_tests::updates_existing_overlay_section ... ok [INFO] [stdout] test json_merge::tests::merge_bool_to_string_type_mismatch ... ok [INFO] [stdout] test json_merge::tests::merge_disjoint_objects ... ok [INFO] [stdout] test json_merge::tests::merge_deeply_nested_type_mismatch_has_full_path ... ok [INFO] [stdout] test json_merge::tests::merge_empty_base_takes_overlay ... ok [INFO] [stdout] test json_merge::tests::merge_empty_overlay_preserves_base ... ok [INFO] [stdout] test json_merge::tests::merge_nested_objects_recursively ... ok [INFO] [stdout] test json_merge::tests::merge_null_values ... ok [INFO] [stdout] test json_merge::tests::merge_overlapping_scalars_overlay_wins ... ok [INFO] [stdout] test json_merge::tests::merge_root_level_type_mismatch_uses_root_path ... ok [INFO] [stdout] test json_merge::tests::merge_type_mismatch_overlay_wins_and_logs ... ok [INFO] [stdout] test library::tests::default_library_path ... ok [INFO] [stdout] test library::tests::list_overlays_finds_directories ... ok [INFO] [stdout] test library::tests::custom_library_path ... ok [INFO] [stdout] test library::tests::export_nonexistent_overlay_errors ... ok [INFO] [stdout] test library::tests::export_from_library_works ... ok [INFO] [stdout] test library::tests::import_overlay_to_library ... ok [INFO] [stdout] test library::tests::import_overlay_name_conflict_errors ... ok [INFO] [stdout] test library::tests::parent_dir_escape_rejected ... ok [INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name [INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all [INFO] [stderr] hint: of your new repositories, which will suppress this warning, call: [INFO] [stderr] hint: [INFO] [stderr] hint: git config --global init.defaultBranch [INFO] [stderr] hint: [INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and [INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command: [INFO] [stderr] hint: [INFO] [stderr] hint: git branch -m [INFO] [stdout] test library::tests::remove_nonexistent_overlay_errors ... ok [INFO] [stdout] test overlay_name::tests::overlay_name_as_ref_str ... ok [INFO] [stdout] test git_exclude::tests::update_git_exclude_multiple_tests::handles_multiple_overlays ... ok [INFO] [stdout] test overlay_name::tests::overlay_name_as_str ... ok [INFO] [stdout] test overlay_name::tests::overlay_name_display ... ok [INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name [INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all [INFO] [stderr] hint: of your new repositories, which will suppress this warning, call: [INFO] [stderr] hint: [INFO] [stderr] hint: git config --global init.defaultBranch [INFO] [stderr] hint: [INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and [INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command: [INFO] [stderr] hint: [INFO] [stderr] hint: git branch -m [INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name [INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all [INFO] [stderr] hint: of your new repositories, which will suppress this warning, call: [INFO] [stderr] hint: [INFO] [stderr] hint: git config --global init.defaultBranch [INFO] [stderr] hint: [INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and [INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command: [INFO] [stderr] hint: [INFO] [stderr] hint: git branch -m [INFO] [stdout] test overlay_name::tests::overlay_name_eq_str ... ok [INFO] [stdout] test overlay_name::tests::overlay_name_ordering ... ok [INFO] [stdout] test overlay_name::tests::try_new_accepts_valid_name ... ok [INFO] [stdout] test overlay_name::tests::try_new_rejects_backslash ... ok [INFO] [stdout] Initialized empty Git repository in /tmp/.tmplbzHj7/.git/ [INFO] [stdout] test overlay_name::tests::try_new_rejects_forward_slash ... ok [INFO] [stdout] test overlay_repo::tests::available_overlay_display ... ok [INFO] [stdout] test overlay_name::tests::overlay_name_equality ... ok [INFO] [stdout] test overlay_repo::tests::available_overlay_display_bold_contains_name ... ok [INFO] [stdout] test overlay_repo::tests::test_available_overlay_clone ... ok [INFO] [stdout] test overlay_repo::tests::snapshot_available_overlay_display ... ok [INFO] [stdout] test library::tests::list_overlays_nonexistent_dir_returns_empty ... ok [INFO] [stdout] test overlay_repo::tests::test_copy_dir_recursive_allows_internal_symlinks ... ok [INFO] [stdout] Initialized empty Git repository in /tmp/.tmpAtkPAj/.git/ [INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name [INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all [INFO] [stderr] hint: of your new repositories, which will suppress this warning, call: [INFO] [stderr] hint: [INFO] [stderr] hint: git config --global init.defaultBranch [INFO] [stderr] hint: [INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and [INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command: [INFO] [stderr] hint: [INFO] [stderr] hint: git branch -m [INFO] [stdout] test git_exclude::tests::update_git_exclude_tests::removes_managed_section_when_last_overlay_removed ... ok [INFO] [stdout] test library::tests::list_overlays_empty_library ... ok [INFO] [stdout] test overlay_repo::tests::test_copy_dir_recursive_basic ... ok [INFO] [stdout] test library::tests::import_overlay_force_overwrites ... ok [INFO] [stdout] test overlay_repo::tests::test_copy_dir_recursive_fails_on_non_directory ... ok [INFO] [stdout] test library::tests::no_warning_when_library_not_gitignored ... ok [INFO] [stdout] test library::tests::absolute_library_path_rejected ... ok [INFO] [stdout] test overlay_repo::tests::test_copy_dir_recursive_nested ... ok [INFO] [stdout] Initialized empty Git repository in /tmp/.tmpOuvxfc/.git/ [INFO] [stdout] test overlay_repo::tests::test_default_overlay_repo_path ... ok [INFO] [stdout] test git_exclude::tests::update_git_exclude_multiple_tests::keeps_managed_section_when_one_overlay_remains ... ok [INFO] [stdout] test overlay_repo::tests::test_ensure_cloned_when_already_cloned ... ok [INFO] [stdout] test overlay_repo::tests::test_copy_dir_recursive_rejects_symlink_escape ... ok [INFO] [stdout] test overlay_repo::tests::test_copy_dir_recursive_skips_dangling_symlinks ... ok [INFO] [stdout] test library::tests::remove_from_library_works ... ok [INFO] [stdout] test git_exclude::tests::update_git_exclude_tests::writes_to_correct_location_in_worktree ... ok [INFO] [stdout] test library::tests::ensure_not_gitignored_noop_when_not_ignored ... ok [INFO] [stdout] test overlay_repo::tests::test_get_overlay_path_nonexistent ... ok [INFO] [stdout] test overlay_repo::tests::test_get_overlay_path_exists ... ok [INFO] [stdout] test overlay_repo::tests::test_get_overlay_path_with_fallback_direct_match ... ok [INFO] [stdout] test overlay_repo::tests::test_copy_dir_recursive_skips_git_dir ... ok [INFO] [stdout] test overlay_repo::tests::test_get_overlay_path_with_fallback_uses_upstream ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_empty_repo ... ok [INFO] [stdout] test overlay_repo::tests::test_get_overlay_path_rejects_traversal ... ok [INFO] [stdout] Initialized empty Git repository in /tmp/.tmpBZvH4E/.git/ [INFO] [stdout] Initialized empty Git repository in /tmp/.tmpwUyXX5/.git/ [INFO] [stdout] test overlay_repo::tests::test_get_overlay_path_with_fallback_no_upstream_fails ... ok [INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name [INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all [INFO] [stderr] hint: of your new repositories, which will suppress this warning, call: [INFO] [stderr] hint: [INFO] [stderr] hint: git config --global init.defaultBranch [INFO] [stderr] hint: [INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and [INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command: [INFO] [stderr] hint: [INFO] [stderr] hint: git branch -m [INFO] [stdout] test overlay_repo::tests::test_get_current_commit_on_non_git_directory ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_for_repo_multiple_overlays ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_not_cloned ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_for_repo_no_matches ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_for_repo_case_insensitive ... ok [INFO] [stdout] test overlay_repo::tests::test_overlay_repo_manager_needs_clone_no_git_dir ... ok [INFO] [stdout] test overlay_repo::tests::test_overlay_repo_manager_does_not_need_clone_with_git_dir ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_skips_hidden_and_files ... ok [INFO] [stdout] test library::tests::ensure_not_gitignored_idempotent ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_for_repo_filters_correctly ... ok [INFO] [stdout] test library::tests::warns_when_library_path_gitignored ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_skips_hidden_dirs ... ok [INFO] [stdout] test overlay_repo::tests::test_overlay_repo_manager_path_getter ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_with_overlays ... ok [INFO] [stdout] test overlay_repo::tests::test_overlay_repo_manager_needs_clone_no_path ... ok [INFO] [stdout] test overlay_repo::tests::test_list_overlays_skips_files ... ok [INFO] [stdout] test overlay_repo::tests::test_pull_not_cloned ... ok [INFO] [stdout] test overlay_repo::tests::test_parse_overlay_reference_wrong_parts ... ok [INFO] [stdout] test overlay_repo::tests::test_parse_overlay_reference_empty_parts ... ok [INFO] [stdout] test overlay_repo::tests::test_overlay_repo_meta_roundtrip ... ok [INFO] [stdout] test overlay_repo::tests::test_parse_overlay_reference_invalid_path ... ok [INFO] [stdout] test overlay_repo::tests::test_parse_overlay_reference_invalid_url ... ok [INFO] [stdout] test overlay_repo::tests::test_validate_clone_url_allows_https ... ok [INFO] [stdout] test overlay_repo::tests::test_validate_clone_url_allows_ssh ... ok [INFO] [stdout] test library::tests::ensure_not_gitignored_adds_negation ... ok [INFO] [stdout] test overlay_repo::tests::test_parse_overlay_reference_valid ... ok [INFO] [stdout] test reference::tests::parse_empty_input ... ok [INFO] [stdout] test reference::tests::parse_explicit_local_path_absolute ... ok [INFO] [stdout] test reference::tests::parse_bare_tilde ... ok [INFO] [stdout] test reference::tests::parse_explicit_local_path_dot_slash ... ok [INFO] [stdout] test reference::tests::parse_four_parts_invalid ... ok [INFO] [stdout] test reference::tests::parse_github_url ... ok [INFO] [stdout] test overlay_repo::tests::test_validate_path_component_allows_valid ... ok [INFO] [stdout] test reference::tests::parse_github_url_case_insensitive ... ok [INFO] [stdout] test reference::tests::needs_local_path_warning_returns_false_for_explicit_paths ... ok [INFO] [stdout] test reference::tests::needs_local_path_warning_returns_false_for_non_local_path ... ok [INFO] [stdout] test reference::tests::parse_tilde_with_path ... ok [INFO] [stdout] test reference::tests::parse_http_github_url ... ok [INFO] [stdout] test reference::tests::parse_three_part_empty_parts_invalid ... ok [INFO] [stdout] test reference::tests::parse_three_part_reference ... ok [INFO] [stdout] test overlay_repo::tests::test_validate_clone_url_rejects_file_scheme ... ok [INFO] [stdout] test overlay_repo::tests::test_validate_clone_url_rejects_flag ... ok [INFO] [stdout] test reference::tests::parse_two_part_reference ... ok [INFO] [stdout] test overlay_repo::tests::test_validate_path_component_rejects_traversal ... ok [INFO] [stdout] test reference::tests::parse_github_url_with_tree ... ok [INFO] [stdout] test reference::tests::parse_with_whitespace ... ok [INFO] [stdout] test reference::tests::parse_one_part_nonexistent ... ok [INFO] [stdout] test reference::tests::parse_two_part_empty_parts_invalid ... ok [INFO] [stdout] test reference::tests::parse_url_like_not_github ... ok [INFO] [stdout] test reference::tests::source_reference_clone_and_eq ... ok [INFO] [stdout] test reference::tests::source_reference_debug ... ok [INFO] [stdout] test reference::tests::needs_local_path_warning_returns_true_for_ambiguous_paths ... ok [INFO] [stdout] test overlay_repo::tests::test_stage_overlay_with_nonexistent_source ... ok [INFO] [stdout] test remove::tests::cleanup_state_dir_tests::removes_empty_state_dir ... ok [INFO] [stdout] test remove::tests::cleanup_state_dir_tests::idempotent_when_already_clean ... ok [INFO] [stdout] test overlay_repo::tests::test_copy_dir_recursive_depth_limit ... ok [INFO] [stdout] test remove::tests::cleanup_state_dir_tests::preserves_config_file ... ok [INFO] [stdout] test remove::tests::remove_overlay_tests::remove_no_overlays_applied_fails ... ok [INFO] [stdout] test remove::tests::cleanup_state_dir_tests::preserves_library_directory ... ok [INFO] [stdout] test remove::tests::remove_overlay_tests::dry_run_does_not_remove ... ok [INFO] [stdout] test remove::tests::remove_overlay_tests::remove_no_name_no_all_fails ... ok [INFO] [stdout] test remove::tests::remove_overlay_tests::remove_last_overlay_cleans_state_dir ... ok [INFO] [stdout] test remove::tests::remove_single_overlay_tests::nonexistent_overlay_returns_error ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::list_overlays_from_cached_repo_finds_overlays_at_correct_path ... ok [INFO] [stdout] test remove::tests::remove_single_overlay_tests::removes_applied_overlay_files ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::list_overlays_from_cached_repo_nonexistent ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::list_overlays_from_cached_repo_path_matches_cache_manager ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::list_overlays_from_path_incomplete_nesting ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::list_overlays_from_path_empty_directory ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::list_overlays_from_path_skips_files ... ok [INFO] [stdout] test resolve::tests::canonicalize_path_tests::fails_on_nonexistent_path ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::list_overlays_from_path_with_nested_structure ... ok [INFO] [stdout] test resolve::tests::format_not_found_error_tests::basic_error_message ... ok [INFO] [stdout] test resolve::tests::canonicalize_path_tests::succeeds_on_existing_path ... ok [INFO] [stdout] test resolve::tests::format_not_found_error_tests::empty_suggestions_no_did_you_mean ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::get_cached_repo_commit_empty_git_repo ... ok [INFO] [stdout] test resolve::tests::format_not_found_error_tests::special_characters_in_names ... ok [INFO] [stdout] test resolve::tests::format_not_found_error_tests::with_both_suggestions_and_source_list ... ok [INFO] [stdout] test resolve::tests::format_not_found_error_tests::with_source_list ... ok [INFO] [stdout] test resolve::tests::format_not_found_error_tests::with_suggestions ... ok [INFO] [stdout] test resolve::tests::fuzzy_helper_tests::format_not_found_error_without_suggestions ... ok [INFO] [stdout] test resolve::tests::fuzzy_helper_tests::format_not_found_error_with_source_list ... ok [INFO] [stdout] test resolve::tests::fuzzy_helper_tests::format_not_found_error_with_suggestions ... ok [INFO] [stdout] test resolve::tests::fuzzy_suggest_tests::empty_candidates_returns_empty ... ok [INFO] [stdout] test resolve::tests::fuzzy_helper_tests::fuzzy_suggest_with_empty_candidates ... ok [INFO] [stdout] test resolve::tests::fuzzy_helper_tests::fuzzy_suggest_finds_matches ... ok [INFO] [stdout] test overlay_repo::tests::test_stage_overlay_with_source_files ... ok [INFO] [stdout] test remove::tests::remove_single_overlay_tests::removes_state_file ... ok [INFO] [stdout] test overlay_repo::tests::test_has_staged_changes_empty_repo ... ok [INFO] [stdout] test overlay_repo::tests::test_get_current_commit_on_valid_repo ... ok [INFO] [stdout] test remove::tests::remove_overlay_tests::remove_by_name_removes_single_overlay ... ok [INFO] [stdout] test resolve::tests::fuzzy_suggest_tests::empty_query_returns_results ... ok [INFO] [stdout] test resolve::tests::fuzzy_suggest_tests::exact_match_returns_match ... ok [INFO] [stdout] test resolve::tests::fuzzy_suggest_tests::limits_to_three_results ... ok [INFO] [stdout] test resolve::tests::fuzzy_suggest_tests::partial_match_returns_suggestions ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_tests::empty_directory_returns_empty ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_tests::sets_org_and_repo_fields ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_additional_tests::handles_symlinks_in_directory ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_tests::finds_overlays_in_nested_structure ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_tests::detects_has_config ... ok [INFO] [stdout] test resolve::tests::resolve_local_path_prefix_tests::ambiguous_path_returns_error ... ok [INFO] [stdout] test resolve::tests::resolve_local_path_tests::fails_on_nonexistent_path ... ok [INFO] [stdout] test resolve::tests::resolve_local_path_prefix_tests::returns_canonical_path ... ok [INFO] [stdout] test resolve::tests::resolve_local_path_tests::resolves_existing_directory ... ok [INFO] [stdout] test resolve::tests::resolve_local_path_tests::resolves_file_as_well_as_directory ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_tests::skips_hidden_directories ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_additional_tests::nonexistent_path_returns_error ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_tests::returns_sorted_overlays ... ok [INFO] [stdout] test remove::tests::remove_single_overlay_tests::removes_git_exclude_section ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_tests::two_level_structure_returns_empty ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_tests::shallow_structure_returns_empty ... ok [INFO] [stdout] test resolve::tests::resolve_local_path_tests::returns_local_source_type ... ok [INFO] [stdout] test resolve::tests::list_overlays_from_path_tests::files_at_org_level_are_ignored ... ok [INFO] [stdout] test resolve::tests::resolved_source_tests::resolved_source_struct_fields ... ok [INFO] [stdout] test resolve::tests::resolved_sources_tests::single_variant_holds_one_source ... ok [INFO] [stdout] test resolve::tests::resolved_sources_tests::multiple_variant_holds_vec_of_sources ... ok [INFO] [stdout] test resolve::tests::resolved_types_tests::resolved_source_holds_path_and_source_info ... ok [INFO] [stdout] test resolve::tests::visible_subdirs_tests::returns_empty_for_empty_dir ... ok [INFO] [stdout] test resolve::tests::resolved_types_tests::resolved_sources_multiple_variant ... ok [INFO] [stdout] test resolve::tests::resolved_types_tests::resolved_sources_single_variant ... ok [INFO] [stdout] test resolve::tests::source_is_configured_tests::none_target_path_still_works ... ok [INFO] [stdout] test selection::tests::all_children_nested_under_parent ... ok [INFO] [stdout] test resolve::tests::source_is_configured_tests::configured_in_repo_local_returns_true ... ok [INFO] [stdout] test resolve::tests::visible_subdirs_tests::skips_files ... ok [INFO] [stdout] test resolve::tests::visible_subdirs_tests::returns_paths_with_names ... ok [INFO] [stdout] test selection::tests::is_interactive_returns_false_in_tests ... ok [INFO] [stdout] test selection::tests::no_child_files_at_root_level ... ok [INFO] [stdout] test selection::tests::search_for_nested_file_includes_ancestors_in_tree ... ok [INFO] [stdout] test selection::tests::snapshot_flat_ui_disabled_highlighted ... ok [INFO] [stdout] test resolve::tests::visible_subdirs_tests::returns_non_hidden_directories ... ok [INFO] [stdout] test resolve::tests::source_is_configured_tests::configured_in_repo_local_matches_by_url ... ok [INFO] [stdout] test resolve::tests::source_is_configured_tests::not_configured_returns_false ... ok [INFO] [stdout] test resolve::tests::source_is_configured_tests::configured_in_repo_local_matches_by_name ... ok [INFO] [stdout] test remove::tests::remove_single_overlay_tests::nonexistent_overlay_with_no_overlays_applied ... ok [INFO] [stdout] test selection::tests::snapshot_flat_ui_search_mode ... ok [INFO] [stdout] test selection::tests::snapshot_flat_ui_no_matches ... ok [INFO] [stdout] test selection::tests::snapshot_flat_ui_initial ... ok [INFO] [stdout] test selection::tests::real_detection_produces_correct_tree_nesting ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_cursor_mid_list ... ok [INFO] [stdout] test remove::tests::remove_single_overlay_tests::removes_nested_file_and_cleans_parent_dir ... ok [INFO] [stdout] test overlay_repo::tests::test_has_staged_changes_with_staged_files ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::get_cached_repo_commit_non_git_directory ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::list_overlays_from_path_skips_hidden_dirs ... ok [INFO] [stdout] test selection::tests::snapshot_flat_ui_with_toggled_selections ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_no_matches ... ok [INFO] [stdout] test resolve::tests::browse_mode_tests::get_cached_repo_commit_valid_git_repo ... ok [INFO] [stdout] test selection::tests::test_all_ancestors_expanded_root_level ... ok [INFO] [stdout] test selection::tests::test_all_visible_selected_all ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_partial_checkbox ... ok [INFO] [stdout] test selection::tests::test_all_visible_selected_empty ... ok [INFO] [stdout] test selection::tests::test_all_visible_selected_partial ... ok [INFO] [stdout] test remove::tests::remove_overlay_tests::remove_all_removes_all_overlays ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_collapsed_dir ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_initial ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_nested ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_deep_nesting ... ok [INFO] [stdout] test selection::tests::test_all_visible_selected_with_filter ... ok [INFO] [stdout] test selection::tests::test_collapse_current_navigates_to_parent ... ok [INFO] [stdout] test selection::tests::test_collapse_current_on_nested_child_navigates_to_immediate_parent ... ok [INFO] [stdout] test selection::tests::test_cannot_hide_all_categories ... ok [INFO] [stdout] test selection::tests::test_collapse_intermediate_directory_hides_nested_children ... ok [INFO] [stdout] test selection::tests::test_clamp_cursor_when_filter_reduces_list ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_select_all ... ok [INFO] [stdout] test selection::tests::test_collapse_parent_hides_all_even_if_child_expanded ... ok [INFO] [stdout] test selection::tests::test_cursor_bounds ... ok [INFO] [stdout] test selection::tests::test_cursor_clamp_on_collapse ... ok [INFO] [stdout] test selection::tests::cursor_down_moves_highlight_each_press_flat ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_search_mode ... ok [INFO] [stdout] test selection::tests::test_collapse_current_on_top_level_file_is_noop ... ok [INFO] [stdout] test selection::tests::test_clamp_cursor_empty_list ... ok [INFO] [stdout] test selection::tests::test_expanded_dirs_default_state ... ok [INFO] [stdout] test selection::tests::test_children_of ... ok [INFO] [stdout] test selection::tests::test_descendants_of ... ok [INFO] [stdout] test selection::tests::test_descendants_of_nonexistent_dir ... ok [INFO] [stdout] test selection::tests::test_dir_selection_state_empty_dir ... ok [INFO] [stdout] test selection::tests::test_flat_state_new_excludes_disabled_from_preselection ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_with_selections ... ok [INFO] [stdout] test selection::tests::test_flat_state_clamp_cursor_within_range ... ok [INFO] [stdout] test selection::tests::test_directory_preselection ... ok [INFO] [stdout] test selection::tests::test_flat_selection_result_fields ... ok [INFO] [stdout] test selection::tests::cursor_down_moves_highlight_each_press_nested ... ok [INFO] [stdout] test selection::tests::test_expand_current_on_non_directory ... ok [INFO] [stdout] test selection::tests::test_flat_state_select_all_skips_disabled ... ok [INFO] [stdout] test selection::tests::test_flat_state_new_sets_preselections ... ok [INFO] [stdout] test selection::tests::test_flat_state_select_all_visible_deselects_when_all_selected ... ok [INFO] [stdout] test selection::tests::test_flat_state_search_filters ... ok [INFO] [stdout] test selection::tests::test_flat_state_toggle_on_and_off ... ok [INFO] [stdout] test selection::tests::test_flat_state_toggle_out_of_bounds ... ok [INFO] [stdout] test selection::tests::test_dir_selection_state_all ... ok [INFO] [stdout] test selection::tests::test_flat_state_clamp_cursor_empty ... ok [INFO] [stdout] test selection::tests::test_deselect_all_visible ... ok [INFO] [stdout] test selection::tests::test_flat_selection_config_fields ... ok [INFO] [stdout] test selection::tests::test_dir_selection_state_partial ... ok [INFO] [stdout] test selection::tests::test_expand_current_on_already_expanded_directory ... ok [INFO] [stdout] test selection::tests::test_flat_state_toggle_skips_disabled ... ok [INFO] [stdout] test selection::tests::test_flat_state_visible_items_case_insensitive ... ok [INFO] [stdout] test selection::tests::test_humanize_count_small_numbers ... ok [INFO] [stdout] test selection::tests::test_humanize_count_thousands ... ok [INFO] [stdout] test selection::tests::test_flat_state_visible_items_empty_query ... ok [INFO] [stdout] test selection::tests::test_is_expandable ... ok [INFO] [stdout] test selection::tests::test_handle_flat_search_key_backspace_pops ... ok [INFO] [stdout] test selection::tests::test_handle_flat_search_key_char_appends ... ok [INFO] [stdout] test selection::tests::test_handle_flat_search_key_ctrl_c_clears ... ok [INFO] [stdout] test selection::tests::test_handle_flat_search_key_enter_returns_true ... ok [INFO] [stdout] test selection::tests::test_handle_flat_search_key_esc_returns_true ... ok [INFO] [stdout] test selection::tests::test_has_active_filters ... ok [INFO] [stdout] test selection::tests::test_dir_selection_state_none ... ok [INFO] [stdout] test selection::tests::test_has_active_filters_with_four_categories ... ok [INFO] [stdout] test selection::tests::test_humanize_count_millions ... ok [INFO] [stdout] test selection::tests::test_resolve_paths_all_children_selected_emits_directory ... ok [INFO] [stdout] test selection::tests::test_resolve_paths_partial_children_emits_individuals ... ok [INFO] [stdout] test selection::tests::test_select_all ... ok [INFO] [stdout] test selection::tests::test_select_all_visible_includes_expanded_children ... ok [INFO] [stdout] test selection::tests::test_selection_config_default ... ok [INFO] [stdout] test selection::tests::test_select_all_visible_respects_filters ... ok [INFO] [stdout] test selection::tests::test_selection_counts ... ok [INFO] [stdout] test selection::tests::test_flat_state_with_descriptions ... ok [INFO] [stdout] test selection::tests::test_selection_counts_includes_directories ... ok [INFO] [stdout] test selection::tests::test_selection_result_fields ... ok [INFO] [stdout] test selection::tests::test_toggle_ai_config_directory_category ... ok [INFO] [stdout] test selection::tests::test_selection_state_default_hidden_categories ... ok [INFO] [stdout] test selection::tests::test_mode_enum_equality ... ok [INFO] [stdout] test selection::tests::test_search_filters_by_path ... ok [INFO] [stdout] test selection::tests::test_search_filters_within_expanded_children ... ok [INFO] [stdout] test selection::tests::test_toggle_category_hides_files ... ok [INFO] [stdout] test selection::tests::test_resolve_paths_no_selections ... ok [INFO] [stdout] test selection::tests::test_toggle_directory_selects_all_children ... ok [INFO] [stdout] test selection::tests::test_toggle_nested_directory_selects_its_children ... ok [INFO] [stdout] test selection::tests::test_selections_persist_across_filter_changes ... ok [INFO] [stdout] test selection::tests::test_visible_descendants_excludes_hidden_categories ... ok [INFO] [stdout] test selection::tests::test_visible_files_respects_category_and_search ... ok [INFO] [stdout] test selection::tests::test_visible_files_hides_collapsed_children ... ok [INFO] [stdout] test selection::tests::test_toggle_expand_collapses_directory ... ok [INFO] [stdout] test selection::tests::test_visible_categories_includes_directory_by_default ... ok [INFO] [stdout] test selection::tests::tree_depth_matches_parent_hierarchy ... ok [INFO] [stdout] test selection::tests::test_toggle_current ... ok [INFO] [stdout] test selection::tests::test_toggle_current_empty_visible_list ... ok [INFO] [stdout] test selection::tests::snapshot_selection_ui_category_hidden ... ok [INFO] [stdout] test sources::tests::test_detect_flat_layout_empty ... ok [INFO] [stdout] test sources::tests::test_detect_flat_layout_nonexistent ... ok [INFO] [stdout] test sources::tests::test_detect_flat_layout_with_files_only ... ok [INFO] [stdout] test sources::tests::test_detect_flat_layout_with_subdirs ... ok [INFO] [stdout] test sources::tests::test_get_overlay_path_in_dir_rejects_traversal_components ... ok [INFO] [stdout] test sources::tests::test_get_source_not_found ... ok [INFO] [stdout] test sources::tests::test_list_flat_dir_with_subdirs ... ok [INFO] [stdout] test sources::tests::test_detect_structured_layout ... ok [INFO] [stdout] test sources::tests::test_list_flat_dir_single_overlay ... ok [INFO] [stdout] test sources::tests::test_flat_overlay_display ... ok [INFO] [stdout] test sources::tests::test_list_flat_dir_skips_hidden ... ok [INFO] [stdout] test sources::tests::test_flat_overlay_relative_path ... ok [INFO] [stdout] test sources::tests::test_get_source_found ... ok [INFO] [stdout] test sources::tests::test_list_overlays_in_dir_empty ... ok [INFO] [stdout] test sources::tests::test_list_overlays_in_dir_nonexistent ... ok [INFO] [stdout] test sources::tests::test_local_source_absolute_path_rejected ... ok [INFO] [stdout] test sources::tests::test_local_source_find_all_matches ... ok [INFO] [stdout] test sources::tests::test_local_source_ensure_cloned_skipped ... ok [INFO] [stdout] test sources::tests::test_local_source_get_source_commit_returns_local ... ok [INFO] [stdout] test sources::tests::test_list_overlays_in_dir_local ... ok [INFO] [stdout] test sources::tests::test_local_source_needs_clone_false ... ok [INFO] [stdout] test sources::tests::test_local_source_no_repo_root_errors ... ok [INFO] [stdout] test sources::tests::test_local_source_pull_all_skipped ... ok [INFO] [stdout] test sources::tests::test_local_source_repo_path ... ok [INFO] [stdout] test sources::tests::test_local_source_nonexistent_path_errors ... ok [INFO] [stdout] test sources::tests::test_local_source_path_escape_rejected ... ok [INFO] [stdout] test sources::tests::test_local_source_list_all_overlays ... ok [INFO] [stdout] test sources::tests::test_local_source_resolve_finds_overlay ... ok [INFO] [stdout] test sources::tests::test_local_source_list_overlays_for_repo ... ok [INFO] [stdout] test sources::tests::test_local_source_resolve_not_found ... ok [INFO] [stdout] test sources::tests::test_list_overlays_in_dir_skips_hidden ... ok [INFO] [stdout] test sources::tests::sources_cache_dir_fails_without_project_dirs ... ok [INFO] [stdout] test selection::tests::test_toggle_directory_deselects_all_children ... ok [INFO] [stdout] test selection::tests::test_toggle_current_moves_with_cursor ... ok [INFO] [stdout] test sources::tests::test_local_source_with_upstream_fallback ... ok [INFO] [stdout] test sources::tests::test_source_names ... ok [INFO] [stdout] test sources::tests::test_structured_dir_still_works ... ok [INFO] [stdout] test state::tests::exclusion_add_remove_and_check ... ok [INFO] [stdout] test selection::tests::cursor_down_moves_highlight_deep_nesting ... ok [INFO] [stdout] test state::tests::backward_compat_state_without_exclusions_deserializes ... ok [INFO] [stdout] test state::tests::external_state_dir_returns_valid_path ... ok [INFO] [stdout] test state::tests::exclusions_omitted_when_empty ... ok [INFO] [stdout] test state::tests::is_excluded_matches_descendants_for_directories ... ok [INFO] [stdout] test state::tests::exclusions_roundtrip_through_serialization ... ok [INFO] [stdout] test state::tests::library_source_construction ... ok [INFO] [stdout] test state::tests::library_source_query_methods ... ok [INFO] [stdout] test state::tests::library_source_display ... ok [INFO] [stdout] test state::tests::library_source_resolver_is_mutable ... ok [INFO] [stdout] test state::tests::library_source_resolver_label ... ok [INFO] [stdout] test state::tests::library_source_resolver_not_syncable ... ok [INFO] [stdout] test state::tests::library_source_resolver_not_updatable ... ok [INFO] [stdout] test state::tests::library_source_resolver_resolve_path_errors ... ok [INFO] [stdout] test state::tests::load_external_exclusions_returns_empty_when_no_state ... ok [INFO] [stdout] test state::tests::load_external_exclusions_returns_exclusions_even_when_removed ... ok [INFO] [stdout] test state::tests::remove_file_returns_matching_entry ... ok [INFO] [stdout] test state::tests::remove_file_returns_none_for_missing ... ok [INFO] [stdout] test state::tests::overlay_state_round_trip_library_source ... ok [INFO] [stdout] test state::tests::snapshot_overlay_source_display ... ok [INFO] [stdout] test state::tests::non_library_source_library_name_is_none ... ok [INFO] [stdout] test state::tests::save_external_state_propagates_errors_for_invalid_target ... ok [INFO] [stdout] test state::tests::source_resolver_github_is_not_mutable ... ok [INFO] [stdout] test state::tests::source_resolver_github_is_not_syncable ... ok [INFO] [stdout] test state::tests::source_resolver_github_is_updatable ... ok [INFO] [stdout] test state::tests::source_resolver_github_label ... ok [INFO] [stdout] test sources::tests::test_source_filter_unknown_source_error ... ok [INFO] [stdout] test state::tests::source_resolver_local_is_mutable ... ok [INFO] [stdout] test state::tests::source_resolver_local_label ... ok [INFO] [stdout] test state::tests::source_resolver_local_is_not_updatable ... ok [INFO] [stdout] test state::tests::source_resolver_local_is_not_syncable ... ok [INFO] [stdout] test state::tests::source_resolver_overlay_repo_is_mutable ... ok [INFO] [stdout] test state::tests::source_resolver_local_resolve_path ... ok [INFO] [stdout] test state::tests::source_resolver_overlay_repo_label ... ok [INFO] [stdout] test state::tests::test_entry_type_default ... ok [INFO] [stdout] test state::tests::test_backwards_compatible_entry_type ... ok [INFO] [stdout] test state::tests::source_resolver_overlay_repo_is_syncable ... ok [INFO] [stdout] test state::tests::source_resolver_overlay_repo_is_updatable ... ok [INFO] [stdout] test state::tests::test_entry_type_equality ... ok [INFO] [stdout] test state::tests::test_exclude_markers ... ok [INFO] [stdout] test state::tests::test_entry_type_serde ... ok [INFO] [stdout] test state::tests::test_external_state_dir_deterministic ... ok [INFO] [stdout] test state::tests::test_file_entry_with_directory_roundtrip ... ok [INFO] [stdout] test state::tests::test_external_state_roundtrip ... ok [INFO] [stdout] test state::tests::test_format_relative_time_future ... ok [INFO] [stdout] test state::tests::test_format_relative_time_days ... ok [INFO] [stdout] test state::tests::test_external_state_multiple_overlays ... ok [INFO] [stdout] test state::tests::test_format_relative_time_just_now ... ok [INFO] [stdout] test state::tests::test_format_relative_time_hours ... ok [INFO] [stdout] test state::tests::test_format_relative_time_months_and_years ... ok [INFO] [stdout] test state::tests::test_global_meta_default ... ok [INFO] [stdout] test state::tests::test_hash_path_consistency ... ok [INFO] [stdout] test state::tests::test_format_relative_time_minutes ... ok [INFO] [stdout] test state::tests::test_link_type_serde ... ok [INFO] [stdout] test state::tests::test_format_relative_time_weeks ... ok [INFO] [stdout] test state::tests::test_list_applied_overlays_empty ... ok [INFO] [stdout] test state::tests::test_load_all_overlay_targets_empty ... ok [INFO] [stdout] test state::tests::test_list_applied_overlays_with_overlays ... ok [INFO] [stdout] test state::tests::test_hash_path_uniqueness ... ok [INFO] [stdout] test state::tests::test_list_applied_overlays_ignores_non_ccl_files ... ok [INFO] [stdout] test state::tests::test_load_all_overlay_targets_with_directories ... ok [INFO] [stdout] test state::tests::test_normalize_overlay_name ... ok [INFO] [stdout] test state::tests::test_load_overlay_state_not_found ... ok [INFO] [stdout] test state::tests::test_normalize_overlay_name_special_chars ... ok [INFO] [stdout] test state::tests::test_normalize_overlay_name_preserves_underscores ... ok [INFO] [stdout] test state::tests::test_normalize_overlay_name_with_special_characters ... ok [INFO] [stdout] test state::tests::test_overlay_config_empty_directories ... ok [INFO] [stdout] test state::tests::test_load_external_states_skips_invalid_files ... ok [INFO] [stdout] test state::tests::test_overlay_config_mappings_with_forward_slashes ... ok [INFO] [stdout] test state::tests::test_overlay_config_minimal ... ok [INFO] [stdout] test state::tests::test_load_all_overlay_targets_with_files ... ok [INFO] [stdout] test state::tests::test_overlay_config_missing_optional_sections ... ok [INFO] [stdout] test state::tests::test_overlay_config_with_directories ... ok [INFO] [stdout] test state::tests::test_overlay_config_with_all_fields ... ok [INFO] [stdout] test state::tests::test_overlay_source_display_github_short_commit ... ok [INFO] [stdout] test state::tests::test_overlay_source_display_overlay_repo_via_upstream ... ok [INFO] [stdout] test state::tests::test_overlay_source_display_overlay_repo_with_source_name ... ok [INFO] [stdout] test state::tests::test_overlay_source_overlay_repo ... ok [INFO] [stdout] test state::tests::test_overlay_source_overlay_repo_with_resolved_via ... ok [INFO] [stdout] test state::tests::test_overlay_source_serde_roundtrip_local ... ok [INFO] [stdout] test state::tests::test_overlay_source_serde_roundtrip_github ... ok [INFO] [stdout] test state::tests::test_overlay_source_github ... ok [INFO] [stdout] test state::tests::test_overlay_state_methods ... ok [INFO] [stdout] test state::tests::test_overlay_source_local ... ok [INFO] [stdout] test state::tests::test_remove_external_state_nonexistent ... ok [INFO] [stdout] test state::tests::test_overlay_state_serde_roundtrip ... ok [INFO] [stdout] test state::tests::test_resolved_via_serde ... ok [INFO] [stdout] test state::tests::test_save_and_load_overlay_state ... ok [INFO] [stdout] test state::tests::test_overlay_state_with_github_source ... ok [INFO] [stdout] test state::tests::test_overlay_state_with_overlay_repo_source ... ok [INFO] [stdout] test state::tests::test_resolved_via_direct_is_default ... ok [INFO] [stdout] test sources::tests::test_resolve_with_upstream_fallback ... ok [INFO] [stdout] test status::tests::show_status_json_tests::json_with_name_filter ... ok [INFO] [stdout] test status::tests::show_status_json_tests::json_with_nonexistent_filter_fails ... ok [INFO] [stdout] test sources::tests::test_mixed_local_and_git_sources ... ok [INFO] [stdout] test sources::tests::test_list_overlays_for_repo_no_matches ... ok [INFO] [stdout] test sources::tests::test_list_overlays_for_repo_with_mixed_sources ... ok [INFO] [stdout] test sources::tests::test_resolve_skips_missing_sources ... ok [INFO] [stdout] test status::tests::show_status_json_tests::json_no_overlays_outputs_empty_array ... ok [INFO] [stdout] test sources::tests::test_list_overlays_for_repo_deduplication ... ok [INFO] [stdout] test status::tests::status_has_overlays_tests::no_overlays_returns_false ... ok [INFO] [stdout] test sources::tests::test_resolve_priority_order ... ok [INFO] [stdout] test sources::tests::test_list_all_overlays ... ok [INFO] [stdout] test status::tests::show_status_json_tests::json_with_overlay_succeeds ... ok [INFO] [stdout] test sources::tests::test_resolve_not_found_in_any ... ok [INFO] [stdout] test status::tests::show_status_tests::status_with_filter_nonexistent_fails ... ok [INFO] [stdout] test status::tests::show_status_tests::status_no_overlays_succeeds ... ok [INFO] [stdout] test tests::apply_multiple_overlays_conflict_strategy::skip_conflicts_skips_existing_repo_files_in_batch ... ok [INFO] [stdout] test tests::apply_multiple_overlays_conflict_strategy::force_overwrites_existing_repo_files_in_batch ... ok [INFO] [stdout] test tests::apply_multiple_overlays_edge_cases::dry_run_with_multiple_overlays ... ok [INFO] [stdout] test tests::apply_multiple_overlays_conflict_strategy::skip_conflicts_bypasses_cross_overlay_file_check_in_batch ... ok [INFO] [stdout] test tests::apply_multiple_overlays_tests::dry_run_does_not_apply ... ok [INFO] [stdout] test tests::apply_multiple_overlays_edge_cases::force_copy_applies_as_copies_not_symlinks ... ok [INFO] [stdout] test status::tests::status_has_overlays_tests::with_overlay_returns_true ... ok [INFO] [stdout] test tests::apply_multiple_overlays_tests::applies_multiple_non_conflicting_overlays ... ok [INFO] [stdout] test tests::apply_multiple_overlays_conflict_strategy::force_reapplies_already_applied_overlay_in_batch ... ok [INFO] [stdout] test tests::apply_multiple_overlays_tests::rejects_conflicting_overlays_before_applying ... ok [INFO] [stdout] test status::tests::show_status_tests::status_with_filter_existing ... ok [INFO] [stdout] test tests::apply_multiple_overlays_edge_cases::applies_three_overlays_successfully ... ok [INFO] [stdout] test tests::apply_overlay_config_tests::overlay_uses_config_name ... ok [INFO] [stdout] test status::tests::show_status_tests::status_with_overlay_succeeds ... ok [INFO] [stdout] test tests::apply_multiple_overlays_conflict_strategy::skip_conflicts_still_rejects_already_applied_overlay_in_batch ... ok [INFO] [stdout] test tests::apply_overlay_config_tests::name_override_beats_config ... ok [INFO] [stdout] test tests::apply_multiple_overlays_tests::rolls_back_on_failure ... ok [INFO] [stdout] test tests::apply_overlay_config_tests::overlay_with_directories ... ok [INFO] [stdout] test tests::browse_mode_tests::list_overlays_from_path_empty_directory ... ok [INFO] [stdout] test tests::browse_mode_tests::list_overlays_from_cached_repo_path_matches_cache_manager ... ok [INFO] [stdout] test tests::browse_mode_tests::list_overlays_from_path_incomplete_nesting ... ok [INFO] [stdout] test tests::browse_mode_tests::list_overlays_from_cached_repo_nonexistent ... ok [INFO] [stdout] test tests::browse_mode_tests::list_overlays_from_path_skips_hidden_dirs ... ok [INFO] [stdout] test tests::browse_mode_tests::list_overlays_from_path_skips_files ... ok [INFO] [stdout] test tests::canonicalize_path_tests::fails_on_nonexistent_path ... ok [INFO] [stdout] test tests::canonicalize_path_tests::succeeds_on_existing_path ... ok [INFO] [stdout] test tests::check_files_against_existing_tests::no_conflicts_succeeds ... ok [INFO] [stdout] test tests::check_files_against_existing_tests::directory_conflict_fails ... ok [INFO] [stdout] test tests::browse_mode_tests::list_overlays_from_path_with_nested_structure ... ok [INFO] [stdout] test tests::check_files_against_existing_tests::file_conflict_fails ... ok [INFO] [stdout] test tests::apply_overlay_config_tests::overlay_with_mappings ... ok [INFO] [stdout] test tests::check_overlay_conflicts_edge_cases::detects_directory_overlapping_existing_file ... ok [INFO] [stdout] test tests::check_overlay_conflicts_edge_cases::detects_file_under_claimed_directory ... ok [INFO] [stdout] test tests::apply_overlay_conflict_tests::dry_run_does_not_apply ... ok [INFO] [stdout] test tests::browse_mode_tests::get_cached_repo_commit_non_git_directory ... ok [INFO] [stdout] test tests::check_overlay_conflicts_edge_cases::single_source_never_conflicts ... ok [INFO] [stdout] test tests::check_overlay_conflicts_edge_cases::allows_file_under_own_directory ... ok [INFO] [stdout] test tests::check_overlay_conflicts_edge_cases::three_overlays_with_conflict_in_third ... ok [INFO] [stdout] test tests::check_overlay_conflicts_tests::no_conflicts_between_non_overlapping_overlays ... ok [INFO] [stdout] test tests::check_overlay_conflicts_edge_cases::three_overlays_no_conflict ... ok [INFO] [stdout] test tests::check_overlay_conflicts_tests::skips_config_and_git_files_in_conflict_check ... ok [INFO] [stdout] test tests::check_overlay_conflicts_tests::detects_file_conflict_between_overlays ... ok [INFO] [stdout] test tests::collect_overlay_files_tests::collects_regular_files ... ok [INFO] [stdout] test tests::browse_mode_tests::list_overlays_from_cached_repo_finds_overlays_at_correct_path ... ok [INFO] [stdout] test tests::check_overlay_conflicts_tests::detects_directory_conflict_between_overlays ... ok [INFO] [stdout] test tests::collect_overlay_files_tests::applies_mappings ... ok [INFO] [stdout] test tests::collect_overlay_files_tests::skips_config_file ... ok [INFO] [stdout] test tests::conflict_strategy_tests::default_is_fail ... ok [INFO] [stdout] test tests::conflict_strategy_tests::enum_equality ... ok [INFO] [stdout] test tests::determine_overlay_name_tests::returns_normalized_name ... ok [INFO] [stdout] test tests::conflict_strategy_tests::debug_format ... ok [INFO] [stdout] test tests::format_not_found_error_tests::basic_error_message ... ok [INFO] [stdout] test tests::format_not_found_error_tests::empty_suggestions_no_did_you_mean ... ok [INFO] [stdout] test tests::format_not_found_error_tests::special_characters_in_names ... ok [INFO] [stdout] test tests::format_not_found_error_tests::with_both_suggestions_and_source_list ... ok [INFO] [stdout] test tests::format_not_found_error_tests::with_source_list ... ok [INFO] [stdout] test tests::fuzzy_helper_tests::format_not_found_error_with_source_list ... ok [INFO] [stdout] test tests::fuzzy_helper_tests::format_not_found_error_with_suggestions ... ok [INFO] [stdout] test tests::determine_overlay_name_tests::name_override_is_normalized ... ok [INFO] [stdout] test tests::fuzzy_helper_tests::format_not_found_error_without_suggestions ... ok [INFO] [stdout] test tests::fuzzy_helper_tests::fuzzy_suggest_finds_matches ... ok [INFO] [stdout] test tests::fuzzy_helper_tests::fuzzy_suggest_with_empty_candidates ... ok [INFO] [stdout] test tests::fuzzy_suggest_tests::empty_candidates_returns_empty ... ok [INFO] [stdout] test tests::fuzzy_suggest_tests::empty_query_returns_results ... ok [INFO] [stdout] test tests::fuzzy_suggest_tests::exact_match_returns_match ... ok [INFO] [stdout] test tests::fuzzy_suggest_tests::limits_to_three_results ... ok [INFO] [stdout] test tests::fuzzy_suggest_tests::partial_match_returns_suggestions ... ok [INFO] [stdout] test tests::generate_diff_tests::both_empty_returns_none ... ok [INFO] [stdout] test tests::generate_diff_tests::diff_contains_header ... ok [INFO] [stdout] test tests::generate_diff_tests::different_content_returns_some ... ok [INFO] [stdout] test tests::generate_diff_tests::empty_existing_shows_additions ... ok [INFO] [stdout] test tests::generate_diff_tests::empty_overlay_shows_removals ... ok [INFO] [stdout] test tests::generate_diff_tests::identical_content_returns_none ... ok [INFO] [stdout] test tests::generate_diff_tests::single_line_no_trailing_newline ... ok [INFO] [stdout] test tests::generate_diff_tests::unicode_content ... ok [INFO] [stdout] test tests::collect_overlay_files_tests::skips_files_in_configured_directories ... ok [INFO] [stdout] test tests::generate_diff_tests::whitespace_only_changes ... ok [INFO] [stdout] test tests::generate_diff_tests::multiline_diff ... ok [INFO] [stdout] test tests::format_not_found_error_tests::with_suggestions ... ok [INFO] [stdout] test tests::interactive_input_tests::case_insensitive ... ok [INFO] [stdout] test tests::interactive_input_tests::force_alias_case_insensitive ... ok [INFO] [stdout] test tests::interactive_input_tests::interactive_choice_clone_and_debug ... ok [INFO] [stdout] test tests::apply_multiple_overlays_edge_cases::rejects_already_applied_overlay ... ok [INFO] [stdout] test tests::collect_overlay_files_tests::collects_nested_files ... ok [INFO] [stdout] test tests::collect_overlay_files_tests::skips_cache_meta_file ... ok [INFO] [stdout] test tests::interactive_input_tests::invalid_input ... ok [INFO] [stdout] test tests::interactive_input_tests::long_abort ... ok [INFO] [stdout] test tests::interactive_input_tests::long_overwrite ... ok [INFO] [stdout] test tests::collect_overlay_files_tests::empty_source_returns_empty ... ok [INFO] [stdout] test tests::collect_overlay_files_tests::skips_git_directory ... ok [INFO] [stdout] test tests::interactive_input_tests::long_force_alias ... ok [INFO] [stdout] test tests::interactive_input_tests::partial_keywords_are_invalid ... ok [INFO] [stdout] test tests::interactive_input_tests::newline_only_is_invalid ... ok [INFO] [stdout] test tests::interactive_input_tests::short_abort ... ok [INFO] [stdout] test tests::interactive_input_tests::short_diff ... ok [INFO] [stdout] test tests::interactive_input_tests::short_force_alias ... ok [INFO] [stdout] test tests::interactive_input_tests::short_skip ... ok [INFO] [stdout] test tests::interactive_input_tests::long_skip ... ok [INFO] [stdout] test tests::interactive_input_tests::whitespace_trimmed ... ok [INFO] [stdout] test tests::list_overlays_from_path_additional_tests::nonexistent_path_returns_error ... ok [INFO] [stdout] test tests::list_overlays_from_path_tests::empty_directory_returns_empty ... ok [INFO] [stdout] test tests::list_overlays_from_path_tests::files_at_org_level_are_ignored ... ok [INFO] [stdout] test tests::list_overlays_from_path_tests::finds_overlays_in_nested_structure ... ok [INFO] [stdout] test tests::list_overlays_from_path_additional_tests::handles_symlinks_in_directory ... ok [INFO] [stdout] test tests::interactive_input_tests::short_overwrite ... ok [INFO] [stdout] test tests::list_overlays_from_path_tests::sets_org_and_repo_fields ... ok [INFO] [stdout] test tests::list_overlays_from_path_tests::returns_sorted_overlays ... ok [INFO] [stdout] test tests::list_overlays_from_path_tests::shallow_structure_returns_empty ... ok [INFO] [stdout] test tests::interactive_input_tests::interactive_input_clone_and_debug ... ok [INFO] [stdout] test tests::list_overlays_from_path_tests::skips_hidden_directories ... ok [INFO] [stdout] test tests::load_overlay_config_tests::missing_config_returns_default ... ok [INFO] [stdout] test tests::apply_overlay_conflict_tests::apply_same_name_with_force_succeeds ... ok [INFO] [stdout] test tests::list_overlays_from_path_tests::two_level_structure_returns_empty ... ok [INFO] [stdout] test tests::load_overlay_config_tests::empty_config_returns_default ... ok [INFO] [stdout] test tests::overlay_name_integration_tests::debug_format ... ok [INFO] [stdout] test tests::interactive_input_tests::long_diff ... ok [INFO] [stdout] test tests::overlay_name_integration_tests::hash_consistent_with_equality ... ok [INFO] [stdout] test tests::overlay_name_integration_tests::as_ref_returns_inner_str ... ok [INFO] [stdout] test tests::load_overlay_config_tests::reads_config_with_name ... ok [INFO] [stdout] test tests::list_overlays_from_path_tests::detects_has_config ... ok [INFO] [stdout] test tests::overlay_name_integration_tests::ordering_is_alphabetical ... ok [INFO] [stdout] test tests::overlay_name_integration_tests::clone_produces_equal_value ... ok [INFO] [stdout] test sources::tests::test_source_filter_uses_specific_source ... ok [INFO] [stdout] test tests::browse_mode_tests::get_cached_repo_commit_empty_git_repo ... ok [INFO] [stdout] test sources::tests::test_find_all_matches ... ok [INFO] [stdout] test sources::tests::test_resolve_first_match_wins ... ok [INFO] [stdout] test tests::overlay_name_integration_tests::partial_eq_str_ref ... ok [INFO] [stdout] test tests::path_validation_tests::canonicalize_path_with_nonexistent_path ... ok [INFO] [stdout] test tests::path_validation_tests::resolve_git_dir_fails_on_non_git_directory ... ok [INFO] [stdout] test tests::path_validation_tests::resolve_git_dir_fails_on_invalid_git_file ... ok [INFO] [stdout] test tests::path_validation_tests::resolve_git_dir_handles_relative_gitdir_path ... ok [INFO] [stdout] test tests::path_validation_tests::validate_git_repo_fails_on_non_git_directory ... ok [INFO] [stdout] test tests::path_validation_tests::resolve_git_dir_handles_worktree ... ok [INFO] [stdout] test tests::apply_overlay_conflict_tests::apply_same_name_twice_fails_by_default ... ok [INFO] [stdout] test tests::resolve_git_dir_additional_tests::git_file_pointing_to_nonexistent_directory ... ok [INFO] [stdout] test tests::resolve_git_dir_additional_tests::git_file_with_extra_whitespace ... ok [INFO] [stdout] test tests::resolve_git_dir_tests::git_file_without_gitdir_prefix_fails ... ok [INFO] [stdout] test tests::path_traversal_tests::rejects_escape_through_deep_chain ... ok [INFO] [stdout] test tests::path_traversal_tests::rejects_absolute_unix_path_in_mapping ... ok [INFO] [stdout] test tests::path_traversal_tests::rejects_escape_at_root ... ok [INFO] [stdout] test tests::path_traversal_tests::rejects_escape_through_parent ... ok [INFO] [stdout] test tests::resolve_git_dir_tests::no_git_at_all_fails ... ok [INFO] [stdout] test tests::resolve_local_path_prefix_tests::ambiguous_path_returns_error ... ok [INFO] [stdout] test tests::resolve_local_path_tests::resolves_existing_directory ... ok [INFO] [stdout] test tests::resolve_git_dir_tests::worktree_with_absolute_gitdir ... ok [INFO] [stdout] test tests::resolve_local_path_prefix_tests::returns_canonical_path ... ok [INFO] [stdout] test tests::resolve_local_path_tests::fails_on_nonexistent_path ... ok [INFO] [stdout] test tests::resolve_git_dir_tests::worktree_with_relative_gitdir ... ok [INFO] [stdout] test tests::path_traversal_tests::allows_traversal_within_target ... ok [INFO] [stdout] test tests::interactive_apply_tests::interactive_batch_reapplies_same_name_overlay ... ok [INFO] [stdout] test tests::resolve_local_path_tests::returns_local_source_type ... ok [INFO] [stdout] test tests::resolve_overlay_display_name_tests::name_override_takes_priority ... ok [INFO] [stdout] test tests::resolved_sources_tests::single_variant_holds_one_source ... ok [INFO] [stdout] test tests::resolve_local_path_tests::resolves_file_as_well_as_directory ... ok [INFO] [stdout] test tests::resolve_overlay_display_name_tests::config_name_used_when_no_override ... ok [INFO] [stdout] test tests::resolve_overlay_display_name_tests::directory_name_used_as_fallback ... ok [INFO] [stdout] test tests::resolved_source_tests::resolved_source_struct_fields ... ok [INFO] [stdout] test tests::resolved_sources_tests::multiple_variant_holds_vec_of_sources ... ok [INFO] [stdout] test tests::show_file_diff_tests::handles_both_files_nonexistent ... ok [INFO] [stdout] test tests::show_file_diff_tests::handles_different_files ... ok [INFO] [stdout] test tests::resolve_overlay_display_name_tests::root_path_returns_unnamed ... ok [INFO] [stdout] test tests::show_file_diff_tests::handles_empty_files ... ok [INFO] [stdout] test tests::path_validation_tests::resolve_git_dir_returns_git_directory_for_regular_repo ... ok [INFO] [stdout] test tests::resolved_types_tests::resolved_source_holds_path_and_source_info ... ok [INFO] [stdout] test tests::resolved_types_tests::resolved_sources_multiple_variant ... ok [INFO] [stdout] test tests::show_file_diff_tests::handles_nonexistent_overlay_file ... ok [INFO] [stdout] test tests::resolved_types_tests::resolved_sources_single_variant ... ok [INFO] [stdout] test tests::test_overlay_items_mark_applied_as_disabled ... ok [INFO] [stdout] test tests::validate_git_repo_tests::fails_on_non_git_directory ... ok [INFO] [stdout] test tests::resolve_git_dir_tests::regular_git_repo_returns_git_dir ... ok [INFO] [stdout] test tests::visible_subdirs_edge_cases::mixed_visible_hidden_and_files ... ok [INFO] [stdout] test tests::show_file_diff_tests::handles_identical_files ... ok [INFO] [stdout] test tests::path_traversal_tests::windows_style_absolute_path_in_mapping_on_unix ... ok [INFO] [stdout] test tests::visible_subdirs_edge_cases::nonexistent_directory_returns_error ... ok [INFO] [stdout] test tests::visible_subdirs_edge_cases::only_hidden_directories_returns_empty ... ok [INFO] [stdout] test tests::visible_subdirs_tests::returns_empty_for_empty_dir ... ok [INFO] [stdout] test tests::show_file_diff_tests::handles_nonexistent_existing_file ... ok [INFO] [stdout] test tests::visible_subdirs_tests::returns_non_hidden_directories ... ok [INFO] [stdout] test tests::visible_subdirs_edge_cases::only_files_returns_empty ... ok [INFO] [stdout] test upstream::tests::repo_identity_matches_returns_false_when_both_none ... ok [INFO] [stdout] test tests::visible_subdirs_tests::skips_files ... ok [INFO] [stdout] test upstream::tests::repo_identity_matches_origin ... ok [INFO] [stdout] test upstream::tests::repo_identity_matches_upstream ... ok [INFO] [stdout] test tests::interactive_apply_tests::interactive_reapplies_same_name_overlay ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::check_state_all_selected ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::check_state_empty_descendants ... ok [INFO] [stdout] test tests::visible_subdirs_tests::returns_paths_with_names ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::check_state_none_selected ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::check_state_partial ... ok [INFO] [stdout] test tests::path_traversal_tests::allows_deeper_traversal_within_target ... ok [INFO] [stdout] test tests::validate_git_repo_tests::succeeds_on_git_repo ... ok [INFO] [stdout] test tests::path_validation_tests::validate_git_repo_succeeds_on_git_directory ... ok [INFO] [stdout] test tests::symlink_escape_tests::symlinks_in_overlay_source_are_not_copied ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::select_many_and_deselect_many ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::clear_selection ... ok [INFO] [stdout] test upstream::tests::repo_identity_matches_upstream_only ... ok [INFO] [stdout] test upstream::tests::repo_identity_matches_case_insensitive ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::snapshot_tree_deep_nesting ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::snapshot_tree_all_unchecked ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::snapshot_tree_collapsed_parent ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::snapshot_tree_tristate_all_checked ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::toggle_leaf_selection ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::renders_tree_with_checkboxes ... ok [INFO] [stdout] test upstream::tests::returns_none_for_non_github_remote ... ok [INFO] [stdout] test upstream::tests::handles_ssh_remote_url ... ok [INFO] [stdout] test tests::browse_mode_tests::get_cached_repo_commit_valid_git_repo ... ok [INFO] [stdout] test upstream::tests::returns_none_when_no_upstream ... ok [INFO] [stdout] test upstream::tests::detects_upstream_remote ... ok [INFO] [stdout] test upstream::tests::detect_identity_returns_none_for_no_remotes ... ok [INFO] [stdout] test upstream::tests::detect_identity_from_origin ... ok [INFO] [stdout] test upstream::tests::detect_identity_from_both_remotes ... ok [INFO] [stdout] test widgets::multi_select_tree::tests::snapshot_tree_tristate_partial ... ok [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] [INFO] [stdout] ---- cache::tests::save_meta_fails_gracefully_when_dir_read_only stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'cache::tests::save_meta_fails_gracefully_when_dir_read_only' (177) panicked at src/cache.rs:1049:9: [INFO] [stdout] save_meta should return Err when directory is read-only [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x58e800e7180a - std[e72de78501789eb0]::backtrace_rs::backtrace::libunwind::trace [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x58e800e7180a - std[e72de78501789eb0]::backtrace_rs::backtrace::trace_unsynchronized:: [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x58e800e7180a - std[e72de78501789eb0]::sys::backtrace::_print_fmt [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/sys/backtrace.rs:74:9 [INFO] [stdout] 3: 0x58e800e7180a - <::print::DisplayBacktrace as core[6aaeda2c7ad07a48]::fmt::Display>::fmt [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/sys/backtrace.rs:44:26 [INFO] [stdout] 4: 0x58e800e8adaa - ::fmt [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/fmt/rt.rs:152:76 [INFO] [stdout] 5: 0x58e800e8adaa - core[6aaeda2c7ad07a48]::fmt::write [INFO] [stdout] 6: 0x58e800e77382 - std[e72de78501789eb0]::io::default_write_fmt::> [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x58e800e77382 - as std[e72de78501789eb0]::io::Write>::write_fmt [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/io/mod.rs:1994:13 [INFO] [stdout] 8: 0x58e800e4b1ef - ::print [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/sys/backtrace.rs:47:9 [INFO] [stdout] 9: 0x58e800e4b1ef - std[e72de78501789eb0]::panicking::default_hook::{closure#0} [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panicking.rs:292:27 [INFO] [stdout] 10: 0x58e800e67759 - std[e72de78501789eb0]::panicking::default_hook [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panicking.rs:316:9 [INFO] [stdout] 11: 0x58e800b0c4cc - core[6aaeda2c7ad07a48]::ops::function::Fn<(&'a std[e72de78501789eb0]::panic::PanicHookInfo<'b>,), Output = ()> + core[6aaeda2c7ad07a48]::marker::Sync + core[6aaeda2c7ad07a48]::marker::Send> as core[6aaeda2c7ad07a48]::ops::function::Fn<(&std[e72de78501789eb0]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 12: 0x58e800b0c4cc - test[4f12b380f1fb68c5]::test_main_with_exit_callback::::{closure#0} [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x58e800e67912 - core[6aaeda2c7ad07a48]::ops::function::Fn<(&'a std[e72de78501789eb0]::panic::PanicHookInfo<'b>,), Output = ()> + core[6aaeda2c7ad07a48]::marker::Sync + core[6aaeda2c7ad07a48]::marker::Send> as core[6aaeda2c7ad07a48]::ops::function::Fn<(&std[e72de78501789eb0]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 14: 0x58e800e67912 - std[e72de78501789eb0]::panicking::panic_with_hook [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panicking.rs:833:13 [INFO] [stdout] 15: 0x58e800e4b2da - std[e72de78501789eb0]::panicking::panic_handler::{closure#0} [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panicking.rs:691:13 [INFO] [stdout] 16: 0x58e800e421d9 - std[e72de78501789eb0]::sys::backtrace::__rust_end_short_backtrace:: [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/sys/backtrace.rs:182:18 [INFO] [stdout] 17: 0x58e800e4c3ed - __rustc[78a4cf188af856fc]::rust_begin_unwind [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panicking.rs:689:5 [INFO] [stdout] 18: 0x58e800e8b59c - core[6aaeda2c7ad07a48]::panicking::panic_fmt [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/panicking.rs:80:14 [INFO] [stdout] 19: 0x58e8007b08a1 - repoverlay[28809b9534b179cd]::cache::tests::save_meta_fails_gracefully_when_dir_read_only [INFO] [stdout] at /opt/rustwide/workdir/src/cache.rs:1049:9 [INFO] [stdout] 20: 0x58e800785b47 - repoverlay[28809b9534b179cd]::cache::tests::save_meta_fails_gracefully_when_dir_read_only::{closure#0} [INFO] [stdout] at /opt/rustwide/workdir/src/cache.rs:1026:55 [INFO] [stdout] 21: 0x58e8007221f6 - >::call_once [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 22: 0x58e800b005ab - core[6aaeda2c7ad07a48]::result::Result<(), alloc[28d2dab30c1dc666]::string::String> as core[6aaeda2c7ad07a48]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 23: 0x58e800b005ab - test[4f12b380f1fb68c5]::__rust_begin_short_backtrace::, fn() -> core[6aaeda2c7ad07a48]::result::Result<(), alloc[28d2dab30c1dc666]::string::String>> [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/test/src/lib.rs:663:18 [INFO] [stdout] 24: 0x58e800b0cf9b - test[4f12b380f1fb68c5]::run_test_in_process::{closure#0} [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/test/src/lib.rs:686:74 [INFO] [stdout] 25: 0x58e800b0cf9b - as core[6aaeda2c7ad07a48]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 26: 0x58e800b0cf9b - std[e72de78501789eb0]::panicking::catch_unwind::do_call::, core[6aaeda2c7ad07a48]::result::Result<(), alloc[28d2dab30c1dc666]::string::String>> [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panicking.rs:581:40 [INFO] [stdout] 27: 0x58e800b0cf9b - std[e72de78501789eb0]::panicking::catch_unwind::, core[6aaeda2c7ad07a48]::panic::unwind_safe::AssertUnwindSafe> [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panicking.rs:544:19 [INFO] [stdout] 28: 0x58e800b0cf9b - std[e72de78501789eb0]::panic::catch_unwind::, core[6aaeda2c7ad07a48]::result::Result<(), alloc[28d2dab30c1dc666]::string::String>> [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panic.rs:359:14 [INFO] [stdout] 29: 0x58e800b0cf9b - test[4f12b380f1fb68c5]::run_test_in_process [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/test/src/lib.rs:686:27 [INFO] [stdout] 30: 0x58e800b0cf9b - test[4f12b380f1fb68c5]::run_test::{closure#0} [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/test/src/lib.rs:607:43 [INFO] [stdout] 31: 0x58e800b086b4 - test[4f12b380f1fb68c5]::run_test::{closure#1} [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/test/src/lib.rs:637:41 [INFO] [stdout] 32: 0x58e800b086b4 - std[e72de78501789eb0]::sys::backtrace::__rust_begin_short_backtrace:: [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/sys/backtrace.rs:166:18 [INFO] [stdout] 33: 0x58e800b0fba2 - std[e72de78501789eb0]::thread::lifecycle::spawn_unchecked::::{closure#1}::{closure#0} [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/thread/lifecycle.rs:91:13 [INFO] [stdout] 34: 0x58e800b0fba2 - ::{closure#1}::{closure#0}> as core[6aaeda2c7ad07a48]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 35: 0x58e800b0fba2 - std[e72de78501789eb0]::panicking::catch_unwind::do_call::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panicking.rs:581:40 [INFO] [stdout] 36: 0x58e800b0fba2 - std[e72de78501789eb0]::panicking::catch_unwind::<(), core[6aaeda2c7ad07a48]::panic::unwind_safe::AssertUnwindSafe::{closure#1}::{closure#0}>> [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panicking.rs:544:19 [INFO] [stdout] 37: 0x58e800b0fba2 - std[e72de78501789eb0]::panic::catch_unwind::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/panic.rs:359:14 [INFO] [stdout] 38: 0x58e800b0fba2 - std[e72de78501789eb0]::thread::lifecycle::spawn_unchecked::::{closure#1} [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/thread/lifecycle.rs:89:26 [INFO] [stdout] 39: 0x58e800b0fba2 - ::{closure#1} as core[6aaeda2c7ad07a48]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 40: 0x58e800e7081f - + core[6aaeda2c7ad07a48]::marker::Send> as core[6aaeda2c7ad07a48]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/alloc/src/boxed.rs:2240:9 [INFO] [stdout] 41: 0x58e800e7081f - ::new::thread_start [INFO] [stdout] at /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/sys/thread/unix.rs:118:17 [INFO] [stdout] 42: 0x7e887df4caa4 - [INFO] [stdout] 43: 0x7e887dfd9a64 - clone [INFO] [stdout] 44: 0x0 - [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] cache::tests::save_meta_fails_gracefully_when_dir_read_only [INFO] [stdout] [INFO] [stdout] test result: FAILED. 1149 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.79s [INFO] [stdout] [INFO] [stderr] error: test failed, to rerun pass `--lib` [INFO] running `Command { std: "docker" "inspect" "f4040a3bed4949c90939752b99a2a97900a2b3bd5db78f9d891422f00d1825e5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f4040a3bed4949c90939752b99a2a97900a2b3bd5db78f9d891422f00d1825e5", kill_on_drop: false }` [INFO] [stdout] f4040a3bed4949c90939752b99a2a97900a2b3bd5db78f9d891422f00d1825e5