[INFO] fetching crate sloc-guard 0.6.0...
[INFO] testing sloc-guard-0.6.0 against 1.100.0-beta.1 for beta-1.100-2
[INFO] extracting crate sloc-guard 0.6.0 into /workspace/builds/worker-1-tc2/source
[INFO] started tweaking crates.io crate sloc-guard 0.6.0
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate sloc-guard 0.6.0
[INFO] tweaked toml for crates.io crate sloc-guard 0.6.0 written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate sloc-guard 0.6.0 on toolchain 1.100.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate sloc-guard 0.6.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" "+1.100.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]    --> Cargo.toml:103:12
[INFO] [stderr]     |
[INFO] [stderr] 103 | homepage = "https://github.com/doraemonkeys/sloc-guard"
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 108 | repository = "https://github.com/doraemonkeys/sloc-guard"
[INFO] [stderr]     |              --------------------------------------------
[INFO] [stderr]     |
[INFO] [stderr]     = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `sloc-guard` (manifest) generated 1 warning
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d
[INFO] running `Command { std: "docker" "start" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]    --> Cargo.toml:103:12
[INFO] [stderr]     |
[INFO] [stderr] 103 | homepage = "https://github.com/doraemonkeys/sloc-guard"
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 108 | repository = "https://github.com/doraemonkeys/sloc-guard"
[INFO] [stderr]     |              --------------------------------------------
[INFO] [stderr]     |
[INFO] [stderr]     = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `sloc-guard` (manifest) generated 1 warning
[INFO] [stderr]    Compiling proc-macro2 v1.0.103
[INFO] [stderr]    Compiling unicode-ident v1.0.22
[INFO] [stderr]    Compiling libc v0.2.178
[INFO] [stderr]    Compiling memchr v2.7.6
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling gix-trace v0.1.16
[INFO] [stderr]    Compiling quote v1.0.42
[INFO] [stderr]    Compiling tinyvec v1.10.0
[INFO] [stderr]    Compiling zlib-rs v0.5.5
[INFO] [stderr]    Compiling heapless v0.8.0
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling hash32 v0.3.1
[INFO] [stderr]    Compiling jiff v0.2.17
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling bytes v1.11.0
[INFO] [stderr]    Compiling find-msvc-tools v0.1.6
[INFO] [stderr]    Compiling unicode-bom v2.0.3
[INFO] [stderr]    Compiling litemap v0.8.1
[INFO] [stderr]    Compiling futures-sink v0.3.31
[INFO] [stderr]    Compiling writeable v0.6.2
[INFO] [stderr]    Compiling kstring v2.0.2
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling rustls-pki-types v1.13.2
[INFO] [stderr]    Compiling cc v1.2.51
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling rustls v0.23.35
[INFO] [stderr]    Compiling shell-words v1.1.1
[INFO] [stderr]    Compiling futures-channel v0.3.31
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling winnow v0.7.14
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling faster-hex v0.10.0
[INFO] [stderr]    Compiling sha1-checked v0.10.0
[INFO] [stderr]    Compiling unicode-normalization v0.1.25
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling anstyle-parse v0.2.7
[INFO] [stderr]    Compiling clru v0.6.2
[INFO] [stderr]    Compiling syn v2.0.111
[INFO] [stderr]    Compiling colorchoice v1.0.4
[INFO] [stderr]    Compiling portable-atomic v1.12.0
[INFO] [stderr]    Compiling anstream v0.6.21
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling arc-swap v1.8.0
[INFO] [stderr]    Compiling webpki-roots v1.0.4
[INFO] [stderr]    Compiling iri-string v0.7.9
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling memmap2 v0.9.9
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling socket2 v0.6.1
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling gix-sec v0.12.2
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling getrandom v0.2.16
[INFO] [stderr]    Compiling filetime v0.2.26
[INFO] [stderr]    Compiling prodash v30.0.1
[INFO] [stderr]    Compiling regex-automata v0.4.13
[INFO] [stderr]    Compiling serde_json v1.0.147
[INFO] [stderr]    Compiling tokio v1.48.0
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling clap_builder v4.5.53
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling console v0.16.2
[INFO] [stderr]    Compiling tempfile v3.24.0
[INFO] [stderr]    Compiling toml_datetime v0.7.5+spec-1.1.0
[INFO] [stderr]    Compiling toml_parser v1.0.6+spec-1.1.0
[INFO] [stderr]    Compiling serde_spanned v1.0.4
[INFO] [stderr]    Compiling zmij v0.1.9
[INFO] [stderr]    Compiling toml_writer v1.0.6+spec-1.1.0
[INFO] [stderr]    Compiling unit-prefix v0.5.2
[INFO] [stderr]    Compiling indicatif v0.18.3
[INFO] [stderr]    Compiling directories v6.0.0
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling toml v0.9.10+spec-1.1.0
[INFO] [stderr]    Compiling indexmap v2.12.1
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling regex v1.12.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.17
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling maybe-async v0.2.10
[INFO] [stderr]    Compiling clap_derive v4.5.49
[INFO] [stderr]    Compiling gix-utils v0.3.1
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling rustls-webpki v0.103.8
[INFO] [stderr]    Compiling ignore v0.4.25
[INFO] [stderr]    Compiling thiserror v2.0.17
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling gix-validate v0.10.1
[INFO] [stderr]    Compiling gix-date v0.11.1
[INFO] [stderr]    Compiling gix-chunk v0.4.12
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling gix-quote v0.6.1
[INFO] [stderr]    Compiling gix-path v0.10.22
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling gix-bitmap v0.2.15
[INFO] [stderr]    Compiling gix-packetline v0.20.0
[INFO] [stderr]    Compiling gix-actor v0.36.1
[INFO] [stderr]    Compiling hyper v1.8.1
[INFO] [stderr]    Compiling gix-features v0.45.0
[INFO] [stderr]    Compiling gix-config-value v0.16.0
[INFO] [stderr]    Compiling gix-command v0.6.3
[INFO] [stderr]    Compiling tower v0.5.2
[INFO] [stderr]    Compiling gix-hash v0.21.0
[INFO] [stderr]    Compiling gix-fs v0.18.0
[INFO] [stderr]    Compiling gix-glob v0.23.0
[INFO] [stderr]    Compiling gix-url v0.34.0
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling gix-hashtable v0.11.0
[INFO] [stderr]    Compiling gix-commitgraph v0.31.0
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling clap v4.5.53
[INFO] [stderr]    Compiling gix-object v0.53.0
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling gix-tempfile v20.0.0
[INFO] [stderr]    Compiling gix-attributes v0.29.0
[INFO] [stderr]    Compiling gix-ignore v0.18.0
[INFO] [stderr]    Compiling gix-lock v20.0.0
[INFO] [stderr]    Compiling hyper-util v0.1.19
[INFO] [stderr]    Compiling gix-transport v0.51.0
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling gix-shallow v0.7.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling gix-pathspec v0.14.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling gix-revwalk v0.24.0
[INFO] [stderr]    Compiling gix-ref v0.56.0
[INFO] [stderr]    Compiling gix-pack v0.63.0
[INFO] [stderr]    Compiling gix-filter v0.23.0
[INFO] [stderr]    Compiling gix-diff v0.56.0
[INFO] [stderr]    Compiling gix-traverse v0.50.0
[INFO] [stderr]    Compiling gix-revision v0.38.0
[INFO] [stderr]    Compiling gix-index v0.44.0
[INFO] [stderr]    Compiling gix-refspec v0.34.0
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling gix-odb v0.73.0
[INFO] [stderr]    Compiling url v2.5.7
[INFO] [stderr]    Compiling gix-config v0.49.0
[INFO] [stderr]    Compiling gix-discover v0.44.0
[INFO] [stderr]    Compiling gix-protocol v0.54.0
[INFO] [stderr]    Compiling gix-worktree v0.45.0
[INFO] [stderr]    Compiling gix-dir v0.18.0
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling hyper-rustls v0.27.7
[INFO] [stderr]    Compiling gix-submodule v0.23.0
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling gix v0.76.0
[INFO] [stderr]    Compiling sloc-guard v0.6.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 34s
[INFO] running `Command { std: "docker" "inspect" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]    --> Cargo.toml:103:12
[INFO] [stderr]     |
[INFO] [stderr] 103 | homepage = "https://github.com/doraemonkeys/sloc-guard"
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 108 | repository = "https://github.com/doraemonkeys/sloc-guard"
[INFO] [stderr]     |              --------------------------------------------
[INFO] [stderr]     |
[INFO] [stderr]     = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `sloc-guard` (manifest) generated 1 warning
[INFO] [stderr]    Compiling predicates-core v1.0.9
[INFO] [stderr]    Compiling float-cmp v0.10.0
[INFO] [stderr]    Compiling assert_cmd v2.1.1
[INFO] [stderr]    Compiling termtree v0.5.1
[INFO] [stderr]    Compiling difflib v0.4.0
[INFO] [stderr]    Compiling normalize-line-endings v0.3.0
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling predicates-tree v1.0.12
[INFO] [stderr]    Compiling predicates v3.1.3
[INFO] [stderr]    Compiling sloc-guard v0.6.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 31.45s
[INFO] running `Command { std: "docker" "inspect" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]    --> Cargo.toml:103:12
[INFO] [stderr]     |
[INFO] [stderr] 103 | homepage = "https://github.com/doraemonkeys/sloc-guard"
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 108 | repository = "https://github.com/doraemonkeys/sloc-guard"
[INFO] [stderr]     |              --------------------------------------------
[INFO] [stderr]     |
[INFO] [stderr]     = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `sloc-guard` (manifest) generated 1 warning
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.84s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/build/sloc-guard/4da67d475d9a48b9/out/sloc_guard-4da67d475d9a48b9)
[INFO] [stdout] 
[INFO] [stdout] running 2181 tests
[INFO] [stdout] test analyzer::parser::go_tests::test_go_parser_multiple_returns ... ok
[INFO] [stdout] test analyzer::parser::c_tests::test_c_parser_complex_signatures ... ok
[INFO] [stdout] test analyzer::parser::c_tests::test_c_parser ... ok
[INFO] [stdout] test analyzer::parser::c_tests::test_c_parser_pointer_returns ... ok
[INFO] [stdout] test analyzer::parser::c_tests::test_cpp_parser_templates ... ok
[INFO] [stdout] test analyzer::parser::js_tests::test_js_parser ... ok
[INFO] [stdout] test analyzer::parser::go_tests::test_go_parser_variadic ... ok
[INFO] [stdout] test analyzer::parser::go_tests::test_go_parser_receiver_types ... ok
[INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_default_export ... ok
[INFO] [stdout] test analyzer::parser::python_tests::test_python_parser ... ok
[INFO] [stdout] test analyzer::parser::c_tests::test_cpp_parser_class_methods ... ok
[INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_typescript_patterns ... ok
[INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_class_variations ... ok
[INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_class_methods ... ok
[INFO] [stdout] test analyzer::parser::go_tests::test_go_parser ... ok
[INFO] [stdout] test analyzer::parser::go_tests::test_go_parser_special_functions ... ok
[INFO] [stdout] test analyzer::parser::c_tests::test_c_parser_no_false_positives ... ok
[INFO] [stdout] test analyzer::parser::c_tests::test_cpp_parser_inline_class_methods ... ok
[INFO] [stdout] test analyzer::parser::c_tests::test_cpp_parser_modern_features ... ok
[INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_decorated_functions ... ok
[INFO] [stdout] test analyzer::parser::c_tests::test_c_parser_modifiers ... ok
[INFO] [stdout] test analyzer::parser::rust_tests::test_line_number_accuracy ... ok
[INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_with_docstrings ... ok
[INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_generics_and_lifetimes ... ok
[INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_function_variations ... ok
[INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_dunder_methods ... ok
[INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_trait_impl ... ok
[INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_multiline_signature ... ok
[INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_visibility_modifiers ... ok
[INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_nested_functions ... ok
[INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser ... ok
[INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_unsafe_and_const ... ok
[INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_nested_braces ... ok
[INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_react_patterns ... ok
[INFO] [stdout] test analyzer::tests::generate_split_suggestions_skips_passed ... ok
[INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_arrow_variations ... ok
[INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_async_unsafe_combination ... ok
[INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_type_hints ... ok
[INFO] [stdout] test analyzer::tests::generate_split_suggestions_skips_missing_file ... ok
[INFO] [stdout] test analyzer::split::tests::test_split_analyzer_single_chunk_no_suggestion ... ok
[INFO] [stdout] test analyzer::split::tests::test_split_analyzer_no_functions ... ok
[INFO] [stdout] test baseline::tests::baseline_entry_content_constructor ... ok
[INFO] [stdout] test analyzer::tests::generate_split_suggestions_skips_unknown_extension ... ok
[INFO] [stdout] test analyzer::split::tests::test_split_analyzer_generates_chunks ... ok
[INFO] [stdout] test baseline::tests::compute_file_hash_nonexistent_returns_error ... ok
[INFO] [stdout] test baseline::tests::compute_content_hash_produces_consistent_result ... ok
[INFO] [stdout] test baseline::tests::compute_content_hash_different_content_different_hash ... ok
[INFO] [stdout] test baseline::tests::compute_file_hash_works ... ok
[INFO] [stdout] test baseline::tests::len_and_is_empty ... ok
[INFO] [stdout] test baseline::tests::load_nonexistent_file_returns_error ... ok
[INFO] [stdout] test baseline::tests::default_creates_new_baseline ... ok
[INFO] [stdout] test baseline::tests::remove_nonexistent_returns_none ... ok
[INFO] [stdout] test baseline::tests::files_returns_all_entries ... ok
[INFO] [stdout] test baseline::tests::baseline_entry_structure_constructor ... ok
[INFO] [stdout] test baseline::tests::get_nonexistent_entry_returns_none ... ok
[INFO] [stdout] test baseline::tests::contains_returns_correct_result ... ok
[INFO] [stdout] test baseline::tests::remove_entry ... ok
[INFO] [stdout] test baseline::tests::new_creates_empty_baseline ... ok
[INFO] [stdout] test analyzer::parser::tests::test_get_parser_language_mapping ... ok
[INFO] [stdout] test baseline::tests::set_content_updates_existing_entry ... ok
[INFO] [stdout] test cache::tests::test_cache_is_valid ... ok
[INFO] [stdout] test cache::tests::test_cache_default ... ok
[INFO] [stdout] test baseline::tests::set_content_and_get_entry ... ok
[INFO] [stdout] test baseline::tests::set_generic_entry ... ok
[INFO] [stdout] test baseline::tests::set_structure_and_get_entry ... ok
[INFO] [stdout] test cache::tests::test_cache_entry_new ... ok
[INFO] [stdout] test cache::tests::test_cache_files ... ok
[INFO] [stdout] test cache::tests::test_cache_get_if_valid ... ok
[INFO] [stdout] test cache::tests::test_cache_entry_metadata_matches ... ok
[INFO] [stdout] test cache::tests::test_compute_config_hash_changes_with_custom_languages ... ok
[INFO] [stdout] test cache::tests::test_cache_load_nonexistent ... ok
[INFO] [stdout] test cache::tests::test_cache_set_and_get ... ok
[INFO] [stdout] test cache::tests::test_cache_remove ... ok
[INFO] [stdout] test cache::tests::test_cached_line_stats_from ... ok
[INFO] [stdout] test cache::tests::test_cache_new ... ok
[INFO] [stdout] test cache::tests::test_cache_get_if_metadata_matches ... ok
[INFO] [stdout] test cache::tests::test_compute_config_hash ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::check_under_limit_returns_no_violations ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::check_empty_stats_returns_no_violations ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::checker_enabled_with_allowlist_rule ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::checker_enabled_with_dir_limit ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::checker_enabled_with_file_limit ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::violation_type_equality ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::checker_enabled_with_rules ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::checker_not_enabled_by_default ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::dir_stats_default ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::invalid_rule_pattern_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::structure_violation_new ... ok
[INFO] [stdout] test checker::structure::check_tests::basic_tests::violations_sorted_by_path ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::directories_are_excluded_from_dir_count ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::excluded_directory_still_counts_without_pattern ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::earlier_matching_rule_count_exclude_is_superseded ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::basename_pattern_excludes_files_from_effective_count ... ok
[INFO] [stdout] test cache::tests::test_line_stats_from_cached ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::count_exclude_applies_within_rule_scoped_limits ... ok
[INFO] [stdout] test cache::tests::test_compute_config_hash_ignores_non_counting_settings ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::explain_excluded_from_scan_reports_no_counts_and_no_hits ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::count_exclude_preserves_root_anchors_and_basename_patterns ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::explain_attributes_child_to_every_matching_pattern ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::explain_outside_any_rule_lists_only_global_patterns ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::invalid_count_exclude_pattern_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::explain_path_qualified_pattern_reports_no_hits_elsewhere ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::invalid_rule_count_exclude_pattern_error_identifies_the_rule ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::explain_lists_global_then_winning_rule_count_exclude ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::explain_reports_raw_and_effective_counts_with_per_pattern_hits ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::global_count_exclude_applies_when_matched_rule_adds_none ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::explain_shows_rule_caliber_even_when_limits_fall_back_to_global ... ok
[INFO] [stdout] test baseline::tests::mixed_content_and_structure_entries ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::path_qualified_pattern_matches_only_its_directory ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::last_matching_rule_count_exclude_wins ... ok
[INFO] [stdout] test cache::tests::test_cache_load_invalid_json ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::rule_count_exclude_path_qualified_vs_basename ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::warn_thresholds_apply_to_effective_counts ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::without_count_exclude_raw_counts_are_used ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::check_depth_over_limit_returns_violation ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::check_depth_under_limit_returns_no_violations ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::rule_count_exclude_applies_to_dir_count ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::checker_enabled_with_depth_limit ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::depth_warn_threshold ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::depth_warn_threshold_does_not_warn_at_threshold_boundary ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::invalid_max_depth_value_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::calculate_base_depth_simple_pattern ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_allows_deep_nesting_within_base ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_uses_normalized_dot_prefixed_scope ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_false_uses_absolute_depth ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_violates_when_too_deep ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::rule_count_exclude_unions_with_global ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::invalid_rule_max_depth_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_with_double_star_at_start ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_saturating_sub_for_shallow_paths ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_with_wildcard_in_middle ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::granular_warn_different_for_files_and_dirs ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_moving_base_works ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::check_over_file_limit_returns_violation ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::unlimited_depth_skips_check ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::check_both_limits_exceeded_returns_both_violations ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::default_warn_threshold_is_0_8 ... ok
[INFO] [stdout] test checker::structure::check_tests::count_exclude_tests::rule_count_exclude_applies_only_within_rule_scope ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_warn_threshold ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::invalid_max_files_value_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::invalid_max_dirs_value_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::invalid_rule_max_dirs_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::invalid_rule_max_files_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::no_warn_threshold_uses_default_0_8 ... ok
[INFO] [stdout] test checker::structure::check_tests::depth_tests::rule_overrides_global_depth_limit ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::check_over_dir_limit_returns_violation ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::rule_inherits_granular_threshold_from_global ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::granular_warn_in_rule_overrides_global ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::rule_overrides_global_limit ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::rule_inherits_unset_limit_from_global ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::rule_can_set_unlimited_to_override_global ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::unconfigured_max_dirs_allows_unlimited_directories ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::unlimited_file_limit_skips_check ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_dirs_at_absolute_takes_precedence ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_files_threshold_overrides_global ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_files_at_absolute_takes_precedence ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::unlimited_dir_limit_skips_check ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_threshold_error_above_hard_limit ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_threshold_dir_count ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_threshold_does_not_warn_at_threshold_boundary ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_dirs_threshold_overrides_global ... ok
[INFO] [stdout] test baseline::tests::load_succeeds_with_shared_lock_held ... ok
[INFO] [stdout] test baseline::tests::save_and_load_baseline ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_threshold_dir_count_does_not_warn_at_threshold_boundary ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_threshold_triggers_warning_below_hard_limit ... ok
[INFO] [stdout] test checker::structure::check_tests::rule_priority_tests::non_matching_rules_skipped_in_priority ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_threshold_rule_overrides_global ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::check_siblings_no_rules_returns_empty ... ok
[INFO] [stdout] test checker::structure::check_tests::rule_priority_tests::multiple_matching_rules_last_match_wins ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_file_missing_sibling_returns_violation ... ok
[INFO] [stdout] test checker::structure::check_tests::limit_tests::warn_threshold_no_warning_below_threshold ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_file_has_sibling_no_violation ... ok
[INFO] [stdout] test baseline::tests::saved_json_is_readable ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_file_pattern_not_matching_skips_check ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::derive_sibling_path_basic ... ok
[INFO] [stdout] test checker::structure::check_tests::rule_priority_tests::last_match_wins_more_restrictive_rule_last ... ok
[INFO] [stdout] test checker::structure::check_tests::rule_priority_tests::explain_reports_last_matching_rule ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::derive_sibling_path_different_template ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::empty_match_pattern_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::empty_require_pattern_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::empty_siblings_array_is_valid_no_op ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::file_matching_one_pattern_in_group_still_works ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_rule_matches_empty_stem_file_and_expects_sibling ... ok
[INFO] [stdout] test cache::tests::test_cache_save_and_load ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::group_all_files_exist_no_violation ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::group_file_not_in_group_no_check ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_multiple_requires ... ok
[INFO] [stdout] test checker::structure::check_tests::rule_priority_tests::three_rules_last_matching_wins ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::dot_prefixed_scope_applies_to_limits_and_siblings ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::empty_stem_in_group_pattern_does_not_match ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_dir_pattern_not_matching_skips_check ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_with_warn_severity_creates_warning ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::group_missing_member_returns_violation ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_multiple_files_mixed_results ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_violations_are_sorted_by_path ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::group_missing_member_still_detected_after_empty_stem_fix ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::single_char_stem_is_valid ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_nested_directories ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::group_three_files_one_missing ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::group_with_normal_files_still_works_after_empty_stem_fix ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::group_with_one_pattern_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::group_with_warn_severity_creates_warning ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::invalid_match_glob_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::normal_prefixed_pattern_still_works ... ok
[INFO] [stdout] test checker::structure::check_tests::subtree_scope_tests::subtree_scope_does_not_match_sibling_name_prefix ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::require_multiple_patterns_one_without_stem_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::require_pattern_without_stem_returns_error ... ok
[INFO] [stdout] test checker::structure::check_tests::subtree_scope_tests::subtree_scope_limits_apply_to_base_and_descendants ... ok
[INFO] [stdout] test checker::structure::check_tests::subtree_scope_tests::star_subtree_scope_does_not_cover_config_root ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::root_scope_directed_rule_checks_root_files ... ok
[INFO] [stdout] test checker::structure::check_tests::subtree_scope_tests::explain_reports_subtree_scope_for_base_directory ... ok
[INFO] [stdout] test checker::structure::check_tests::sibling_tests::prefix_pattern_with_empty_stem_not_matched ... ok
[INFO] [stdout] test checker::structure::check_tests::subtree_scope_tests::subtree_scope_sibling_rule_applies_in_base_and_nested_dirs ... ok
[INFO] [stdout] test checker::structure::check_tests::validation_tests::global_deny_only_passes ... ok
[INFO] [stdout] test checker::structure::check_tests::validation_tests::rule_allow_deny_mutual_exclusion_fails ... ok
[INFO] [stdout] test checker::structure::check_tests::validation_tests::group_pattern_with_stem_placeholder_passes ... ok
[INFO] [stdout] test checker::structure::check_tests::validation_tests::rule_allow_dirs_with_deny_patterns_fails ... ok
[INFO] [stdout] test checker::structure::check_tests::validation_tests::rule_allow_only_passes ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::check_result_is_methods ... ok
[INFO] [stdout] test checker::tests::check_result_is_passed ... ok
[INFO] [stdout] test checker::structure::check_tests::validation_tests::group_pattern_without_stem_placeholder_fails ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::check_result_usage_percent ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::check_fails_over_threshold ... ok
[INFO] [stdout] test checker::structure::check_tests::subtree_scope_tests::subtree_scope_with_brace_alternation_covers_both_roots ... ok
[INFO] [stdout] test checker::structure::check_tests::validation_tests::global_allow_deny_mutual_exclusion_fails ... ok
[INFO] [stdout] test checker::structure::check_tests::validation_tests::global_allow_dirs_with_deny_extensions_fails ... ok
[INFO] [stdout] test checker::structure::check_tests::validation_tests::global_allow_only_passes ... ok
[INFO] [stdout] test checker::tests::check_result_is_failed ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::check_no_override_reason_when_using_default ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::check_rule_without_reason ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::check_passes_under_threshold ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::check_uses_rule_specific_limit ... ok
[INFO] [stdout] test checker::structure::check_tests::subtree_scope_tests::subtree_scope_relative_depth_anchors_at_base_directory ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::check_uses_rule_with_reason ... ok
[INFO] [stdout] test checker::structure::check_tests::subtree_scope_tests::subtree_scope_participates_in_last_match_wins ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::check_warns_near_threshold ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::custom_warning_threshold ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::raw_stats_falls_back_to_stats_when_none ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::raw_stats_works_for_all_variants ... ok
[INFO] [stdout] test checker::threshold::tests::check_result_tests::raw_stats_returns_raw_when_present ... ok
[INFO] [stdout] test checker::threshold::tests::content_exclude_tests::content_exclude_empty_has_no_effect ... ok
[INFO] [stdout] test checker::threshold::tests::content_exclude_tests::content_exclude_skips_matching_files ... ok
[INFO] [stdout] test checker::threshold::tests::content_exclude_tests::content_exclude_takes_priority_over_extension_match ... ok
[INFO] [stdout] test checker::threshold::tests::content_exclude_tests::dot_prefixed_content_exclude_is_anchored_to_logical_root ... ok
[INFO] [stdout] test checker::threshold::tests::content_exclude_tests::explain_non_excluded_file_has_is_excluded_false ... ok
[INFO] [stdout] test checker::threshold::tests::content_exclude_tests::explain_shows_matching_exclude_pattern ... ok
[INFO] [stdout] test checker::threshold::tests::content_exclude_tests::explain_shows_excluded_status ... ok
[INFO] [stdout] test checker::threshold::tests::content_exclude_tests::is_content_excluded_method ... ok
[INFO] [stdout] test checker::threshold::tests::error_handling_tests::error_has_suggestion ... ok
[INFO] [stdout] test checker::threshold::tests::content_exclude_tests::content_exclude_multiple_patterns ... ok
[INFO] [stdout] test checker::threshold::tests::error_handling_tests::first_invalid_pattern_fails_immediately ... ok
[INFO] [stdout] test checker::threshold::tests::error_handling_tests::error_message_includes_pattern ... ok
[INFO] [stdout] test checker::threshold::tests::error_handling_tests::invalid_content_exclude_pattern_returns_error ... ok
[INFO] [stdout] test checker::threshold::tests::error_handling_tests::invalid_content_rule_pattern_returns_error ... ok
[INFO] [stdout] test checker::threshold::tests::error_handling_tests::valid_patterns_succeed ... ok
[INFO] [stdout] test checker::threshold::tests::file_filter_tests::should_process_extension_less_file_with_content_rule_exact_match ... ok
[INFO] [stdout] test checker::threshold::tests::file_filter_tests::should_process_allows_all_when_no_extensions_configured ... ok
[INFO] [stdout] test checker::threshold::tests::file_filter_tests::should_process_extension_less_file_skipped_without_rule ... ok
[INFO] [stdout] test checker::threshold::tests::file_filter_tests::should_process_extension_less_file_with_content_rule ... ok
[INFO] [stdout] test checker::threshold::tests::file_filter_tests::should_process_extension_less_file_with_glob_rule ... ok
[INFO] [stdout] test checker::threshold::tests::file_filter_tests::should_process_filters_by_extension ... ok
[INFO] [stdout] test checker::threshold::tests::file_filter_tests::should_process_extension_less_file_with_rule_exact_path ... ok
[INFO] [stdout] test checker::threshold::tests::rule_matching_tests::later_rule_overrides_earlier_rule ... ok
[INFO] [stdout] test checker::threshold::tests::rule_matching_tests::multiple_path_rules_last_match_wins ... ok
[INFO] [stdout] test checker::threshold::tests::rule_matching_tests::path_rule_has_higher_priority_than_extension_rule ... ok
[INFO] [stdout] test checker::threshold::tests::rule_matching_tests::dot_prefixed_path_rule_matches_logical_path ... ok
[INFO] [stdout] test checker::threshold::tests::rule_matching_tests::path_rule_does_not_match_unrelated_path ... ok
[INFO] [stdout] test checker::threshold::tests::skip_settings_tests::get_skip_settings_from_path_rule ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::multiple_rules_winner_takes_all_warn_threshold ... ok
[INFO] [stdout] test checker::threshold::tests::skip_settings_tests::get_skip_settings_last_match_wins ... ok
[INFO] [stdout] test checker::threshold::tests::skip_settings_tests::get_skip_settings_falls_back_to_global ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::path_rule_warn_threshold_overrides_default ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::rule_warn_at_overrides_global_warn_at ... ok
[INFO] [stdout] test checker::threshold::tests::skip_settings_tests::get_skip_settings_uses_global_when_no_rule_matches ... ok
[INFO] [stdout] test checker::threshold::tests::rule_matching_tests::path_rule_matches_glob_pattern ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::rule_warn_at_takes_precedence_over_percentage_threshold ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::path_rule_without_warn_threshold_uses_default ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::path_rule_warn_threshold_overrides_extension_rule ... ok
[INFO] [stdout] test checker::threshold::tests::skip_settings_tests::language_rule_expanded_skip_settings_work ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::rule_warn_threshold_overrides_default ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::rule_without_warn_threshold_uses_default ... ok
[INFO] [stdout] test cli::tests::cli_check_default_path ... ok
[INFO] [stdout] test cli::tests::cli_check_sarif_min_level_unset_by_default ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::rule_warn_threshold_used_when_no_warn_at ... ok
[INFO] [stdout] test cli::tests::cli_check_sarif_min_level_rejects_unknown ... ok
[INFO] [stdout] test cli::tests::cli_check_with_diff ... ok
[INFO] [stdout] test cli::tests::cli_check_count_comments ... ok
[INFO] [stdout] test cli::tests::cli_check_with_config ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::warn_at_explain_shows_effective_warn_at ... ok
[INFO] [stdout] test cli::tests::cli_check_count_blank ... ok
[INFO] [stdout] test cli::tests::cli_check_warn_threshold ... ok
[INFO] [stdout] test cli::tests::cli_check_warn_only ... ok
[INFO] [stdout] test cli::tests::cli_check_sarif_min_level_parses_levels ... ok
[INFO] [stdout] test cli::tests::cli_check_with_diff_no_value ... ok
[INFO] [stdout] test cli::tests::cli_check_with_diff_range_origin ... ok
[INFO] [stdout] test cli::tests::cli_check_with_diff_range_tags ... ok
[INFO] [stdout] test cli::tests::cli_check_with_exclude ... ok
[INFO] [stdout] test cli::tests::cli_check_with_extensions ... ok
[INFO] [stdout] test cli::tests::cli_check_multi_format_output ... ok
[INFO] [stdout] test cli::tests::cli_check_with_diff_range_syntax ... ok
[INFO] [stdout] test cli::tests::cli_check_with_format ... ok
[INFO] [stdout] test cli::tests::cli_check_with_paths ... ok
[INFO] [stdout] test cli::tests::cli_check_with_staged ... ok
[INFO] [stdout] test cli::tests::cli_check_with_diff_trailing_dots ... ok
[INFO] [stdout] test cli::tests::cli_check_write_json ... ok
[INFO] [stdout] test cli::tests::cli_check_with_include ... ok
[INFO] [stdout] test cli::tests::cli_config_show ... ok
[INFO] [stdout] test cli::tests::cli_check_with_max_lines ... ok
[INFO] [stdout] test cli::tests::cli_check_write_sarif ... ok
[INFO] [stdout] test cli::tests::cli_init_with_force ... ok
[INFO] [stdout] test cli::tests::cli_init_command ... ok
[INFO] [stdout] test cli::tests::cli_global_color ... ok
[INFO] [stdout] test cli::tests::cli_stats_common_args ... ok
[INFO] [stdout] test cli::tests::cli_stats_files_default_sort ... ok
[INFO] [stdout] test cli::tests::cli_stats_files_command ... ok
[INFO] [stdout] test cli::tests::cli_stats_files_format_json ... ok
[INFO] [stdout] test cli::tests::cli_config_validate ... ok
[INFO] [stdout] test cli::tests::cli_stats_files_sort_comment ... ok
[INFO] [stdout] test cli::tests::cli_global_verbose ... ok
[INFO] [stdout] test cli::tests::cli_stats_history_command ... ok
[INFO] [stdout] test cli::tests::cli_stats_files_sort_name ... ok
[INFO] [stdout] test cli::tests::cli_stats_files_sort_total ... ok
[INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::global_warn_at_takes_precedence_over_global_percentage ... ok
[INFO] [stdout] test cli::tests::cli_stats_report_command ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::apply_baseline_comparison_does_not_mark_new_violations ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::apply_baseline_comparison_marks_failed_as_grandfathered ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::check_baseline_ratchet_detects_stale_entries ... ok
[INFO] [stdout] test cli::tests::cli_stats_report_with_config_flags ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::check_baseline_ratchet_no_stale_when_all_still_failing ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::is_structure_violation_returns_false_for_non_structure ... ok
[INFO] [stdout] test cli::tests::cli_init_with_output ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::load_baseline_none_path_returns_none ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::load_baseline_nonexistent_file_returns_error ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::apply_baseline_comparison_accepts_legacy_dot_prefixed_project_key ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::parse_structure_violation_parses_files_correctly ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::parse_structure_violation_returns_none_for_non_structure ... ok
[INFO] [stdout] test cli::tests::cli_stats_files_format_markdown ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::parse_structure_violation_parses_subdirs_correctly ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::is_structure_violation_returns_true_for_structure_violations ... ok
[INFO] [stdout] test cli::tests::cli_stats_breakdown_command ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::apply_baseline_comparison_handles_windows_paths ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::child_relative_legacy_key_does_not_grandfather_a_different_logical_path ... ok
[INFO] [stdout] test cli::tests::cli_global_quiet ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::load_baseline_valid_file_returns_baseline ... ok
[INFO] [stderr] ⚠ Warning: Failed to acquire write lock on baseline file
[INFO] [stderr]   × /tmp/.tmpMSwSVS/baseline.json: lock acquisition timed out
[INFO] [stderr]   help: baseline file save skipped
[INFO] [stdout] test cli::tests::cli_stats_summary_command ... ok
[INFO] [stdout] test cli::tests::cli_global_no_config ... ok
[INFO] [stdout] test cli::tests::cli_stats_trend_command ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::root_structure_violation_uses_dot_identity_and_can_be_grandfathered ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::ratchet_warn_succeeds_but_warns_when_outdated ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::run_check_impl_without_baseline_fails_on_violations ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::apply_cli_overrides_structure_max_files ... ok
[INFO] [stderr] ✖ Baseline: outdated - 1 violation(s) resolved but not removed
[INFO] [stderr]   × /tmp/.tmpRjHlfY/small_file.rs
[INFO] [stderr]   help: Update the baseline with --update-baseline or use --ratchet=auto
[INFO] [stdout] test commands::check::check_context_structure_tests::check_context_from_config_creates_valid_context ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::run_check_impl_with_baseline_fails_on_new_violations ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::check_context_new_allows_custom_injection ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::ratchet_auto_updates_baseline_when_outdated ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::update_baseline_mode_all_creates_baseline_with_content_violations ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::run_check_impl_with_baseline_grandfathers_violations ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::ratchet_config_works_without_cli_flag ... ok
[INFO] [stdout] test cli::tests::cli_check_output_file ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::validate_and_resolve_paths_max_files_with_path_succeeds ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::validate_and_resolve_paths_max_files_without_path_returns_error ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::validate_and_resolve_paths_no_args_defaults_to_current_dir ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::run_check_with_context_uses_injected_threshold_checker ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::run_check_with_cli_max_dirs_overrides_config ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::apply_cli_overrides_structure_max_dirs ... ok
[INFO] [stdout] test baseline::tests::save_returns_skipped_when_lock_unavailable ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::run_check_with_cli_max_files_overrides_config ... ok
[INFO] [stdout] test cli::tests::cli_stats_files_sort_blank ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::update_baseline_mode_content_only_excludes_structure ... ok
[INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_empty_returns_error ... ok
[INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_explicit_range ... ok
[INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_head_tilde ... ok
[INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_no_base_returns_error ... ok
[INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_commit_hash ... ok
[INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_tags ... ok
[INFO] [stdout] test commands::check::check_output_tests::structure_violation_to_check_result_dir_count ... ok
[INFO] [stdout] test commands::check::check_output_tests::structure_violation_to_check_result_disallowed_file ... ok
[INFO] [stdout] test commands::check::check_output_tests::structure_violation_to_check_result_naming_convention ... ok
[INFO] [stdout] test commands::check::check_processing_tests::check_result_and_file_stats_size_justifies_boxing ... ok
[INFO] [stdout] test commands::check::check_output_tests::format_output_text ... ok
[INFO] [stdout] test commands::check::check_processing_tests::compute_effective_stats_include_both ... ok
[INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_single_ref ... ok
[INFO] [stdout] test commands::check::check_processing_tests::compute_effective_stats_include_comments ... ok
[INFO] [stdout] test commands::check::check_processing_tests::compute_effective_stats_skip_both ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::update_baseline_mode_structure_only_excludes_content ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::validate_and_resolve_paths_max_dirs_without_path_returns_error ... ok
[INFO] [stdout] test commands::check::check_processing_tests::compute_effective_stats_include_blanks ... ok
[INFO] [stdout] test commands::check::check_processing_tests::process_file_nonexistent_returns_error ... ok
[INFO] [stdout] test commands::check::check_processing_tests::process_file_error_reports_logical_path ... ok
[INFO] [stdout] test commands::check::check_processing_tests::process_file_unknown_extension_returns_skipped ... ok
[INFO] [stdout] test commands::check::check_processing_tests::process_file_valid_rust_file ... ok
[INFO] [stdout] test commands::check::check_context_structure_tests::run_check_with_context_uses_injected_structure_checker ... ok
[INFO] [stdout] test commands::check::check_run_auto_snapshot_tests::auto_snapshot_config_default_is_none ... ok
[INFO] [stdout] test commands::check::check_run_auto_snapshot_tests::auto_snapshot_respects_min_interval ... ok
[INFO] [stdout] test commands::check::check_run_auto_snapshot_tests::auto_snapshot_config_parsing ... ok
[INFO] [stdout] test baseline::tests::load_succeeds_with_warning_when_exclusive_lock_held ... ok
[INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_origin_refs ... ok
[INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_trailing_dots_defaults_to_head ... ok
[INFO] [stdout] test commands::check::check_output_tests::format_output_json ... ok
[INFO] [stdout] test commands::check::check_output_tests::structure_violation_to_check_result_file_count_warning ... ok
[INFO] [stdout] test commands::check::check_output_tests::structure_violation_to_check_result_max_depth ... ok
[INFO] [stdout] test commands::check::check_output_tests::format_output_sarif_works ... ok
[INFO] [stdout] test commands::check::check_run_quiet_mode_tests::quiet_mode_failure_json_format_outputs_violations ... ok
[INFO] [stdout] test commands::check::check_run_quiet_mode_tests::quiet_mode_failure_preserves_output_to_file ... ok
[INFO] [stdout] test commands::check::check_run_quiet_mode_tests::normal_mode_success_outputs_results ... ok
[INFO] [stdout] test commands::check::check_run_exit_code_tests::run_check_returns_config_error_on_invalid_config ... ok
[INFO] [stderr] ✖ Config: line 1, column 9: key with no value, expected `=`
[INFO] [stderr]   × in /tmp/.tmpFNuupj/invalid.toml
[INFO] [stdout] test commands::check::check_run_quiet_mode_tests::quiet_mode_success_returns_zero_exit_code ... ok
[INFO] [stderr] ✖ Baseline: outdated - 1 violation(s) resolved but not removed
[INFO] [stdout] test commands::check::check_baseline_tests::ratchet_strict_fails_when_baseline_outdated ... ok
[INFO] [stderr]   × /tmp/.tmpSeiUFB/small_file.rs
[INFO] [stdout] test commands::check::check_run_quiet_mode_tests::quiet_mode_warning_preserves_output_to_file ... ok
[INFO] [stderr]   help: Update the baseline with --update-baseline or use --ratchet=auto
[INFO] [stdout] test commands::check::check_output_tests::format_output_markdown_works ... ok
[INFO] [stdout] test commands::check::check_run_quiet_mode_tests::quiet_mode_success_suppresses_output_to_file ... ok
[INFO] [stdout] test commands::check::check_run_quiet_mode_tests::normal_mode_failure_outputs_results ... ok
[INFO] [stdout] test commands::check::check_run_quiet_mode_tests::quiet_mode_failure_returns_nonzero_exit_code ... ok
[INFO] [stdout] test commands::check::check_baseline_tests::update_baseline_mode_new_preserves_existing_entries ... ok
[INFO] [stdout] test commands::check::check_run_exit_code_tests::run_check_impl_with_valid_directory ... ok
[INFO] [stdout] test commands::check::check_run_sidecar_output_tests::run_check_impl_with_report_json_creates_stats_file ... ok
[INFO] [stdout] test commands::check::check_run_sidecar_output_tests::run_check_impl_with_both_write_sarif_and_write_json ... ok
[INFO] [stdout] test commands::check::check_run_sidecar_output_tests::run_check_impl_with_write_json_creates_json_file ... ok
[INFO] [stdout] test commands::check::check_run_output_format_tests::run_check_impl_with_markdown_output ... ok
[INFO] [stdout] test commands::check::check_run_output_format_tests::run_check_impl_with_sarif_output ... ok
[INFO] [stdout] test commands::check::check_tests::apply_cli_overrides_count_blank ... ok
[INFO] [stdout] test commands::check::check_run_sidecar_output_tests::run_check_impl_without_report_json_does_not_create_file ... ok
[INFO] [stdout] test commands::check::check_run_filter_tests::run_check_impl_with_count_flags ... ok
[INFO] [stdout] test commands::check::check_run_exit_code_tests::run_check_impl_with_threshold_exceeded ... ok
[INFO] [stdout] test commands::check::check_tests::apply_cli_overrides_count_comments ... ok
[INFO] [stdout] test commands::check::check_run_sidecar_output_tests::run_check_impl_report_json_does_not_affect_exit_code ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::invalid_content_exclude_pattern ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::invalid_scanner_exclude_pattern ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::rule_warn_at_greater_than_rule_max_lines ... ok
[INFO] [stdout] test commands::check::check_tests::apply_cli_overrides_max_lines ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::rule_warn_at_less_than_rule_max_lines_is_valid ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::warn_at_equal_to_max_lines ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::warn_at_greater_than_max_lines ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::warn_at_less_than_max_lines_is_valid ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::warn_threshold_negative ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::warn_threshold_too_high ... ok
[INFO] [stdout] test commands::config::tests::content_validation_tests::warn_threshold_valid_boundaries ... ok
[INFO] [stdout] test commands::check::check_tests::apply_cli_overrides_warn_threshold ... ok
[INFO] [stdout] test commands::config::tests::file_parsing_tests::validate_config_nonexistent_file_returns_error ... ok
[INFO] [stdout] test commands::config::tests::file_parsing_tests::validate_config_invalid_toml_returns_error ... ok
[INFO] [stdout] test commands::config::tests::file_parsing_tests::validate_config_valid_full_config_with_stats_report ... ok
[INFO] [stdout] test commands::config::tests::file_parsing_tests::validate_config_valid_minimal_config ... ok
[INFO] [stdout] test commands::config::tests::show_tests::config_show_default_returns_text ... ok
[INFO] [stdout] test commands::config::tests::show_tests::config_show_json_format ... ok
[INFO] [stdout] test commands::config::tests::file_parsing_tests::validate_config_valid_full_config ... ok
[INFO] [stdout] test commands::config::tests::show_tests::config_show_from_file ... ok
[INFO] [stdout] test commands::config::tests::file_parsing_tests::validate_config_valid_full_config_with_structure ... ok
[INFO] [stdout] test commands::config::tests::show_tests::config_show_nonexistent_file_returns_error ... ok
[INFO] [stdout] test commands::config::tests::show_tests::format_config_text_hides_default_check_section ... ok
[INFO] [stdout] test commands::config::tests::show_tests::format_config_text_includes_all_sections ... ok
[INFO] [stdout] test commands::config::tests::show_tests::format_config_text_shows_sarif_opted_in_floor ... ok
[INFO] [stdout] test commands::config::tests::show_tests::format_config_text_shows_stats_report ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::breakdown_by_valid_directory ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::breakdown_by_valid_lang ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::breakdown_by_valid_language ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::exclude_case_insensitive ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::exclude_invalid_section ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::exclude_valid_values ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_invalid ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_missing_unit ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_valid ... ok
[INFO] [stdout] test commands::config::tests::show_tests::format_config_text_omits_empty_stats_report ... ok
[INFO] [stdout] test commands::config::tests::show_tests::format_config_text_shows_check_section ... ok
[INFO] [stdout] test commands::config::tests::show_tests::format_config_text_shows_sarif_default_floor ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::breakdown_by_invalid ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_valid_config ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_valid_week ... ok
[INFO] [stdout] test commands::check::check_run_filter_tests::run_check_impl_with_verbose ... ok
[INFO] [stdout] test commands::check::check_run_filter_tests::run_check_impl_with_include_paths ... ok
[INFO] [stdout] test commands::check::check_run_strict_warn_tests::run_check_impl_strict_mode_disabled_warnings_pass ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_warn_files_at_negative ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_warn_threshold_out_of_range ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::second_rule_invalid ... ok
[INFO] [stdout] test commands::check::check_run_sidecar_output_tests::run_check_impl_with_write_sarif_creates_sarif_file ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_warn_dirs_at_greater_than_max_dirs ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_dirs_at_negative ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_at_valid_less_than_max ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_at_valid_with_unlimited_max ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_files_at_equal_to_max_files ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_dirs_at_greater_than_max_dirs ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_warn_dirs_at_negative ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_files_at_greater_than_max_files ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_warn_files_at_greater_than_max_files ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_dirs_threshold_out_of_range ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_files_threshold_out_of_range ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_threshold_too_high ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_files_at_negative ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_threshold_negative ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_threshold_valid_boundaries ... ok
[INFO] [stdout] test commands::config_notice::tests::built_in_defaults_are_announced_for_interactive_text_output ... ok
[INFO] [stdout] test commands::check::check_run_output_format_tests::run_check_impl_with_json_output ... ok
[INFO] [stdout] test commands::config_notice::tests::built_in_defaults_are_hidden_for_structured_output_by_default ... ok
[INFO] [stdout] test commands::config_notice::tests::default_notice_has_actionable_text ... ok
[INFO] [stdout] test commands::config_notice::tests::disabled_configuration_never_emits_a_notice ... ok
[INFO] [stdout] test commands::config_notice::tests::file_notice_includes_the_selected_path_without_a_suggestion ... ok
[INFO] [stdout] test commands::config_notice::tests::file_sources_are_hidden_without_verbose_mode ... ok
[INFO] [stdout] test commands::config_notice::tests::built_in_defaults_are_hidden_for_non_terminal_output ... ok
[INFO] [stdout] test commands::check::check_run_sidecar_output_tests::run_check_impl_write_formats_create_parent_directories ... ok
[INFO] [stdout] test commands::config_notice::tests::preset_notices_follow_contextual_output_policy ... ok
[INFO] [stdout] test commands::config_notice::tests::preset_notice_has_actionable_text ... ok
[INFO] [stdout] test commands::config_notice::tests::quiet_mode_suppresses_defaults_even_when_verbose_and_interactive ... ok
[INFO] [stdout] test commands::config_notice::tests::verbose_mode_announces_defaults_for_non_interactive_structured_output ... ok
[INFO] [stdout] test commands::context::tests::check_config_default_false ... ok
[INFO] [stdout] test commands::context::tests::check_config_from_file ... ok
[INFO] [stdout] test commands::context::tests::cli_excludes_are_rebased_from_invocation_cwd_while_config_patterns_stay_rooted ... ok
[INFO] [stdout] test commands::context::tests::check_context_from_config_propagates_invalid_structure_pattern ... ok
[INFO] [stdout] test commands::context::tests::color_choice_to_mode_auto ... ok
[INFO] [stdout] test commands::context::tests::color_choice_to_mode_never ... ok
[INFO] [stdout] test commands::context::tests::exit_codes_documented ... ok
[INFO] [stdout] test commands::context::tests::file_process_error_display_cache_lock ... ok
[INFO] [stdout] test commands::context::tests::file_process_error_display_metadata ... ok
[INFO] [stdout] test commands::context::tests::file_process_error_display_read ... ok
[INFO] [stdout] test commands::context::tests::file_process_error_path_accessor ... ok
[INFO] [stdout] test commands::context::tests::file_process_error_source_metadata ... ok
[INFO] [stdout] test commands::context::tests::file_skip_reason_display_ignored_by_directive ... ok
[INFO] [stdout] test commands::context::tests::file_process_error_source_cache_lock ... ok
[INFO] [stdout] test commands::context::tests::color_choice_to_mode_always ... ok
[INFO] [stdout] test commands::context::tests::file_skip_reason_display_no_extension ... ok
[INFO] [stdout] test commands::context::tests::file_process_error_source_read ... ok
[INFO] [stdout] test commands::context::tests::file_skip_reason_display_unrecognized_extension ... ok
[INFO] [stdout] test commands::context::tests::load_config_no_config_returns_default ... ok
[INFO] [stdout] test commands::context::tests::load_config_rejects_invalid_content_warn_threshold_too_high ... ok
[INFO] [stdout] test commands::context::tests::load_config_rejects_warn_at_exceeds_max_lines ... ok
[INFO] [stdout] test commands::context::tests::load_config_rejects_invalid_threshold_from_extended_parent ... ok
[INFO] [stdout] test commands::context::tests::load_config_with_no_extends_returns_config_without_merging ... ok
[INFO] [stdout] test commands::context::tests::load_config_accepts_valid_config ... ok
[INFO] [stdout] test commands::context::tests::load_config_with_nonexistent_path_returns_error ... ok
[INFO] [stdout] test commands::context::tests::load_config_rejects_invalid_structure_warn_threshold ... ok
[INFO] [stdout] test commands::context::tests::load_config_rejects_invalid_content_warn_threshold_negative ... ok
[INFO] [stdout] test commands::config_notice::tests::quiet_mode_suppresses_verbose_file_source ... ok
[INFO] [stdout] test commands::context::tests::load_config_rejects_invalid_glob_pattern ... ok
[INFO] [stdout] test commands::config_notice::tests::verbose_mode_reports_every_file_source ... ok
[INFO] [stdout] test commands::context::tests::load_config_without_no_config_searches_defaults ... ok
[INFO] [stdout] test commands::context::tests::process_file_with_cache_returns_error_for_nonexistent_file ... ok
[INFO] [stdout] test commands::context::tests::real_file_reader_reads_file_contents ... ok
[INFO] [stdout] test commands::context::tests::process_file_with_cache_returns_skipped_for_no_extension ... ok
[INFO] [stdout] test commands::context::tests::read_file_with_hash_returns_content_and_hash ... ok
[INFO] [stdout] test commands::context::tests::real_file_reader_returns_error_for_nonexistent_file ... ok
[INFO] [stdout] test commands::context::tests::read_file_with_hash_returns_none_for_nonexistent ... ok
[INFO] [stdout] test commands::context::tests::resolve_scan_paths_defaults_to_current_dir ... ok
[INFO] [stdout] test commands::context::tests::resolve_scan_paths_uses_include_override ... ok
[INFO] [stdout] test commands::context::tests::write_output_creates_parent_directories ... ok
[INFO] [stdout] test commands::context::tests::write_output_normal_mode ... ok
[INFO] [stdout] test commands::context::tests::process_file_with_cache_returns_skipped_for_unrecognized_extension ... ok
[INFO] [stdout] test commands::context::tests::resolve_scan_paths_uses_cli_paths ... ok
[INFO] [stdout] test commands::context::tests::process_file_with_cache_returns_success_for_valid_file ... ok
[INFO] [stdout] test commands::context::tests::write_output_quiet_mode ... ok
[INFO] [stdout] test commands::context::tests::real_file_reader_metadata_returns_size ... ok
[INFO] [stdout] test commands::context::tests::write_output_to_file ... ok
[INFO] [stdout] test commands::detect::tests::detect_go_project ... ok
[INFO] [stdout] test commands::detect::tests::detect_java_project_gradle ... ok
[INFO] [stdout] test commands::detect::tests::detect_java_project_maven ... ok
[INFO] [stdout] test commands::detect::tests::detect_node_project ... ok
[INFO] [stdout] test commands::detect::tests::detect_python_project_pyproject ... ok
[INFO] [stdout] test commands::detect::tests::detect_python_project_requirements ... ok
[INFO] [stdout] test commands::detect::tests::detect_rust_project ... ok
[INFO] [stdout] test commands::detect::tests::detect_unknown_when_no_markers ... ok
[INFO] [stdout] test commands::detect::tests::detect_csharp_solution ... ok
[INFO] [stdout] test commands::detect::tests::detected_project_is_root ... ok
[INFO] [stdout] test commands::detect::tests::detect_csharp_project ... ok
[INFO] [stdout] test commands::detect::tests::detection_result_effective_type_monorepo_without_root ... ok
[INFO] [stdout] test commands::detect::tests::generate_config_for_java_project ... ok
[INFO] [stdout] test commands::detect::tests::detect_monorepo ... ok
[INFO] [stdout] test commands::detect::tests::generate_config_for_rust_project ... ok
[INFO] [stdout] test commands::detect::tests::generate_config_for_unknown_project ... ok
[INFO] [stdout] test commands::detect::tests::detection_result_effective_type_with_root ... ok
[INFO] [stdout] test commands::detect::tests::generate_config_for_csharp_project ... ok
[INFO] [stdout] test commands::detect::tests::generate_config_for_go_project ... ok
[INFO] [stdout] test commands::detect::tests::generate_config_for_monorepo ... ok
[INFO] [stdout] test commands::detect::tests::generate_config_for_node_project ... ok
[INFO] [stdout] test commands::detect::tests::generate_config_for_python_project ... ok
[INFO] [stdout] test commands::detect::tests::generated_config_is_valid_toml ... ok
[INFO] [stdout] test commands::context::tests::resolve_project_root_discovers_project_root ... ok
[INFO] [stdout] test commands::detect::tests::project_type_max_lines ... ok
[INFO] [stdout] test commands::detect::tests::go_priority_over_node ... ok
[INFO] [stdout] test commands::detect::tests::project_type_exclude_patterns ... ok
[INFO] [stdout] test commands::detect::tests::project_type_extensions ... ok
[INFO] [stdout] test commands::detect::tests::rust_priority_over_node ... ok
[INFO] [stdout] test commands::detect::tests::skips_excluded_directories ... ok
[INFO] [stdout] test commands::detect::tests::generated_monorepo_config_is_valid_toml ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_excluded_file ... ok
[INFO] [stdout] test commands::detect::tests::project_type_name ... ok
[INFO] [stdout] test commands::detect::tests::skips_hidden_directories ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_last_rule_wins ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_warn_at_source_global_absolute ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_warn_at_source_rule_absolute ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_warn_at_source_global_percentage ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_default_matches ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_excluded_file_json ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_rule_matches ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_excluded_file_text ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_rule_with_reason ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_json_output_is_valid ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_specific_rule_beats_general ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_text_output_contains_expected_sections ... ok
[INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_warn_at_source_rule_percentage ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_text_shows_global_absolute_source ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_text_shows_global_percentage_source ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_text_shows_rule_absolute_source_with_index ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_limit_helper_values ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_with_rule_shows_pattern ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_text_shows_rule_percentage_source_with_index ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_with_rule_reason_shows_reason ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_text_without_count_exclude_omits_section ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_json_includes_count_exclude_and_counts ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_text_shows_counts_and_count_exclude_hits ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_text_labels_directory_excluded_from_scan ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_text_output_contains_expected_sections ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_with_unlimited_shows_unlimited ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_json_distinguishes_not_scanned_from_no_hits ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_with_rule_reason_shows_reason ... ok
[INFO] [stdout] test commands::explain::tests::inventory_tests::scan_inventory_drops_gitignored_children ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_json_labels_directory_excluded_from_scan ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_json_output_is_valid ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_with_no_limits_shows_none ... ok
[INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_text_without_inventory_lists_patterns_without_hits ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::explain_non_existent_path_returns_error ... ok
[INFO] [stdout] test commands::explain::tests::inventory_tests::scan_inventory_drops_scanner_excluded_children ... ok
[INFO] [stdout] test commands::explain::tests::inventory_tests::scan_inventory_reports_pruned_directory_as_absent ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_directory_with_json_format ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_sources_json_format ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_sources_with_config_file ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_directory_with_structure_config ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_sources_no_config_with_no_extends ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_sources_with_no_config ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_with_existing_directory ... ok
[INFO] [stdout] test commands::explain_sources::tests::config_explanation_from_empty_source_chain ... ok
[INFO] [stdout] test commands::explain::tests::structure_matching_tests::explain_structure_rule_with_reason ... ok
[INFO] [stdout] test commands::explain_sources::tests::config_explanation_from_single_source ... ok
[INFO] [stdout] test commands::explain::tests::structure_matching_tests::explain_structure_rule_chain_statuses ... ok
[INFO] [stdout] test commands::explain::tests::structure_matching_tests::explain_structure_rule_matches ... ok
[INFO] [stdout] test commands::explain_sources::tests::config_explanation_tracks_multiple_field_types ... ok
[INFO] [stdout] test commands::explain_sources::tests::format_config_explanation_empty_chain ... ok
[INFO] [stdout] test commands::explain_sources::tests::format_config_explanation_json ... ok
[INFO] [stdout] test commands::explain_sources::tests::format_config_explanation_text ... ok
[INFO] [stdout] test commands::explain_sources::tests::format_config_text_with_empty_fields ... ok
[INFO] [stdout] test commands::explain_sources::tests::format_config_text_groups_fields_by_section ... ok
[INFO] [stdout] test commands::explain_sources::tests::get_nested_value_returns_correct_value ... ok
[INFO] [stdout] test commands::explain_sources::tests::get_nested_value_returns_none_for_missing_path ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::breakdown_by_case_insensitive ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::breakdown_by_valid_dir ... ok
[INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_valid_hours ... ok
[INFO] [stdout] test commands::init::tests::generate_config_template_contains_extensions ... ok
[INFO] [stdout] test commands::init::tests::generate_config_template_contains_scanner_section ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_sources_with_no_extends ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_warn_files_threshold_out_of_range ... ok
[INFO] [stdout] test commands::explain_sources::tests::config_explanation_from_inheritance_chain ... ok
[INFO] [stdout] test commands::init::tests::generate_config_template_contains_structure_section ... ok
[INFO] [stdout] test commands::init::tests::generate_config_template_excludes_git_directory ... ok
[INFO] [stdout] test commands::init::tests::run_init_creates_config_file ... ok
[INFO] [stdout] test commands::init::tests::generate_config_template_is_valid_toml ... ok
[INFO] [stdout] test commands::explain::tests::inventory_tests::scan_inventory_outside_config_root_scans_directory_as_own_root ... ok
[INFO] [stdout] test commands::init::tests::run_init_creates_parent_directories ... ok
[INFO] [stdout] test commands::init::tests::run_init_fails_if_file_exists_without_force ... ok
[INFO] [stdout] test commands::init::tests::run_init_with_detect_creates_rust_config ... ok
[INFO] [stdout] test commands::explain_sources::tests::key_fields_match_config_schema ... ok
[INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_warn_dirs_threshold_out_of_range ... ok
[INFO] [stdout] test commands::snapshot::tests::test_print_dry_run_output_would_add ... ok
[INFO] [stderr] ✖ Config: Configuration file already exists: /tmp/.tmp8n6zVH/.sloc-guard.toml. Use --force to overwrite.
[INFO] [stdout] test commands::init::tests::run_init_overwrites_with_force ... ok
[INFO] [stdout] test commands::init::tests::run_init_returns_error_exit_code_when_file_exists ... ok
[INFO] [stdout] test commands::stats::stats_collection_tests::collection_module_exports_are_accessible ... ok
[INFO] [stdout] test commands::init::tests::run_init_with_detect_handles_unknown_project ... ok
[INFO] [stdout] test commands::snapshot::tests::test_print_snapshot_summary_with_git_context ... ok
[INFO] [stdout] test commands::snapshot::tests::test_print_dry_run_output_with_git_context ... ok
[INFO] [stdout] test commands::init::tests::generate_config_template_contains_content_section ... ok
[INFO] [stdout] test commands::snapshot::tests::test_print_dry_run_output_would_skip ... ok
[INFO] [stdout] test commands::snapshot::tests::test_print_snapshot_summary ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::run_stats_history_respects_limit ... ok
[INFO] [stdout] test commands::explain_sources::tests::format_toml_value_formats_types_correctly ... ok
[INFO] [stdout] test commands::stats::stats_formatting_tests::format_stats_output_markdown_works ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::run_stats_history_with_empty_history ... ok
[INFO] [stdout] test commands::stats::stats_formatting_tests::format_stats_output_sarif_not_implemented ... ok
[INFO] [stdout] test commands::stats::stats_formatting_tests::format_stats_output_text ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_days_to_ymd_end_of_year ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_format_history_text_empty ... ok
[INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_file_with_preset_config ... ok
[INFO] [stdout] test commands::explain::tests::structure_matching_tests::explain_structure_default_matches ... ok
[INFO] [stdout] test commands::stats::stats_formatting_tests::format_stats_output_json ... ok
[INFO] [stdout] test commands::stats::stats_formatting_tests::format_stats_output_html_works ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_format_history_json_empty ... ok
[INFO] [stdout] test commands::init::tests::run_init_returns_success_exit_code ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::run_stats_history_with_existing_history ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_days_to_ymd_leap_year ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_format_history_text_no_git_context ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_format_history_text_with_entries ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_format_history_json_with_entries ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_is_leap_year_true ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_format_timestamp_basic ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::run_stats_history_with_json_format ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_format_timestamp_epoch ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_format_timestamp_leap_year ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_days_to_ymd_epoch ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::test_build_exclude_set_combines_cli_and_config ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::test_build_exclude_set_deduplicates ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::test_build_exclude_set_normalizes_case ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::test_parse_breakdown_by_dir ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::test_parse_breakdown_by_lang ... ok
[INFO] [stdout] test commands::stats::stats_history_tests::test_is_leap_year_false ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::test_parse_breakdown_by_invalid ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_uses_depth_from_config_without_cli_override ... ok
[INFO] [stderr] ⚠ Warning: --depth is only applicable with --by dir
[INFO] [stderr]   × Ignoring depth: 2
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_breakdown_depth_with_lang_shows_warning ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_exclude_sections ... ok
[INFO] [stderr] ⚠ Warning: --depth is only applicable with --breakdown-by dir
[INFO] [stderr]   × Ignoring depth: 2
[INFO] [stderr] ⚠ Warning: depth = 0 has no effect
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_depth_but_lang_breakdown ... ok
[INFO] [stderr]   × Depth 0 behaves the same as no depth limit (shows full paths)
[INFO] [stderr]   help: Use depth >= 1 for meaningful grouping (1 = top-level, 2 = two levels, etc.)
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_breakdown_by_dir_with_depth ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_depth_zero_shows_warning ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_top_count ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_subcommand ... ok
[INFO] [stderr] ✖ Config: line 1, column 9: key with no value, expected `=`
[INFO] [stderr]   × in /tmp/.tmpZCRVdj/invalid.toml
[INFO] [stderr] ⚠ Warning: depth = 0 has no effect
[INFO] [stderr]   × Depth 0 behaves the same as no depth limit (shows full paths)
[INFO] [stderr]   help: Use depth >= 1 for meaningful grouping (1 = top-level, 2 = two levels, etc.)
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_breakdown_by_dir ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_breakdown_by_lang ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_html ... ok
[INFO] [stdout] test commands::check::check_run_strict_warn_tests::run_check_impl_with_warn_only ... ok
[INFO] [stdout] test commands::check::check_run_strict_warn_tests::run_check_impl_strict_mode_fails_on_warnings ... ok
[INFO] [stdout] test commands::check::check_run_strict_warn_tests::run_check_impl_warn_only_overrides_strict ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_returns_config_error_on_invalid_config ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_breakdown_by_dir_and_depth ... ok
[INFO] [stdout] test config::expires::tests::test_date_comparison ... ok
[INFO] [stdout] test config::expires::tests::test_expires_on_boundary_date ... ok
[INFO] [stdout] test config::expires::tests::test_is_expired_at_future_date ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_breakdown_depth_zero_shows_warning ... ok
[INFO] [stdout] test config::expires::tests::test_is_expired_at_past_date ... ok
[INFO] [stdout] test config::expires::tests::test_all_rules_expired ... ok
[INFO] [stdout] test config::expires::tests::test_collect_expired_rules_with_date ... ok
[INFO] [stdout] test config::expires::tests::test_empty_rules_no_expired ... ok
[INFO] [stdout] test config::expires::tests::test_mixed_content_and_structure_expired_rules ... ok
[INFO] [stdout] test config::expires::tests::test_no_rules_expired ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_breakdown_by ... ok
[INFO] [stdout] test config::expires::tests::test_is_expired_at_same_date ... ok
[INFO] [stdout] test config::expires::tests::test_parse_invalid_month ... ok
[INFO] [stdout] test config::expires::tests::test_multiple_content_rules_mixed_expiration ... ok
[INFO] [stdout] test config::expires::tests::test_multiple_structure_rules_mixed_expiration ... ok
[INFO] [stdout] test config::expires::tests::test_parse_invalid_day ... ok
[INFO] [stdout] test config::expires::tests::test_parse_invalid_format ... ok
[INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_json ... ok
[INFO] [stdout] test config::expires::tests::test_parse_valid_date ... ok
[INFO] [stdout] test config::expires::tests::test_rules_without_expires_never_expire ... ok
[INFO] [stdout] test config::expires::tests::test_same_pattern_different_expires ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_detects_deeply_nested_marker ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_detects_marker_at_end_of_array ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_detects_nested_table_marker_in_non_first_position ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_detects_marker_in_non_first_position ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_detects_table_marker_in_array ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_detects_string_marker_in_array ... ok
[INFO] [stdout] test config::expires::tests::test_today_returns_valid_date ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_returns_false_for_array_without_markers ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_returns_false_for_simple_values ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_returns_false_for_empty_table ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_returns_false_for_typical_config ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_reset_marker_detects_first_string ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_reset_marker_ignores_later_positions ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::merge_arrays_appends_by_default ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::is_reset_element_detects_string_marker ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::is_reset_element_detects_table_with_pattern_reset ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::is_reset_element_detects_table_with_scope_reset ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::merge_arrays_empty_base_uses_child ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::is_reset_element_ignores_other_strings ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_any_reset_markers_detects_nested_marker_in_table ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::has_reset_marker_handles_empty_array ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::is_reset_element_ignores_table_without_reset ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::merge_arrays_empty_child_appends_nothing ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::merge_arrays_preserves_table_elements ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::merge_arrays_reset_with_empty_child ... ok
[INFO] [stdout] test config::loader::tests::chain_loading_tests::extends_error_on_missing_base ... ok
[INFO] [stdout] test config::loader::tests::chain_loading_tests::extends_with_relative_path ... ok
[INFO] [stdout] test config::loader::tests::cycle_detection_tests::extends_detects_self_reference ... ok
[INFO] [stdout] test config::loader::tests::depth_limit_tests::extends_chain_at_max_depth_succeeds ... ok
[INFO] [stdout] test config::loader::tests::depth_limit_tests::extends_depth_limit_error_message_is_informative ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::all_implicit_load_entry_points_share_parent_discovery ... ok
[INFO] [stdout] test config::loader::tests::depth_limit_tests::extends_respects_max_depth_limit ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::config_at_git_boundary_is_selected ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::default_loader_can_be_created ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::explicit_config_origin_is_absolute_and_normalized ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::git_directory_stops_parent_config_search ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::handles_missing_config_dir ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::implicit_and_explicit_symlink_configs_use_the_link_directory_for_extends ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::merge_arrays_reset_clears_base ... ok
[INFO] [stdout] test config::loader::tests::array_merge_tests::merge_arrays_reset_table_clears_base ... ok
[INFO] [stdout] test config::loader::tests::depth_limit_tests::extends_preset_does_not_count_toward_depth ... ok
[INFO] [stdout] test config::loader::tests::chain_loading_tests::extends_chain_works ... ok
[INFO] [stdout] test config::loader::tests::chain_loading_tests::extends_loads_base_config ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::git_file_stops_parent_config_search_before_user_fallback ... ok
[INFO] [stdout] test config::loader::tests::cycle_detection_tests::extends_detects_direct_cycle ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::loads_user_config_as_fallback ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::public_load_result_keeps_legacy_constructible_shape ... ok
[INFO] [stdout] test config::loader::tests::inheritance_order_tests::extends_child_can_override_with_same_pattern ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::nearest_project_config_wins ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::local_config_takes_priority_over_user_config ... ok
[INFO] [stdout] test config::loader::tests::inheritance_order_tests::extends_structure_rules_preserve_order ... ok
[INFO] [stdout] test config::loader::tests::inheritance_order_tests::extends_reset_then_add_preserves_child_order ... ok
[INFO] [stdout] test config::loader::tests::inheritance_order_tests::extends_preserves_rule_order_for_last_match_wins ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::loads_nearest_config_from_parent_directory ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::line_number_preserved_with_multiline_arrays ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::implicit_load_entry_points_propagate_current_directory_errors ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::returns_default_when_no_config_found ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::load_from_explicit_path ... ok
[INFO] [stdout] test config::loader::tests::inheritance_order_tests::extends_three_level_chain_preserves_rule_order ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::load_without_extends_returns_syntax_error ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::line_number_preserved_in_load_without_extends ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::returns_syntax_error_for_invalid_toml_without_extends ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::syntax_error_has_correct_line_number ... ok
[INFO] [stdout] test config::loader::tests::discovery_tests::loads_local_config_from_current_directory ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::syntax_error_includes_file_origin ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::parses_full_v2_config ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::type_error_has_precise_line_number_single_file ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::returns_error_for_nonexistent_explicit_path ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::type_error_in_content_rule_has_correct_line ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::syntax_error_includes_remote_origin ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::type_error_with_reset_marker_still_works ... ok
[INFO] [stdout] test config::loader::tests::parsing_tests::type_error_with_blank_lines_preserved ... ok
[INFO] [stdout] test config::loader::tests::preset_tests::extends_preset_loads_rust_strict ... ok
[INFO] [stdout] test config::loader::tests::preset_tests::extends_unknown_preset_returns_error ... ok
[INFO] [stdout] test config::loader::tests::reset_tests::extends_appends_content_rules ... ok
[INFO] [stdout] test config::loader::tests::preset_tests::extends_preset_child_adds_rules ... ok
[INFO] [stdout] test config::loader::tests::inheritance_order_tests::extends_mixed_content_and_structure_rules_preserve_order ... ok
[INFO] [stdout] test config::loader::tests::preset_tests::all_presets_exclude_git_directory ... ok
[INFO] [stdout] test config::loader::tests::preset_tests::extends_preset_child_overrides_preset_values ... ok
[INFO] [stdout] test config::loader::tests::reset_tests::extends_appends_structure_rules ... ok
[INFO] [stdout] test config::loader::tests::reset_tests::extends_reset_clears_structure_rules ... ok
[INFO] [stdout] test config::loader::tests::reset_tests::extends_reset_clears_parent_rules ... ok
[INFO] [stdout] test config::loader::tests::reset_tests::extends_appends_scanner_exclude ... ok
[INFO] [stdout] test config::loader::tests::reset_tests::reset_stripped_when_no_extends ... ok
[INFO] [stdout] test config::loader::tests::reset_tests::extends_reset_marker_with_extra_fields_fails ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_cycle_detection ... ok
[INFO] [stdout] test config::loader::tests::reset_tests::extends_reset_in_wrong_position_fails ... ok
[INFO] [stdout] test config::loader::tests::reset_tests::extends_reset_clears_scanner_exclude ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_depth_limit ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_extends_preserves_order ... ok
[INFO] [stdout] test config::loader::tests::preset_tests::extends_preset_all_available_presets_work ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_with_sources_extends_chain_tracks_all_sources ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_with_sources_no_config_returns_empty_chain ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_with_sources_local_config_only ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::source_chain_contains_raw_toml_values ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_with_sources_preset_tracks_preset_source ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_preset_chain ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::deny_file_patterns_alias_accepted_by_strict_schema ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::source_chain_each_source_has_own_values ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::sourced_config_remote_variant_works_in_chain ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::load_without_extends_rejects_unknown_field ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::merge_artifact_schema_error_is_marked_as_merged_config ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::partial_configs_across_extends_chain_still_load ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::preset_with_partial_user_config_still_loads ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::rule_count_exclude_accepted_by_loader ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::unknown_field_in_config_extending_preset_names_user_file ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::unknown_field_in_structure_rule_rejected_by_loader ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::unknown_field_reports_origin_and_line ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::unknown_field_in_extends_base_names_base_file ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::unknown_field_in_extends_child_names_child_file ... ok
[INFO] [stdout] test config::loader::tests::version_tests::config_with_v1_version_returns_error ... ok
[INFO] [stdout] test config::loader::tests::version_tests::config_with_valid_version_loads_successfully ... ok
[INFO] [stdout] test config::loader::tests::strict_schema_tests::unknown_field_with_reset_markers_reports_origin ... ok
[INFO] [stdout] test config::loader::tests::version_tests::config_with_unsupported_version_returns_error ... ok
[INFO] [stdout] test config::loader::tests::without_extends_tests::load_without_extends_ignores_extends_field ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::check_config_has_expected_defaults ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_check_section ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_check_section_default ... ok
[INFO] [stdout] test config::loader::tests::version_tests::config_without_version_loads_successfully ... ok
[INFO] [stdout] test config::loader::tests::without_extends_tests::load_from_path_without_extends_ignores_extends ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_rule_with_warn_threshold ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_check_section_partial ... ok
[INFO] [stdout] test config::loader::tests::without_extends_tests::load_without_extends_falls_back_to_user_config ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_v2_format ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_missing_file_returns_error ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_relative_extends ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_with_version ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_single_file ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_with_content_rules ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_rule_without_warn_threshold ... ok
[INFO] [stdout] test config::loader::tests::source_tracking_tests::load_with_sources_user_config_fallback ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_without_version ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_serialize_roundtrip ... ok
[INFO] [stdout] test config::model::model_tests::language_config_tests::config_empty_languages_by_default ... ok
[INFO] [stdout] test config::model::model_tests::language_config_tests::custom_language_config_default_values ... ok
[INFO] [stdout] test config::model::model_tests::sarif_config_tests::config_default_sarif_min_level_is_error ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::content_config_has_expected_defaults ... ok
[INFO] [stdout] test config::model::model_tests::sarif_config_tests::config_sarif_empty_section_uses_default_floor ... ok
[INFO] [stdout] test config::model::model_tests::language_config_tests::config_deserialize_multiple_custom_languages ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_version_defaults_to_none ... ok
[INFO] [stdout] test config::model::model_tests::sarif_config_tests::config_sarif_min_level_note_emits_everything ... ok
[INFO] [stdout] test config::model::model_tests::sarif_config_tests::config_sarif_min_level_opt_in_to_warning ... ok
[INFO] [stdout] test config::model::model_tests::sarif_config_tests::sarif_config_default_floor_is_error ... ok
[INFO] [stdout] test config::model::model_tests::scanner_config_tests::config_deserialize_with_explicit_scanner_exclude_replaces_default ... ok
[INFO] [stdout] test config::model::model_tests::sarif_config_tests::config_without_sarif_section_defaults_to_error_floor ... ok
[INFO] [stdout] test config::model::model_tests::scanner_config_tests::config_default_scanner_excludes_git ... ok
[INFO] [stdout] test config::model::model_tests::scanner_config_tests::config_deserialize_without_scanner_uses_git_exclude_default ... ok
[INFO] [stdout] test config::model::model_tests::scanner_config_tests::scanner_config_default_excludes_git_directory ... ok
[INFO] [stdout] test config::model::model_tests::content_config_tests::config_version_constant_is_two ... ok
[INFO] [stdout] test config::model::model_tests::scanner_config_tests::config_deserialize_scanner_exclude_with_git ... ok
[INFO] [stdout] test config::model::model_tests::language_config_tests::config_deserialize_custom_language ... ok
[INFO] [stdout] test config::model::model_tests::sarif_config_tests::config_sarif_min_level_rejects_unknown_value ... ok
[INFO] [stdout] test config::model::model_tests::scanner_config_tests::scanner_config_default_gitignore_enabled ... ok
[INFO] [stdout] test config::model::model_tests::stats_config_tests::config_deserialize_stats_report_depth_only ... ok
[INFO] [stdout] test config::model::model_tests::stats_config_tests::config_has_default_stats_config ... ok
[INFO] [stdout] test config::model::model_tests::stats_config_tests::config_deserialize_stats_with_other_sections ... ok
[INFO] [stdout] test config::model::model_tests::stats_config_tests::config_deserialize_stats_report_exclude_only ... ok
[INFO] [stdout] test config::model::model_tests::stats_config_tests::config_deserialize_stats_report_partial ... ok
[INFO] [stdout] test config::model::model_tests::stats_config_tests::config_serialize_includes_stats ... ok
[INFO] [stdout] test config::model::model_tests::stats_config_tests::config_deserialize_stats_report_section ... ok
[INFO] [stdout] test config::model::model_tests::stats_config_tests::stats_config_default_all_empty ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::custom_language_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::content_rule_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::content_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::stats_report_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::stats_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::check_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::top_level_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::sarif_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::top_level_unknown_table_rejected ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_rule_deny_file_patterns_alias ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_deny_files ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_deny_dirs ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_all_deny_types ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_deny_files_and_dirs_combined ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_global_limits ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_only_rules ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_rule_deny_dirs ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_rule_deny_files ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_rule_deny_files_and_dirs ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_rule_warn_threshold ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_warn_threshold ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_structure_default_empty ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_structure_with_rules ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::rule_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::rule_count_exclude_defaults_to_empty ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::rule_count_exclude_deserializes ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_require_accepts_string_and_array ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_require_rejects_array_of_non_strings ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_rule_ambiguous_match_and_group_rejected ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_require_rejects_integer ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_require_rejects_table ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_rule_directed_missing_match_rejected ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_rule_directed_missing_require_rejected ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_rule_group_deserialize ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_rule_empty_rejected ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::structure_config_default_values ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_rule_directed_deserialize ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::structure_config_deny_files_default_empty ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::sibling_rule_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::structure_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::config_deserialize_auto_snapshot_on_check_false ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::structure_config_warn_threshold_default_none ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::config_deserialize_auto_snapshot_on_check ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::config_deserialize_trend_partial ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::config_deserialize_trend_with_auto_snapshot ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::config_has_default_trend_config ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::config_serialize_auto_snapshot_on_check ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::config_serialize_includes_trend ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::trend_config_default_all_none ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::config_deserialize_trend_with_other_sections ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::config_deserialize_trend_section ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::trend_config_roundtrip_serialization ... ok
[INFO] [stdout] test config::model::model_tests::trend_config_tests::trend_config_equality ... ok
[INFO] [stdout] test config::parse::tests::finalize_merged_config_attributes_misplaced_reset_marker ... ok
[INFO] [stdout] test config::parse::tests::finalize_merged_config_marks_schema_errors_as_merged ... ok
[INFO] [stdout] test config::parse::tests::finalize_merged_config_rejects_unsupported_version ... ok
[INFO] [stdout] test config::parse::tests::finalize_merged_config_parses_and_accepts_current_version ... ok
[INFO] [stdout] test config::parse::tests::parse_source_accepts_bare_reset_marker_element ... ok
[INFO] [stdout] test config::parse::tests::parse_source_rejects_misplaced_reset_marker_with_origin ... ok
[INFO] [stdout] test config::parse::tests::parse_source_returns_value_and_config ... ok
[INFO] [stdout] test config::parse::tests::parse_source_rejects_reset_marker_element_with_real_field ... ok
[INFO] [stdout] test config::parse::tests::parse_source_rejects_reset_marker_element_with_typo_field ... ok
[INFO] [stdout] test config::parse::tests::parse_source_strips_reset_markers_from_config_only ... ok
[INFO] [stdout] test config::parse::tests::parse_source_unknown_field_reports_origin_and_line ... ok
[INFO] [stdout] test config::parse::tests::parse_source_syntax_error_carries_origin ... ok
[INFO] [stdout] test config::parse::tests::parse_source_unknown_field_detected_alongside_reset_markers ... ok
[INFO] [stdout] test config::parse::tests::validate_version_accepts_missing_and_current ... ok
[INFO] [stdout] test config::parse::tests::validate_version_rejects_other_versions ... ok
[INFO] [stdout] test config::presets::tests::all_presets_have_version_2 ... ok
[INFO] [stdout] test config::presets::tests::all_presets_have_required_sections ... ok
[INFO] [stdout] test config::presets::tests::available_presets_constant_matches_load_preset ... ok
[INFO] [stdout] test config::presets::tests::load_go_strict_preset ... ok
[INFO] [stdout] test config::presets::tests::load_monorepo_base_preset ... ok
[INFO] [stdout] test config::presets::tests::load_node_strict_preset ... ok
[INFO] [stdout] test config::presets::tests::load_move_strict_preset ... ok
[INFO] [stdout] test config::presets::tests::load_python_strict_preset ... ok
[INFO] [stdout] test config::presets::tests::load_rust_strict_preset ... ok
[INFO] [stdout] test config::presets::tests::unknown_preset_returns_error ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::cache_exists_returns_false_for_nonexistent_file ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::cache_file_path_different_urls_produce_different_paths ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::cache_file_path_includes_url_hash ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::clear_cache_removes_cached_files ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::clear_cache_returns_zero_when_no_project_root ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::cache_dir_structure_matches_expected ... ok
[INFO] [stdout] test config::model::model_tests::stats_config_tests::stats_report_config_roundtrip_serialization ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::baseline_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::scanner_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::strict_fields_tests::trend_unknown_field_rejected ... ok
[INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_deny_file_patterns_alias ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::is_cache_within_ttl_returns_false_for_nonexistent_file ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::read_from_cache_returns_none_when_no_project_root ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::cache_dir_returns_path_with_project_root ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_remote_config_rejects_invalid_url ... ok
[INFO] [stderr] ⚠ Warning: Fetching remote config from https://mock-test-error.example.com/config.toml
[INFO] [stdout] test config::remote::tests::extends_origin_tests::unknown_field_in_remote_extends_source_reports_remote_origin ... ok
[INFO] [stderr]   help: Consider using --extends-policy=offline or extends_sha256 for reproducible builds
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_remote_config_rejects_non_http_scheme ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::write_to_cache_and_read_back ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_ftp_url_never_calls_client ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_error ... ok
[INFO] [stdout] test config::remote::tests::cache_tests::is_cache_within_ttl_returns_true_for_fresh_file ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_http_404_error ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_http_500_error ... ok
[INFO] [stdout] test config::remote::tests::extends_origin_tests::relative_extends_in_remote_source_names_the_url ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_invalid_url_never_calls_client ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_http_url_accepted ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_network_error ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_timeout_error ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::compute_content_hash_different_for_different_content ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::compute_content_hash_produces_64_char_hex ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::reqwest_client_can_be_instantiated ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::compute_content_hash_produces_consistent_hash ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_uses_cache_on_second_call ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::hash_verification_offline_mode_fails_on_mismatch ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::hash_verification_offline_mode_success ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::hash_verification_with_cached_content_fails_on_mismatch ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::hash_verification_with_cached_content_success ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::hash_mismatch_on_both_cache_and_remote_fails ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::hash_verification_fails_on_mismatch ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::hash_not_required_when_none ... ok
[INFO] [stdout] test config::remote::tests::hash_verification_tests::hash_verification_success_on_match ... ok
[INFO] [stderr] ⚠ Warning: Fetching remote config from https://mock-test-warning-cache.example.com/config.toml
[INFO] [stderr]   help: Consider using --extends-policy=offline or extends_sha256 for reproducible builds
[INFO] [stderr] ⚠ Warning: Fetching remote config from https://mock-test-warning-once-1.example.com/config.toml
[INFO] [stderr]   help: Consider using --extends-policy=offline or extends_sha256 for reproducible builds
[INFO] [stderr] ⚠ Warning: Fetching remote config from https://mock-test-warning.example.com/config.toml
[INFO] [stderr]   help: Consider using --extends-policy=offline or extends_sha256 for reproducible builds
[INFO] [stdout] test config::remote::tests::policy_tests::offline_mode_rejects_invalid_url ... ok
[INFO] [stdout] test config::remote::tests::policy_tests::offline_mode_returns_error_without_project_root ... ok
[INFO] [stdout] test config::remote::tests::policy_tests::offline_mode_returns_cached_content ... ok
[INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_success ... ok
[INFO] [stdout] test config::remote::tests::url_tests::hash_url_handles_special_characters ... ok
[INFO] [stdout] test config::remote::tests::url_tests::hash_url_produces_consistent_hash ... ok
[INFO] [stdout] test config::remote::tests::url_tests::hash_url_produces_different_hashes_for_different_urls ... ok
[INFO] [stdout] test config::remote::tests::url_tests::hash_url_produces_hex_string ... ok
[INFO] [stdout] test config::remote::tests::url_tests::is_remote_url_detects_https ... ok
[INFO] [stdout] test config::remote::tests::url_tests::is_remote_url_rejects_empty_string ... ok
[INFO] [stdout] test config::remote::tests::url_tests::is_remote_url_rejects_other_schemes ... ok
[INFO] [stdout] test config::remote::tests::warning_tests::warning_flag_initially_false ... ok
[INFO] [stdout] test config::remote::tests::warning_tests::warning_not_shown_when_cache_hit ... ok
[INFO] [stdout] test config::remote::tests::policy_tests::offline_mode_returns_error_on_cache_miss ... ok
[INFO] [stdout] test config::remote::tests::url_tests::is_remote_url_detects_http ... ok
[INFO] [stdout] test config::remote::tests::url_tests::is_remote_url_rejects_local_paths ... ok
[INFO] [stdout] test config::remote::tests::policy_tests::offline_mode_ignores_ttl ... ok
[INFO] [stdout] test config::remote::tests::warning_tests::warning_shown_only_once_per_session ... ok
[INFO] [stdout] test config::tests::config_default_values ... ok
[INFO] [stdout] test config::validation::tests::test_invalid_warn_threshold_rejected ... ok
[INFO] [stdout] test config::validation::tests::test_valid_config_passes_validation ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::comment_marker_at_various_positions ... ok
[INFO] [stdout] test config::validation::tests::test_warn_at_greater_than_max_lines_rejected ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::comment_marker_split_by_whitespace ... ok
[INFO] [stdout] test config::remote::tests::warning_tests::warning_shown_on_first_remote_fetch ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::detect_python_single_line_comment ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::detect_rust_single_line_comment ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::empty_needle_returns_none ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::html_comment_style ... ok
[INFO] [stdout] test config::remote::tests::url_tests::is_remote_url_rejects_partial_schemes ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::line_is_just_comment_marker ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::multiple_comment_styles_match_by_position_not_definition_order ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::multiple_different_comment_styles_first_defined_wins ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::partial_comment_marker_not_matched ... ok
[INFO] [stdout] test counter::comment::tests::edge_case_tests::alternating_quote_types ... ok
[INFO] [stdout] test counter::comment::tests::edge_case_tests::apostrophe_in_identifier ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::detect_multi_line_comment_start ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::detect_python_docstring_start ... ok
[INFO] [stdout] test config::remote::tests::policy_tests::force_refresh_skips_cache ... ok
[INFO] [stdout] test config::tests::config_has_v2_sections ... ok
[INFO] [stdout] test counter::comment::tests::detection_tests::detect_multi_line_comment_end ... ok
[INFO] [stdout] test counter::comment::tests::edge_case_tests::consecutive_backslash_escape_sequences ... ok
[INFO] [stdout] test counter::comment::tests::edge_case_tests::deeply_escaped_quote_chain ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_comment_marker_looks_like_array_access ... ok
[INFO] [stdout] test counter::comment::tests::edge_case_tests::quote_in_char_does_not_start_string ... ok
[INFO] [stdout] test counter::comment::tests::edge_case_tests::string_with_backslash_at_end ... ok
[INFO] [stdout] test config::remote::tests::policy_tests::force_refresh_updates_cache ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_double_dash_not_multiline_start ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_high_level_end_detection ... ok
[INFO] [stdout] test counter::comment::tests::edge_case_tests::unicode_in_string_before_comment ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_level_1_end_detection ... ok
[INFO] [stdout] test counter::comment::tests::edge_case_tests::comment_in_char_literal_sequence ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_level_10 ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_level_1_basic ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_level_20 ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_level_mismatch_high_levels ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_long_string_not_comment ... ok
[INFO] [stdout] test counter::comment::tests::nested_comment_tests::rust_nested_block_comment_limitation_counting ... ok
[INFO] [stdout] test counter::comment::tests::nested_comment_tests::nested_comment_markers_not_supported ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_level_mismatch_not_closed ... ok
[INFO] [stdout] test counter::comment::tests::nested_comment_tests::rust_nested_block_comment_limitation_simple ... ok
[INFO] [stdout] test counter::comment::tests::nested_comment_tests::swift_nested_comment_nesting_detection ... ok
[INFO] [stdout] test counter::comment::tests::python_docstring_tests::python_empty_triple_quote_string ... ok
[INFO] [stdout] test counter::comment::tests::python_docstring_tests::python_single_line_docstring_with_nested_quotes ... ok
[INFO] [stdout] test counter::comment::tests::python_docstring_tests::python_triple_double_quote_with_single_quotes_inside ... ok
[INFO] [stdout] test counter::comment::tests::python_docstring_tests::python_triple_quote_followed_by_comment ... ok
[INFO] [stdout] test counter::comment::tests::nested_comment_tests::comment_marker_after_nested_pattern ... ok
[INFO] [stdout] test counter::comment::tests::python_docstring_tests::python_triple_quote_with_mixed_quotes ... ok
[INFO] [stdout] test counter::comment::tests::nested_comment_tests::nested_comment_in_sloc_counting ... ok
[INFO] [stdout] test counter::comment::tests::nested_comment_tests::rust_nested_comment_depth_two ... ok
[INFO] [stdout] test counter::comment::tests::python_docstring_tests::python_triple_quote_with_single_nested_same_quote ... ok
[INFO] [stdout] test counter::comment::tests::python_docstring_tests::python_triple_quote_with_two_nested_same_quotes ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_byte_raw_string ... ok
[INFO] [stdout] test counter::comment::tests::nested_comment_tests::rust_nested_comment_only_opener_in_line ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_comment_inside_detected_wrongly ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_multiple_raw_strings_on_line ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_raw_string_spanning_affects_subsequent_code ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_real_comment_after_raw_string ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_triple_quote_inside_raw_string ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_markers ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_multiline_comment_detection ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_limitation ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_unbalanced_quote_comparison ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_followed_by_real_comment ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_level_0_no_hashes ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_misparse_odd_quotes_shifts_string_boundaries ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_misparse_triple_quote_inside ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_misparse_unbalanced_quote_false_negative ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_misparse_unbalanced_quote_false_positive ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_proper_support_when_enabled ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_proper_support_with_real_comment ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_with_embedded_quote_and_comment_marker ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_with_escaped_sequences ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_with_single_unbalanced_quote ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_with_unbalanced_double_quote ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_level_2_two_hashes ... ok
[INFO] [stdout] test counter::comment::tests::ruby_tests::ruby_multiline_comment_detection ... ok
[INFO] [stdout] test counter::comment::tests::ruby_tests::ruby_comment_marker_requires_line_start ... ok
[INFO] [stdout] test counter::comment::tests::sql_tests::sql_dash_dash_vs_decrement ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::char_literal_with_comment_marker ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_works_by_coincidence_balanced_quotes ... ok
[INFO] [stdout] test counter::comment::tests::ruby_tests::ruby_comment_marker_in_string ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::comment_end_marker_in_string ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::comment_marker_immediately_after_quote ... ok
[INFO] [stdout] test counter::comment::tests::sql_tests::sql_comment_in_string ... ok
[INFO] [stdout] test counter::comment::tests::python_docstring_tests::python_triple_single_quote_with_double_quotes_inside ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::comment_marker_inside_string_is_not_detected ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::division_operator_not_comment ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::escaped_backslash_before_quote ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::mixed_quotes_char_and_string ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::multiple_strings_on_one_line ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::regex_with_comment_markers ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::first_comment_marker_in_string_second_outside ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::glob_pattern_star_star_slash ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::string_immediately_followed_by_comment ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::template_literal_style_string_edge_case ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::unicode_before_comment_marker ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::url_in_code ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_code_only ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_empty_source ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_mixed_content ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::escaped_quote_inside_string_handled ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::empty_string_edge_cases ... ok
[INFO] [stdout] test counter::comment::tests::string_context_tests::single_quote_in_double_quoted_string ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_raw_string_with_backslash_quote ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_reader_produces_same_result_as_count ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_reader_empty_input ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_with_blank_lines ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_with_doc_comments ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_with_multi_line_comment ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_with_single_line_comments ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_with_single_line_multi_comment ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::line_stats_default ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::line_stats_ignored_default ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::line_stats_new_has_zero_ignored ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::sloc_returns_code_count ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::count_reader_ignore_block ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_block_no_end_ignores_rest_of_file ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_block_python_style ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_block_skips_lines_between_markers ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_block_empty ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_reader_with_multi_line_comment ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_block_with_comments_inside ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_block_with_blank_lines ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_next_then_ignore_block ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::multiple_ignore_blocks ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_after_line_10_not_ignored ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_first_line_rust ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_in_multi_line_comment_not_recognized ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_python_style ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_not_in_comment_ignored ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_reader ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_with_doc_comment ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_with_extra_text ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_with_leading_whitespace ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_within_first_10_lines ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::no_ignore_directive_returns_stats ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::count_reader_ignore_next ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_block_with_extra_text ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_more_than_remaining_lines ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_one_line ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_skips_specified_lines ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_with_extra_text ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_with_invalid_number ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_without_number_ignored ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_zero_ignores_nothing ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::multiple_ignore_next_directives ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_extended_bracket_in_ignore_block ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_python_style ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_extended_bracket_multiline ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_level_0_bracket_single_line ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_static_syntax_multiline_works ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_deeply_nested_comment_depth_10 ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_extended_bracket_wrong_end_not_closed ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_extended_bracket_single_line ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_deeply_nested_comment_depth_10_multiline ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_deeply_nested_unbalanced_more_opens ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_fake_nested_comment_in_string ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_level_0_bracket_multiline ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_nested_comment_markers_first_close_wins ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_rust_nested_comment_closes_correctly ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_rust_nested_comment_depth_two ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_nested_comment_multiline ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_nested_vs_non_nested_comparison ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_rust_nested_comment_multiline_properly_tracked ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_rust_nested_comment_simple ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_rust_nested_comment_unbalanced_more_opens ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_rapid_open_close_sequence ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::python_tests::sloc_python_docstring_with_two_adjacent_quotes ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::python_tests::sloc_python_triple_quote_multiline_with_quotes ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::python_tests::sloc_python_triple_quote_with_nested_double_quotes ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::python_tests::sloc_python_triple_quote_with_nested_single_quotes ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::comment_end_marker_in_string_not_closing_comment ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::doc_comment_markers_in_string ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::glob_pattern_followed_by_real_comment ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::python_tests::sloc_python_empty_docstring ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::glob_pattern_in_string_not_treated_as_comment ... ok
[INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_works_by_coincidence_comment_inside ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_extended_bracket_level_2 ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::python_tests::sloc_python_mixed_docstring_and_code ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::mixed_real_and_fake_comments ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::multiple_glob_patterns_in_strings ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::python_tests::sloc_python_triple_quote_docstring ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_extended_bracket_spanning_ignore_block ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::multiple_single_line_comment_markers_in_strings ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::single_line_comment_marker_in_string_with_trailing_comment ... ok
[INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_level_2 ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::python_hash_comment_in_string_is_code ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::sloc_raw_string_simple ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::sloc_raw_string_with_comment_like_pattern ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::sloc_raw_string_with_quotes_inside ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::realistic_test_file_with_glob_patterns ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::sloc_raw_string_multiline_delimiter ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::regex_with_comment_markers_in_string ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::url_in_string_not_treated_as_comment ... ok
[INFO] [stdout] test error::tests::config_source_tests::file_display ... ok
[INFO] [stdout] test error::tests::config_source_tests::constructors ... ok
[INFO] [stdout] test error::tests::config_source_tests::remote_display ... ok
[INFO] [stdout] test error::tests::config_source_tests::preset_display ... ok
[INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::single_line_comment_marker_in_string_is_code ... ok
[INFO] [stdout] test error::tests::extends_tests::circular_extends_detail ... ok
[INFO] [stdout] test counter::tests::counter_integration_with_language ... ok
[INFO] [stdout] test error::tests::extends_tests::circular_extends_message ... ok
[INFO] [stdout] test error::tests::extends_tests::circular_extends_suggestion ... ok
[INFO] [stdout] test error::tests::extends_tests::circular_extends_display ... ok
[INFO] [stdout] test error::tests::extends_tests::circular_extends_error_type ... ok
[INFO] [stdout] test error::tests::extends_tests::extends_resolution_display ... ok
[INFO] [stdout] test error::tests::extends_tests::extends_resolution_error_type ... ok
[INFO] [stdout] test error::tests::extends_tests::extends_resolution_message ... ok
[INFO] [stdout] test error::tests::extends_tests::extends_resolution_suggestion ... ok
[INFO] [stdout] test error::tests::extends_tests::extends_too_deep_detail ... ok
[INFO] [stdout] test error::tests::extends_tests::extends_too_deep_display ... ok
[INFO] [stdout] test error::tests::extends_tests::extends_too_deep_error_type ... ok
[INFO] [stdout] test error::tests::extends_tests::extends_too_deep_message ... ok
[INFO] [stdout] test error::tests::extends_tests::extends_too_deep_suggestion ... ok
[INFO] [stdout] test error::tests::extends_tests::remote_config_hash_mismatch_detail ... ok
[INFO] [stdout] test error::tests::git_tests::git_error_type ... ok
[INFO] [stdout] test error::tests::git_tests::git_repo_not_found_display ... ok
[INFO] [stdout] test error::tests::git_tests::git_repo_not_found_error_type ... ok
[INFO] [stdout] test error::tests::git_tests::git_suggestion ... ok
[INFO] [stdout] test error::tests::io_tests::file_access_detail ... ok
[INFO] [stdout] test error::tests::git_tests::git_message ... ok
[INFO] [stdout] test error::tests::io_tests::file_access_error_type ... ok
[INFO] [stdout] test error::tests::git_tests::git_display ... ok
[INFO] [stdout] test error::tests::io_tests::file_access_message ... ok
[INFO] [stdout] test error::tests::extends_tests::remote_config_hash_mismatch_suggestion ... ok
[INFO] [stdout] test error::tests::io_tests::file_access_display ... ok
[INFO] [stdout] test error::tests::io_tests::file_access_suggestion_permission_denied ... ok
[INFO] [stdout] test error::tests::io_tests::io_detail_includes_path_operation_and_kind ... ok
[INFO] [stdout] test error::tests::io_tests::file_access_suggestion_not_found ... ok
[INFO] [stdout] test error::tests::io_tests::file_access_suggestion_invalid_data ... ok
[INFO] [stdout] test error::tests::io_tests::io_detail_without_context_shows_kind ... ok
[INFO] [stdout] test error::tests::io_tests::io_error_type ... ok
[INFO] [stdout] test error::tests::io_tests::io_from_conversion_preserves_error ... ok
[INFO] [stdout] test error::tests::io_tests::io_suggestion_connection_refused ... ok
[INFO] [stdout] test error::tests::io_tests::io_suggestion_connection_reset ... ok
[INFO] [stdout] test error::tests::io_tests::io_display_with_path_only ... ok
[INFO] [stdout] test error::tests::io_tests::io_suggestion_invalid_data ... ok
[INFO] [stdout] test error::tests::io_tests::file_access_suggestion_other_error_has_none ... ok
[INFO] [stdout] test error::tests::io_tests::io_suggestion_not_found ... ok
[INFO] [stdout] test error::tests::io_tests::io_suggestion_other_has_none ... ok
[INFO] [stdout] test error::tests::io_tests::io_without_context_shows_error_only ... ok
[INFO] [stdout] test error::tests::io_tests::json_serialize_suggestion ... ok
[INFO] [stdout] test error::tests::pattern_tests::detail ... ok
[INFO] [stdout] test error::tests::pattern_tests::display ... ok
[INFO] [stdout] test error::tests::pattern_tests::message ... ok
[INFO] [stdout] test error::tests::io_tests::io_suggestion_timeout ... ok
[INFO] [stdout] test error::tests::pattern_tests::suggestion ... ok
[INFO] [stdout] test error::tests::semantic_tests::config_detail_none ... ok
[INFO] [stdout] test error::tests::io_tests::io_with_context_includes_path_and_operation ... ok
[INFO] [stdout] test error::tests::semantic_tests::config_display ... ok
[INFO] [stdout] test error::tests::io_tests::io_suggestion_permission_denied ... ok
[INFO] [stdout] test error::tests::semantic_tests::config_suggestion ... ok
[INFO] [stdout] test error::tests::semantic_tests::semantic_display ... ok
[INFO] [stdout] test error::tests::semantic_tests::semantic_display_without_origin ... ok
[INFO] [stdout] test error::tests::semantic_tests::semantic_error_type ... ok
[INFO] [stdout] test error::tests::semantic_tests::semantic_message ... ok
[INFO] [stdout] test error::tests::semantic_tests::semantic_suggestion_from_field ... ok
[INFO] [stdout] test error::tests::semantic_tests::semantic_suggestion_none ... ok
[INFO] [stdout] test error::tests::io_tests::io_with_path_includes_path_in_message ... ok
[INFO] [stdout] test error::tests::syntax_tests::span_at_newline ... ok
[INFO] [stdout] test error::tests::syntax_tests::span_beyond_content ... ok
[INFO] [stdout] test error::tests::syntax_tests::span_middle_of_first_line ... ok
[INFO] [stdout] test error::tests::syntax_tests::span_multiline_config ... ok
[INFO] [stdout] test error::tests::syntax_tests::span_second_line ... ok
[INFO] [stdout] test error::tests::syntax_tests::span_third_line_middle ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_detail_with_origin ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_detail_without_origin ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_display_with_remote_origin ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_display_with_origin ... ok
[INFO] [stdout] test error::tests::git_tests::git_repo_not_found_suggestion ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_display_without_origin ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_from_toml_extracts_location ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_from_toml_without_origin ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_message ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_suggestion ... ok
[INFO] [stdout] test error::tests::type_mismatch_tests::detail_with_origin ... ok
[INFO] [stdout] test error::tests::semantic_tests::config_message ... ok
[INFO] [stdout] test error::tests::semantic_tests::config_error_type ... ok
[INFO] [stdout] test error::tests::type_mismatch_tests::display ... ok
[INFO] [stdout] test error::tests::syntax_tests::span_empty_content ... ok
[INFO] [stdout] test error::tests::type_mismatch_tests::error_type ... ok
[INFO] [stdout] test error::tests::type_mismatch_tests::message ... ok
[INFO] [stdout] test error::tests::type_mismatch_tests::suggestion ... ok
[INFO] [stdout] test git::context::tests::git_context_detached_head ... ok
[INFO] [stdout] test error::tests::io_tests::io_display_with_full_context ... ok
[INFO] [stdout] test error::tests::syntax_tests::span_first_line ... ok
[INFO] [stdout] test error::tests::type_mismatch_tests::display_without_origin ... ok
[INFO] [stdout] test error::tests::syntax_tests::syntax_error_type ... ok
[INFO] [stdout] test git::context::tests::git_context_fields ... ok
[INFO] [stdout] test git::context::tests::git_context_from_non_repo ... ok
[INFO] [stdout] test git::tests::changed_files_detects_deleted_file ... ok
[INFO] [stdout] test git::tests::changed_files_empty_when_no_changes ... ok
[INFO] [stdout] test git::tests::changed_files_detects_file_to_directory_change ... ok
[INFO] [stdout] test git::tests::changed_files_detects_modified_file ... ok
[INFO] [stdout] test git::tests::changed_files_handles_nested_directory_addition ... ok
[INFO] [stdout] test git::tests::changed_files_detects_directory_to_file_change ... ok
[INFO] [stdout] test git::tests::changed_files_range_invalid_ref_returns_error ... ok
[INFO] [stdout] test git::tests::changed_files_detects_added_file ... ok
[INFO] [stdout] test git::context::tests::git_context_from_current_repo ... FAILED
[INFO] [stdout] test git::tests::changed_files_range_between_tags ... ok
[INFO] [stdout] test git::tests::changed_files_invalid_reference_returns_error ... ok
[INFO] [stdout] test git::tests::changed_files_handles_nested_directory_deletion ... ok
[INFO] [stdout] test git::tests::discover_fails_for_non_git_directory ... ok
[INFO] [stdout] test git::tests::changed_files_range_same_ref_returns_empty ... ok
[INFO] [stdout] test git::tests::changed_files_range_matches_trait_behavior ... ok
[INFO] [stdout] test git::tests::changed_files_range_between_branches ... ok
[INFO] [stdout] test git::tests::changed_files_skips_deleted_file_not_on_disk ... ok
[INFO] [stdout] test git::tests::discover_finds_git_repo ... ok
[INFO] [stdout] test git::tests::changed_files_handles_subdirectory ... ok
[INFO] [stdout] test language::registry::tests::comment_syntax_construction ... ok
[INFO] [stdout] test git::tests::workdir_returns_correct_path ... ok
[INFO] [stdout] test language::registry::tests::custom_language_adds_new_extension ... ok
[INFO] [stdout] test language::registry::tests::custom_language_overrides_builtin ... ok
[INFO] [stdout] test language::registry::tests::default_registry_has_java ... ok
[INFO] [stdout] test language::registry::tests::default_registry_has_kotlin ... ok
[INFO] [stdout] test language::registry::tests::default_registry_has_move ... ok
[INFO] [stdout] test language::registry::tests::default_registry_has_lua ... ok
[INFO] [stdout] test language::registry::tests::default_registry_has_ruby ... ok
[INFO] [stdout] test language::registry::tests::default_registry_has_python ... ok
[INFO] [stdout] test language::registry::tests::default_registry_has_rust ... ok
[INFO] [stdout] test language::registry::tests::default_registry_has_svelte ... ok
[INFO] [stdout] test language::registry::tests::default_registry_has_swift ... ok
[INFO] [stdout] test language::registry::tests::language_construction ... ok
[INFO] [stdout] test language::registry::tests::registry_all_returns_all_languages ... ok
[INFO] [stdout] test language::registry::tests::registry_register_and_lookup ... ok
[INFO] [stdout] test language::registry::tests::rust_supports_nested_block_comments ... ok
[INFO] [stdout] test language::registry::tests::with_custom_languages_checked_reports_builtin_override ... ok
[INFO] [stdout] test language::registry::tests::with_custom_languages_checked_reports_multiple_overrides ... ok
[INFO] [stdout] test language::tests::registry_contains_builtin_languages ... ok
[INFO] [stdout] test language::tests::registry_returns_none_for_unknown_extension ... ok
[INFO] [stdout] test git::tests::staged_files_in_new_repo_without_commits ... ok
[INFO] [stdout] test git::tests::staged_files_detects_staged_file ... ok
[INFO] [stdout] test output::error_output::tests::default_creates_stderr_output ... ok
[INFO] [stdout] test output::error_output::tests::error_with_colors_full_message ... ok
[INFO] [stdout] test output::error_output::tests::error_without_colors_full ... ok
[INFO] [stdout] test output::error_output::tests::error_without_colors_basic ... ok
[INFO] [stdout] test output::error_output::tests::error_without_colors_with_detail ... ok
[INFO] [stdout] test output::error_output::tests::error_without_colors_with_suggestion ... ok
[INFO] [stdout] test output::error_output::tests::error_with_colors_contains_ansi ... ok
[INFO] [stdout] test output::error_output::tests::info_with_colors_contains_ansi ... ok
[INFO] [stdout] test output::error_output::tests::info_with_colors_full_message ... ok
[INFO] [stdout] test output::error_output::tests::info_without_colors_basic ... ok
[INFO] [stdout] test output::error_output::tests::info_without_colors_full ... ok
[INFO] [stdout] test output::error_output::tests::new_with_always_mode ... ok
[INFO] [stdout] test output::error_output::tests::new_with_never_mode ... ok
[INFO] [stdout] test output::error_output::tests::info_without_colors_with_suggestion ... ok
[INFO] [stdout] test output::error_output::tests::warning_with_colors_contains_ansi ... ok
[INFO] [stdout] test output::error_output::tests::info_without_colors_with_detail ... ok
[INFO] [stdout] test output::error_output::tests::warning_without_colors_basic ... ok
[INFO] [stdout] test output::error_output::tests::warning_without_colors_with_detail ... ok
[INFO] [stdout] test language::registry::tests::with_custom_languages_checked_reports_no_overrides_for_new_extensions ... ok
[INFO] [stdout] test output::error_output::tests::warning_without_colors_with_suggestion ... ok
[INFO] [stdout] test output::html::tests::document::has_client_side_javascript ... ok
[INFO] [stdout] test output::html::tests::document::default_formatter ... ok
[INFO] [stdout] test git::tests::staged_files_detects_modified_staged_file ... ok
[INFO] [stdout] test output::html::tests::document::generates_valid_html_structure ... ok
[INFO] [stdout] test output::html::tests::document::has_footer ... ok
[INFO] [stdout] test output::html::tests::escape::escapes_file_paths ... ok
[INFO] [stdout] test output::html::tests::file_table::empty_results ... ok
[INFO] [stdout] test output::html::tests::file_table::has_filter_controls ... ok
[INFO] [stdout] test output::html::tests::file_table::has_sortable_column_headers ... ok
[INFO] [stdout] test output::html::tests::file_table::has_table_container ... ok
[INFO] [stdout] test output::html::tests::document::has_embedded_css ... ok
[INFO] [stdout] test output::html::tests::file_table::formats_file_table ... ok
[INFO] [stdout] test output::html::tests::file_table::rows_have_data_status_attribute ... ok
[INFO] [stdout] test output::html::tests::document::status_icons_are_html_entities ... ok
[INFO] [stdout] test output::html::tests::escape::html_escape_special_characters ... ok
[INFO] [stdout] test output::html::tests::file_table::shows_all_files_including_passed ... ok
[INFO] [stdout] test output::html::tests::file_table::shows_all_passed_files ... ok
[INFO] [stdout] test output::html::tests::file_table::table_has_id_for_js ... ok
[INFO] [stdout] test output::html::tests::file_table::shows_override_reason ... ok
[INFO] [stdout] test output::html::tests::file_table::numeric_cells_have_data_value_attribute ... ok
[INFO] [stdout] test output::html::tests::file_table::numeric_columns_have_number_class ... ok
[INFO] [stdout] test output::html::tests::histogram::histogram_has_chart_container_styles ... ok
[INFO] [stdout] test output::html::tests::histogram::histogram_not_shown_with_insufficient_files ... ok
[INFO] [stdout] test output::html::tests::language_breakdown::both_charts_shown_when_data_available ... ok
[INFO] [stdout] test output::html::tests::histogram::histogram_has_chart_css_variable ... ok
[INFO] [stdout] test output::html::tests::histogram::histogram_not_shown_without_stats ... ok
[INFO] [stdout] test output::html::tests::language_breakdown::language_chart_has_horizontal_bars ... ok
[INFO] [stdout] test output::html::tests::language_breakdown::language_chart_not_shown_without_language_breakdown ... ok
[INFO] [stdout] test output::html::tests::language_breakdown::language_chart_not_shown_without_stats ... ok
[INFO] [stdout] test output::html::tests::language_breakdown::language_chart_shown_with_language_breakdown ... ok
[INFO] [stdout] test output::html::tests::language_breakdown::language_chart_shows_sloc_values ... ok
[INFO] [stdout] test output::html::tests::language_breakdown::language_chart_uses_css_variables ... ok
[INFO] [stdout] test output::html::tests::language_breakdown::only_language_chart_when_insufficient_histogram_files ... ok
[INFO] [stdout] test output::html::tests::suggestions::hides_suggestions_when_disabled ... ok
[INFO] [stdout] test output::html::tests::suggestions::split_suggestions_with_empty_functions ... ok
[INFO] [stdout] test output::html::tests::suggestions::shows_split_suggestions_when_enabled ... ok
[INFO] [stdout] test output::html::tests::summary::aggregate_stats_with_empty_results ... ok
[INFO] [stdout] test output::html::tests::histogram::histogram_shown_with_sufficient_files ... ok
[INFO] [stdout] test output::html::tests::summary::hides_grandfathered_card_when_zero ... ok
[INFO] [stdout] test output::html::tests::summary::shows_aggregate_line_stats ... ok
[INFO] [stdout] test output::html::tests::summary::shows_grandfathered_card_when_present ... ok
[INFO] [stdout] test output::html::tests::summary::shows_failed_card ... ok
[INFO] [stdout] test output::html::tests::summary::shows_passed_card ... ok
[INFO] [stdout] test output::html::tests::summary::shows_warning_card ... ok
[INFO] [stdout] test output::html::tests::trend::trend_chart_appears_first_in_visualizations ... ok
[INFO] [stdout] test git::tests::staged_files_ignores_unstaged_changes ... ok
[INFO] [stdout] test output::html::tests::summary::formats_summary_correctly ... ok
[INFO] [stdout] test output::html::tests::trend::trend_chart_not_shown_with_empty_history ... ok
[INFO] [stdout] test output::html::tests::trend::trend_chart_has_line_path ... ok
[INFO] [stdout] test output::html::tests::trend::trend_chart_not_shown_without_history ... ok
[INFO] [stdout] test output::html::tests::trend::only_trend_chart_when_no_stats ... ok
[INFO] [stdout] test output::html::tests::trend::trend_chart_has_data_points ... ok
[INFO] [stdout] test output::html::tests::trend::trend_chart_shown_with_history ... ok
[INFO] [stdout] test output::json::tests::json_output_is_valid ... ok
[INFO] [stdout] test output::html::tests::trend::trend_chart_with_stats_shows_both ... ok
[INFO] [stdout] test output::json::tests::json_default_formatter ... ok
[INFO] [stdout] test output::json::tests::json_empty_results ... ok
[INFO] [stdout] test output::json::tests::json_override_reason_excluded_when_none ... ok
[INFO] [stdout] test output::json::tests::json_status_values ... ok
[INFO] [stdout] test output::json::tests::json_with_suggestions ... ok
[INFO] [stdout] test output::markdown::tests::default_formatter ... ok
[INFO] [stdout] test output::json::tests::json_result_fields ... ok
[INFO] [stdout] test output::json::tests::json_override_reason_included ... ok
[INFO] [stdout] test output::json::tests::json_summary_counts ... ok
[INFO] [stdout] test output::json::tests::json_grandfathered_status ... ok
[INFO] [stdout] test output::markdown::tests::formats_details_table ... ok
[INFO] [stdout] test output::markdown::tests::empty_functions_shows_dash ... ok
[INFO] [stdout] test output::markdown::tests::empty_results ... ok
[INFO] [stdout] test output::markdown::tests::excludes_passed_from_details ... ok
[INFO] [stdout] test output::json::tests::json_without_suggestions_flag_excludes_suggestions ... ok
[INFO] [stdout] test output::markdown::tests::formats_summary_correctly ... ok
[INFO] [stdout] test output::markdown::tests::no_details_section_when_all_passed ... ok
[INFO] [stdout] test output::markdown::tests::no_grandfathered_row_when_count_is_zero ... ok
[INFO] [stdout] test output::markdown::tests::shows_grandfathered_count ... ok
[INFO] [stdout] test output::markdown::tests::with_suggestions_shows_split_suggestions_section ... ok
[INFO] [stdout] test output::path::tests::display_path_same_as_root ... ok
[INFO] [stdout] test output::path::tests::display_path_with_project_root ... ok
[INFO] [stdout] test output::path::tests::display_path_without_project_root ... ok
[INFO] [stdout] test output::markdown::tests::without_suggestions_flag_hides_split_suggestions_section ... ok
[INFO] [stdout] test output::path::tests::normalize_for_matching_handles_bare_dot ... ok
[INFO] [stdout] test output::path::tests::normalize_for_matching_handles_dot_slash_only ... ok
[INFO] [stdout] test output::path::tests::normalize_for_matching_handles_mixed_separators ... ok
[INFO] [stdout] test output::markdown::tests::override_reason_shown_in_table ... ok
[INFO] [stdout] test output::path::tests::normalize_for_matching_preserves_dot_in_filename ... ok
[INFO] [stdout] test output::path::tests::normalize_for_matching_preserves_parent_dir ... ok
[INFO] [stdout] test output::path::tests::normalize_for_matching_strips_dot_backslash ... ok
[INFO] [stdout] test output::path::tests::normalize_for_matching_strips_dot_slash ... ok
[INFO] [stdout] test output::path::tests::normalize_separators_preserves_forward_slashes ... ok
[INFO] [stdout] test output::progress::tests::test_create_visible_progress_bar ... ok
[INFO] [stdout] test output::path::tests::normalize_for_matching_preserves_plain_paths ... ok
[INFO] [stdout] test output::progress::tests::test_progress_bar_hidden_when_not_tty ... ok
[INFO] [stdout] test output::path::tests::normalize_for_matching_normalizes_backslashes ... ok
[INFO] [stdout] test output::progress::tests::test_progress_bar_increment ... ok
[INFO] [stdout] test output::progress::tests::test_progress_bar_clone ... ok
[INFO] [stdout] test output::progress::tests::test_progress_bar_hidden_when_quiet_overrides_tty ... ok
[INFO] [stdout] test output::progress::tests::test_progress_bar_visible_when_tty ... ok
[INFO] [stdout] test output::sarif::tests::min_level_error_drops_structure_warning ... ok
[INFO] [stdout] test output::sarif::tests::min_level_error_drops_warning_and_note ... ok
[INFO] [stdout] test output::sarif::tests::min_level_note_emits_everything ... ok
[INFO] [stdout] test output::sarif::tests::sarif_default_formatter ... ok
[INFO] [stdout] test output::sarif::tests::min_level_warning_keeps_warning_drops_note ... ok
[INFO] [stdout] test output::sarif::tests::sarif_failed_result ... ok
[INFO] [stdout] test output::path::tests::display_path_not_child_of_root ... ok
[INFO] [stdout] test output::sarif::tests::sarif_grandfathered_result_has_suppression ... ok
[INFO] [stdout] test output::sarif::tests::sarif_level_as_str_matches_spec ... ok
[INFO] [stdout] test output::sarif::tests::sarif_level_default_is_error ... ok
[INFO] [stdout] test output::sarif::tests::sarif_empty_results ... ok
[INFO] [stdout] test output::sarif::tests::sarif_level_from_str_is_case_insensitive ... ok
[INFO] [stdout] test output::sarif::tests::sarif_level_severity_ordering ... ok
[INFO] [stdout] test output::sarif::tests::sarif_output_is_valid_json ... ok
[INFO] [stdout] test output::sarif::tests::sarif_passed_results_excluded ... ok
[INFO] [stdout] test output::sarif::tests::sarif_override_reason_included ... ok
[INFO] [stdout] test output::sarif::tests::sarif_result_properties ... ok
[INFO] [stdout] test output::sarif::tests::sarif_rules_defined ... ok
[INFO] [stdout] test output::sarif::tests::sarif_tool_info ... ok
[INFO] [stdout] test output::sarif::tests::sarif_warning_result ... ok
[INFO] [stdout] test output::sarif::tests::sarif_with_suggestions ... ok
[INFO] [stdout] test output::sarif::tests::sarif_windows_path_converted ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_denied_directory_violation ... ok
[INFO] [stdout] test git::tests::changed_files_skips_unchanged_subtrees ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_denied_file_violation ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_dir_count_violation ... ok
[INFO] [stdout] test output::sarif::tests::sarif_without_suggestions_flag_excludes_suggestions ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_file_count_violation ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_group_incomplete_violation ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_max_depth_violation ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_disallowed_directory_violation ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_missing_sibling_violation ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_mixed_content_and_structure_violations ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_rules_include_structure_rules ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_naming_convention_violation ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_structure_grandfathered ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_structure_warning_level ... ok
[INFO] [stdout] test output::stats::html::tests::format_basic_stats ... ok
[INFO] [stdout] test output::stats::html::tests::format_directory_breakdown_with_relative_paths ... ok
[INFO] [stdout] test output::stats::html::tests::default_is_new ... ok
[INFO] [stdout] test output::stats::html::tests::format_escapes_special_characters_in_directory ... ok
[INFO] [stdout] test output::stats::html::tests::format_escapes_special_characters_in_language ... ok
[INFO] [stdout] test output::stats::html::tests::format_empty_language_breakdown_omitted ... ok
[INFO] [stdout] test output::stats::html::tests::format_files_only_mode_omits_charts ... ok
[INFO] [stdout] test output::path::tests::normalize_separators_converts_backslashes ... ok
[INFO] [stdout] test output::stats::html::tests::format_includes_file_path_class ... ok
[INFO] [stdout] test output::stats::html::tests::format_files_only_mode_shows_only_file_list ... ok
[INFO] [stdout] test output::stats::html::tests::format_includes_number_class_for_alignment ... ok
[INFO] [stdout] test output::stats::html::tests::format_summary_only_includes_trend_if_available ... ok
[INFO] [stdout] test output::stats::html::tests::format_summary_only_mode_omits_detailed_sections ... ok
[INFO] [stdout] test output::stats::html::tests::format_top_files_with_project_root ... ok
[INFO] [stdout] test output::stats::html::tests::format_trend_delta_css_classes ... ok
[INFO] [stdout] test output::stats::html::tests::format_with_average ... ok
[INFO] [stdout] test output::stats::html::tests::format_includes_css_variables ... ok
[INFO] [stdout] test output::stats::html::tests::format_with_language_breakdown ... ok
[INFO] [stdout] test output::stats::html::tests::format_with_language_chart ... ok
[INFO] [stdout] test output::stats::html::tests::format_no_charts_when_no_data ... ok
[INFO] [stdout] test output::stats::html::tests::format_with_directory_breakdown ... ok
[INFO] [stdout] test output::stats::html::tests::format_with_top_files ... ok
[INFO] [stdout] test output::stats::html::tests::format_with_trend_delta ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_empty ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_files_only_mode_skips_summary ... ok
[INFO] [stdout] test output::stats::html::tests::format_without_trend_omits_section ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_files_only_sorted_by_name ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_files_only_with_limit ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_summary_only_includes_average_code_lines ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_summary_only_no_empty_files ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_summary_only_skips_directory_breakdown ... ok
[INFO] [stdout] test output::stats::html::tests::format_with_trend_history_shows_chart ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_summary_only_preserves_trend ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_summary_only_skips_language_breakdown ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_summary_only_skips_top_files ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_trend_with_git_context ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_valid_json ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_with_directory_breakdown ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_trend_git_context_omitted_when_none ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_trend_partial_git_context ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_with_files ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_with_language_breakdown ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_with_top_files ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_with_trend ... ok
[INFO] [stdout] test output::stats::json::tests::json_formatter_without_trend ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_empty ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_summary_only_shows_summary_section ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_summary_only_skips_directory_breakdown ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_summary_only_skips_top_files ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_summary_only_skips_language_breakdown ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_with_files ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_with_language_breakdown ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_with_top_files ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_with_directory_breakdown ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_with_trend ... ok
[INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_depth_1_groups_top_level ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_without_trend ... ok
[INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_depth_2_shows_two_levels ... ok
[INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_depth_none_shows_full_path ... ok
[INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_depth_handles_root_files ... ok
[INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_multiple_directories ... ok
[INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_depth_zero_shows_full_path ... ok
[INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_single_directory ... ok
[INFO] [stdout] test output::stats::statistics::tests::language_breakdown_single_language ... ok
[INFO] [stdout] test output::stats::statistics::tests::language_breakdown_multiple_languages ... ok
[INFO] [stdout] test output::stats::statistics::tests::new_has_full_output_mode ... ok
[INFO] [stdout] test output::stats::statistics::tests::project_statistics_multiple_files ... ok
[INFO] [stdout] test output::stats::statistics::tests::project_statistics_empty ... ok
[INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_summary_only_preserves_trend ... ok
[INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_dot_returns_unchanged ... ok
[INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_exact_match ... ok
[INFO] [stdout] test output::stats::statistics::tests::project_statistics_single_file ... ok
[INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_exceeds_path_components ... ok
[INFO] [stdout] test output::stats::statistics::tests::project_statistics_with_trend ... ok
[INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_one_returns_first_component ... ok
[INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_two_returns_two_components ... ok
[INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_zero_returns_unchanged ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_language_breakdown_preserves_full_mode ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_blank_order ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_comment_order ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_default_code_order ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_empty ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_limit_exceeds_count ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_name_order ... ok
[INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_single_component ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_sets_files_only_mode ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_total_order ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_with_limit ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_summary_only_empty_project_no_average ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_summary_only_preserves_existing_average ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_summary_only_preserves_trend ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_summary_only_sets_summary_only_mode ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_top_files_computes_average ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_top_files_empty_has_no_average ... ok
[INFO] [stdout] test git::tests::staged_files_empty_when_nothing_staged ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_top_files_fewer_than_n ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_top_files_sorts_by_code_lines ... ok
[INFO] [stdout] test output::stats::text::tests::render_progress_bar_full_ratio_all_filled ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_top_files_preserves_full_mode ... ok
[INFO] [stdout] test output::stats::text::tests::render_progress_bar_half_ratio ... ok
[INFO] [stdout] test output::stats::text::tests::render_progress_bar_negative_ratio_clamped_to_zero ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_summary_only_clears_files_and_breakdowns ... ok
[INFO] [stdout] test output::stats::text::tests::render_progress_bar_preserves_total_width ... ok
[INFO] [stdout] test output::stats::statistics::tests::with_summary_only_computes_average_if_not_set ... ok
[INFO] [stdout] test output::stats::text::tests::render_progress_bar_ratio_above_one_clamped ... ok
[INFO] [stdout] test output::stats::text::tests::render_progress_bar_width_zero ... ok
[INFO] [stdout] test output::stats::text::tests::render_progress_bar_zero_ratio_all_empty ... ok
[INFO] [stdout] test output::stats::text::tests::render_progress_bar_rounding_boundary ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_directory_breakdown_shows_progress_bar ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_empty ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_language_breakdown_shows_progress_bar ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_progress_bar_with_zero_code ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_summary_only_preserves_trend ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_summary_only_skips_language_breakdown ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_summary_only_skips_top_files ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_summary_only_shows_summary_section ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_trend_percentage_from_zero_base ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_trend_shows_percentage ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_trend_with_colors ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_trend_with_relative_time ... ok
[INFO] [stdout] test output::sarif::tests::sarif_has_correct_schema ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_with_language_breakdown ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_with_negative_trend_shows_down_arrow ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_with_trend_shows_arrows ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_with_zero_trend_shows_tilde ... ok
[INFO] [stdout] test output::sarif::tests::structure_violations::sarif_disallowed_file_violation ... ok
[INFO] [stdout] test output::svg::builder::tests::builder_adds_raw_svg ... ok
[INFO] [stdout] test output::svg::builder::tests::builder_creates_svg ... ok
[INFO] [stdout] test output::svg::chart::tests::bar_chart_tests::bar_chart_default_creates_empty_chart ... ok
[INFO] [stdout] test output::svg::chart::tests::bar_chart_tests::bar_chart_empty_shows_message ... ok
[INFO] [stdout] test output::svg::builder::tests::builder_adds_elements ... ok
[INFO] [stdout] test output::svg::chart::tests::bar_chart_tests::bar_chart_escapes_title ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_with_directory_breakdown ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_with_files ... ok
[INFO] [stdout] test output::svg::chart::tests::bar_chart_tests::bar_chart_has_accessibility_attributes ... ok
[INFO] [stdout] test output::svg::chart::tests::bar_chart_tests::bar_chart_renders_svg ... ok
[INFO] [stdout] test output::svg::chart::tests::bar_chart_tests::bar_chart_with_custom_size ... ok
[INFO] [stdout] test output::svg::chart::tests::horizontal_bar_chart_tests::horizontal_bar_chart_custom_width ... ok
[INFO] [stdout] test output::svg::chart::tests::horizontal_bar_chart_tests::horizontal_bar_chart_default_creates_empty_chart ... ok
[INFO] [stdout] test output::svg::chart::tests::horizontal_bar_chart_tests::horizontal_bar_chart_formats_large_numbers ... ok
[INFO] [stdout] test output::svg::chart::tests::horizontal_bar_chart_tests::horizontal_bar_chart_no_id_collision ... ok
[INFO] [stdout] test output::svg::chart::tests::horizontal_bar_chart_tests::horizontal_bar_chart_renders ... ok
[INFO] [stdout] test output::svg::chart::tests::horizontal_bar_chart_tests::horizontal_bar_chart_empty_shows_message ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_custom_size ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_default_creates_empty_chart ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_summary_only_skips_file_details ... ok
[INFO] [stdout] test output::stats::text::tests::text_formatter_with_top_files ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_empty_shows_message ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_has_hover_titles ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_single_point_handles_x_step ... ok
[INFO] [stdout] test output::svg::data::tests::new_creates_point ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_shows_grid_lines ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_without_points ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_no_id_collision ... ok
[INFO] [stdout] test output::svg::element::tests::axis_tests::horizontal_axis_renders ... ok
[INFO] [stdout] test output::svg::element::tests::bar_tests::bar_escapes_special_characters ... ok
[INFO] [stdout] test output::svg::element::tests::bar_tests::bar_renders_with_title ... ok
[INFO] [stdout] test output::svg::element::tests::line_tests::empty_line_returns_empty_string ... ok
[INFO] [stdout] test output::svg::element::tests::line_tests::line_renders_path ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_renders ... ok
[INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_without_area ... ok
[INFO] [stdout] test output::svg::element::tests::line_tests::line_with_fill_and_baseline_renders_area ... ok
[INFO] [stdout] test output::svg::data::tests::with_color_sets_color ... ok
[INFO] [stdout] test output::svg::element::tests::axis_tests::axis_with_custom_font_size ... ok
[INFO] [stdout] test output::svg::element::tests::line_tests::line_with_fill_single_point_skips_fill ... ok
[INFO] [stdout] test output::svg::element::tests::line_tests::line_with_fill_without_baseline_skips_fill ... ok
[INFO] [stdout] test output::svg::format::tests::format_number_tests::millions_show_m ... ok
[INFO] [stdout] test output::svg::format::tests::format_number_tests::small_numbers_unchanged ... ok
[INFO] [stdout] test output::svg::format::tests::format_number_tests::thousands_show_k ... ok
[INFO] [stdout] test output::svg::format::tests::html_escape_tests::escapes_angle_brackets ... ok
[INFO] [stdout] test output::svg::format::tests::html_escape_tests::escapes_ampersand ... ok
[INFO] [stdout] test output::svg::format::tests::html_escape_tests::escapes_multiple ... ok
[INFO] [stdout] test output::svg::format::tests::html_escape_tests::escapes_quotes ... ok
[INFO] [stdout] test output::svg::histogram::tests::bucket_contains_middle_value ... ok
[INFO] [stdout] test output::svg::histogram::tests::bucket_contains_min_boundary ... ok
[INFO] [stdout] test output::svg::histogram::tests::bucket_excludes_below_min ... ok
[INFO] [stdout] test output::svg::histogram::tests::bucket_excludes_max_boundary ... ok
[INFO] [stdout] test output::svg::histogram::tests::default_buckets_no_overlap ... ok
[INFO] [stdout] test output::svg::histogram::tests::default_buckets_cover_all_ranges ... ok
[INFO] [stdout] test output::svg::histogram::tests::from_stats_boundary_values ... ok
[INFO] [stdout] test output::svg::histogram::tests::from_stats_empty ... ok
[INFO] [stdout] test output::svg::histogram::tests::from_stats_multiple_buckets ... ok
[INFO] [stdout] test output::svg::histogram::tests::from_stats_single_bucket ... ok
[INFO] [stdout] test output::svg::histogram::tests::has_sufficient_data_empty ... ok
[INFO] [stdout] test output::svg::histogram::tests::has_sufficient_data_three_files ... ok
[INFO] [stdout] test output::svg::element::tests::axis_tests::vertical_axis_renders ... ok
[INFO] [stdout] test output::svg::element::tests::line_tests::line_with_custom_stroke_width ... ok
[INFO] [stdout] test output::svg::histogram::tests::render_empty_state ... ok
[INFO] [stdout] test output::svg::histogram::tests::render_has_axis_title ... ok
[INFO] [stdout] test output::svg::histogram::tests::render_insufficient_files ... ok
[INFO] [stdout] test output::svg::histogram::tests::render_shows_file_counts ... ok
[INFO] [stdout] test output::svg::histogram::tests::render_uses_css_variables ... ok
[INFO] [stdout] test output::svg::histogram::tests::render_with_data ... ok
[INFO] [stdout] test output::svg::histogram::tests::unbounded_bucket_excludes_below_min ... ok
[INFO] [stdout] test output::svg::histogram::tests::has_sufficient_data_two_files ... ok
[INFO] [stdout] test output::svg::histogram::tests::with_title ... ok
[INFO] [stdout] test output::svg::language_chart::tests::from_stats_empty_files ... ok
[INFO] [stdout] test output::svg::histogram::tests::with_size ... ok
[INFO] [stdout] test output::svg::language_chart::tests::from_stats_no_language_data ... ok
[INFO] [stdout] test output::svg::language_chart::tests::from_stats_single_language ... ok
[INFO] [stdout] test output::svg::language_chart::tests::handles_language_name_with_ampersand ... ok
[INFO] [stdout] test output::svg::language_chart::tests::handles_special_characters_in_language_names ... ok
[INFO] [stdout] test output::svg::language_chart::tests::from_stats_multiple_languages ... ok
[INFO] [stdout] test output::svg::language_chart::tests::render_empty_state ... ok
[INFO] [stdout] test output::svg::language_chart::tests::render_has_accessible_title ... ok
[INFO] [stdout] test output::svg::language_chart::tests::render_multiple_languages_sorted_by_sloc ... ok
[INFO] [stdout] test output::svg::language_chart::tests::render_single_language ... ok
[INFO] [stdout] test output::svg::language_chart::tests::render_uses_css_variables ... ok
[INFO] [stdout] test output::svg::language_chart::tests::with_width ... ok
[INFO] [stdout] test output::svg::style::tests::chart_color_tests::hex_format ... ok
[INFO] [stdout] test output::svg::style::tests::text_anchor_tests::default_is_start ... ok
[INFO] [stdout] test output::svg::style::tests::chart_color_tests::css_var_format ... ok
[INFO] [stdout] test output::svg::style::tests::text_anchor_tests::display_formats ... ok
[INFO] [stdout] test output::svg::tests::exports_are_available ... ok
[INFO] [stdout] test output::svg::tests::data_point_with_color ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::chart_customization ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::chart_tooltips_include_delta ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::chart_renders_accessible_title ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::chart_with_deltas_disabled ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::delta_indicator_decrease_is_good ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::delta_indicator_increase_is_bad ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::delta_indicator_no_change_is_neutral ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::downsample_exactly_max_returns_all ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::downsample_less_than_max_returns_all ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::downsample_more_than_max_reduces ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::empty_history_renders_no_data_message ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::downsampling_preserves_first_and_last ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::format_timestamp_smart_short_range_produces_mm_dd ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::git_ref_appears_in_label ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::git_branch_appears_when_no_ref ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::is_leap_year_check ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::format_timestamp_smart_long_range_produces_week ... ok
[INFO] [stdout] test output::svg::histogram::tests::unbounded_bucket_contains_large_values ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::git_ref_preferred_over_branch ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::timestamp_to_date_conversion ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::single_entry_renders_chart ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::timestamp_to_date_unix_epoch ... ok
[INFO] [stdout] test output::tests::html_formatter_produces_valid_html ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::timestamp_to_date_leap_year ... ok
[INFO] [stdout] test output::tests::json_formatter_produces_valid_json ... ok
[INFO] [stdout] test output::tests::output_format_unknown ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::week_of_year_calculation ... ok
[INFO] [stdout] test output::tests::text_formatter_produces_output ... ok
[INFO] [stdout] test output::svg::trend_chart::tests::multiple_entries_render_line ... ok
[INFO] [stdout] test output::text::tests::color_mode_auto_produces_output ... ok
[INFO] [stdout] test output::text::tests::color_mode_never_produces_plain_output ... ok
[INFO] [stdout] test output::text::tests::default_formatter_hides_passed_files ... ok
[INFO] [stdout] test output::text::tests::failed_results_shown_first ... ok
[INFO] [stdout] test output::text::tests::format_failed_result ... ok
[INFO] [stdout] test output::text::tests::format_content_violation_category ... ok
[INFO] [stdout] test output::text::tests::format_mixed_results ... ok
[INFO] [stdout] test output::tests::output_format_from_str ... ok
[INFO] [stdout] test output::text::tests::format_structure_denied_file_violation ... ok
[INFO] [stdout] test output::text::tests::color_mode_always_produces_colored_output ... ok
[INFO] [stdout] test output::text::tests::format_structure_dir_count_violation ... ok
[INFO] [stdout] test output::text::tests::format_structure_disallowed_file_violation ... ok
[INFO] [stdout] test output::text::tests::format_passed_result ... ok
[INFO] [stdout] test output::text::tests::format_warning_result ... ok
[INFO] [stdout] test output::text::tests::grandfathered_colored_output ... ok
[INFO] [stdout] test output::text::tests::format_structure_file_count_violation ... ok
[INFO] [stdout] test output::text::tests::format_structure_naming_convention_violation ... ok
[INFO] [stdout] test output::text::tests::no_reason_line_when_override_reason_is_none ... ok
[INFO] [stdout] test output::text::tests::format_structure_max_depth_violation ... ok
[INFO] [stdout] test output::text::tests::grandfathered_with_reason_shown ... ok
[INFO] [stdout] test output::text::tests::override_reason_shown_in_output ... ok
[INFO] [stdout] test output::text::tests::grandfathered_status_shown_in_summary ... ok
[INFO] [stdout] test output::text::tests::summary_line_included ... ok
[INFO] [stdout] test output::text::tests::verbose_one_shows_passed_files ... ok
[INFO] [stdout] test output::text::tests::verbose_zero_hides_passed_files ... ok
[INFO] [stdout] test output::text::tests::verbose_zero_hides_grandfathered_files ... ok
[INFO] [stdout] test output::text::tests::without_suggestions_flag_hides_split_suggestions ... ok
[INFO] [stdout] test output::text::tests::verbose_one_shows_grandfathered_files ... ok
[INFO] [stdout] test output::text::tests::with_suggestions_shows_split_suggestions ... ok
[INFO] [stdout] test output::trend_formatting::tests::format_delta_positive ... ok
[INFO] [stdout] test output::trend_formatting::tests::percentage_from_positive_delta ... ok
[INFO] [stdout] test output::trend_formatting::tests::percentage_from_zero_base_returns_none ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_days ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_future_returns_none ... ok
[INFO] [stdout] test output::trend_formatting::tests::format_delta_negative ... ok
[INFO] [stdout] test output::trend_formatting::tests::percentage_from_negative_delta ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_minutes ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_months ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_just_now ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_hours ... ok
[INFO] [stdout] test output::trend_formatting::tests::format_delta_zero ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_one_hour ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_one_minute ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_one_day ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_one_month ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_arrow_negative ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_arrow_positive ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_one_week ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_arrow_zero ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_header_no_git_no_timestamp ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_header_with_git_and_branch ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_header_with_git_and_timestamp ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_header_with_git_no_branch ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_header_no_git_with_timestamp ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_header_markdown_removes_colon ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_line_formatter_no_colors ... ok
[INFO] [stdout] test output::trend_formatting::tests::trend_line_formatter_with_colors ... ok
[INFO] [stdout] test project::logical_glob::tests::invalid_subtree_scope_error_reports_authored_pattern ... ok
[INFO] [stdout] test output::trend_formatting::tests::relative_time_weeks ... ok
[INFO] [stdout] test project::logical_glob::tests::config_root_subtree_scope_matches_everything ... ok
[INFO] [stdout] test project::logical_glob::tests::explicit_paths_do_not_gain_basename_semantics ... ok
[INFO] [stdout] test project::logical_glob::tests::scope_without_trailing_separator_keeps_plain_glob_semantics ... ok
[INFO] [stdout] test project::logical_glob::tests::star_subtree_scope_excludes_config_root ... ok
[INFO] [stdout] test project::logical_glob::tests::logical_path_globs_share_candidate_normalization ... ok
[INFO] [stdout] test project::logical_glob::tests::trailing_separator_scope_supports_brace_alternation ... ok
[INFO] [stdout] test project::logical_glob::tests::trailing_separator_scope_matches_base_and_descendants ... ok
[INFO] [stdout] test project::tests::config_root_itself_has_dot_logical_path_and_zero_depth ... ok
[INFO] [stdout] test project::tests::path_outside_root_uses_parent_components_and_round_trips ... ok
[INFO] [stdout] test project::tests::child_invocation_maps_to_config_root_relative_logical_path ... ok
[INFO] [stdout] test project::tests::relative_config_root_is_resolved_from_invocation_cwd ... ok
[INFO] [stdout] test project::tests::unix_paths_are_lexically_normalized ... ok
[INFO] [stdout] test project::tests::unrooted_and_default_are_identity_contexts ... ok
[INFO] [stdout] test project::tests::unc_paths_round_trip ... ok
[INFO] [stdout] test project::tests::windows_drive_relative_path_uses_matching_drive_cwd ... ok
[INFO] [stdout] test project::tests::windows_anchor_and_components_are_ascii_case_insensitive ... ok
[INFO] [stdout] test project::tests::windows_paths_are_normalized_independently_of_host_platform ... ok
[INFO] [stdout] test project::tests::windows_root_relative_path_uses_invocation_drive ... ok
[INFO] [stdout] test project::tests::windows_path_on_another_drive_stays_absolute ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_creates_rule ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_with_allow_dirs ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_with_allow_files ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_invalid_allow_pattern ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_with_patterns ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_dir_matches ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_empty_extension_list ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_extension_match_with_dot ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_allow_files ... ok
[INFO] [stdout] test output::progress::tests::test_progress_bar_hidden_in_quiet_mode ... ok
[INFO] [stdout] test output::sarif::tests::min_level_default_new_emits_all_levels ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_extension ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_by_full_path ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_deny_file_pattern ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_deny_extension ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_pattern ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_has_allowlist_empty ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_deny_pattern ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_has_dir_allowlist_empty ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_no_match_empty_allowlist ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_has_allowlist_with_allow_files ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_dir_matches_empty_allowlist ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_invalid_pattern_returns_error ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_has_dir_allowlist_with_dirs ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_directory ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_directory_double_star_prefix_with_dot ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_directory_with_dot_prefix ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_directory_glob_star_with_dot_prefix ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_directory_partial ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_directory_with_backslash_dot_prefix ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_no_extension_match_when_file_has_no_extension ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_pattern ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_subtree_scope_matches_base_and_descendants ... ok
[INFO] [stdout] test scanner::allowlist_tests::dot_prefixed_scope_pattern_matches_logical_directory ... ok
[INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_project_root_scope ... ok
[INFO] [stdout] test scanner::allowlist_tests::explicit_allow_pattern_is_anchored_to_the_logical_root ... ok
[INFO] [stdout] test scanner::allowlist_tests::deny_takes_precedence_over_allowlist ... ok
[INFO] [stdout] test output::svg::language_chart::tests::render_hover_tooltips ... ok
[INFO] [stdout] test output::svg::language_chart::tests::with_color ... ok
[INFO] [stdout] test scanner::allowlist_tests::deny_file_patterns_takes_precedence_over_allowlist ... ok
[INFO] [stdout] test scanner::allowlist_tests::global_directory_allowlist_does_not_check_project_root_itself ... ok
[INFO] [stdout] test scanner::allowlist_tests::explicit_deny_pattern_is_anchored_to_the_logical_root ... ok
[INFO] [stdout] test scanner::allowlist_tests::per_rule_allow_files_overrides_global_deny_files ... ok
[INFO] [stdout] test scanner::allowlist_tests::per_rule_deny_extensions_trigger_violation ... ok
[INFO] [stdout] test scanner::allowlist_tests::per_rule_deny_file_patterns_trigger_violation ... ok
[INFO] [stdout] test scanner::allowlist_tests::per_rule_deny_patterns_trigger_violation ... ok
[INFO] [stdout] test scanner::allowlist_tests::per_rule_allow_extensions_overrides_global_deny_extensions ... ok
[INFO] [stdout] test scanner::allowlist_tests::per_rule_allow_patterns_overrides_global_deny_patterns ... ok
[INFO] [stdout] test scanner::allowlist_tests::root_scope_directory_allowlist_checks_children_but_not_project_root ... ok
[INFO] [stdout] test scanner::allowlist_tests::unrooted_global_directory_allowlist_does_not_check_scan_root_itself ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_new_creates_scanner ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_excludes_dir_by_name ... ok
[INFO] [stdout] test scanner::allowlist_tests::per_rule_deny_dirs_trigger_violation ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_fallback_respects_gitignore_scan_with_structure ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_fallback_respects_gitignore ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_no_gitignore_multiple_paths ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_combines_results ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_structure_no_gitignore_multiple_paths ... ok
[INFO] [stdout] test scanner::allowlist_tests::root_scope_applies_allow_and_deny_file_rules ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_with_gitignore_true ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_with_structure ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_with_structure_with_gitignore ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_without_gitignore ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_excludes_patterns ... ok
[INFO] [stdout] test scanner::allowlist_tests::per_rule_allow_dirs_overrides_global_deny_dirs ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_with_gitignore_true_does_not_error ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_with_structure_without_gitignore ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_with_structure_excludes_pattern ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_with_structure_uses_exclude_patterns ... ok
[INFO] [stdout] test scanner::composite_tests::scan_files_function_basic ... ok
[INFO] [stdout] test scanner::composite_tests::scan_files_function_with_exclude ... ok
[INFO] [stdout] test scanner::allowlist_tests::per_rule_deny_still_takes_precedence_over_per_rule_allow ... ok
[INFO] [stdout] test scanner::composite_tests::scan_files_without_gitignore ... ok
[INFO] [stdout] test scanner::composite_tests::scan_files_with_exclude ... ok
[INFO] [stdout] test scanner::composite_tests::scan_files_with_gitignore_true_fallback ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_with_structure_with_gitignore ... ok
[INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_without_gitignore_finds_files ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_walkdir_prunes_nested_excluded ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_walkdir_prunes_excluded_directories ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_complex_wildcards ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_negation_pattern ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_relative_dot_path ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_no_gitignore_file ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_scan_subdirectory_directly ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_nested_gitignore ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_without_gitignore_ignores_gitignore_file ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_respects_gitignore_without_git_repo ... ok
[INFO] [stdout] test scanner::directory_tests::scanner_finds_files_in_directory ... ok
[INFO] [stdout] test scanner::directory_tests::scanner_finds_files_in_subdirectories ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_scan_with_structure ... ok
[INFO] [stdout] test scanner::filter::tests::directory_pruner_uses_complete_terminal_recursive_prefixes ... ok
[INFO] [stdout] test scanner::directory_tests::scanner_respects_filter ... ok
[INFO] [stdout] test scanner::filter::tests::dot_prefixed_exclusion_is_normalized_to_the_logical_root ... ok
[INFO] [stdout] test scanner::filter::tests::filter_empty_extensions_accepts_all ... ok
[INFO] [stdout] test scanner::filter::tests::filter_exclude_by_filename ... ok
[INFO] [stdout] test scanner::filter::tests::filter_exclude_patterns ... ok
[INFO] [stdout] test scanner::filter::tests::filter_exclude_specific_files ... ok
[INFO] [stdout] test scanner::filter::tests::filter_file_without_extension_accepted_when_empty_extensions ... ok
[INFO] [stdout] test scanner::filter::tests::filter_complex_exclude_patterns ... ok
[INFO] [stdout] test scanner::filter::tests::filter_invalid_pattern_returns_error ... ok
[INFO] [stdout] test scanner::filter::tests::filter_multiple_extensions ... ok
[INFO] [stdout] test scanner::global_allow_tests::dir_matches_global_allow ... ok
[INFO] [stdout] test scanner::global_allow_tests::file_matches_global_allow_extension ... ok
[INFO] [stdout] test scanner::global_allow_tests::file_matches_global_allow_pattern ... ok
[INFO] [stdout] test scanner::global_allow_tests::has_global_dir_allowlist_empty ... ok
[INFO] [stdout] test scanner::global_allow_tests::has_global_dir_allowlist_with_dirs ... ok
[INFO] [stdout] test scanner::global_allow_tests::has_global_file_allowlist_with_extensions ... ok
[INFO] [stdout] test scanner::global_allow_tests::has_global_file_allowlist_empty ... ok
[INFO] [stdout] test scanner::global_allow_tests::has_global_file_allowlist_with_files ... ok
[INFO] [stdout] test scanner::global_deny_tests::deny_dirs_only_matches_directories_not_files ... ok
[INFO] [stdout] test scanner::global_deny_tests::deny_file_patterns_only_matches_filename_not_path ... ok
[INFO] [stdout] test scanner::global_deny_tests::dir_matches_global_deny_returns_original_pattern ... ok
[INFO] [stdout] test scanner::global_deny_tests::deny_pattern_trailing_slash_with_simple_name ... ok
[INFO] [stdout] test scanner::global_deny_tests::deny_pattern_with_trailing_slash_only_matches_directories ... ok
[INFO] [stdout] test scanner::filter::tests::filter_file_without_extension_rejected_when_extensions_set ... ok
[INFO] [stdout] test scanner::global_deny_tests::deny_pattern_without_trailing_slash_only_matches_files ... ok
[INFO] [stdout] test scanner::global_deny_tests::global_deny_dirs_trigger_violation ... ok
[INFO] [stdout] test scanner::global_deny_tests::global_deny_file_patterns_trigger_violation ... ok
[INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_anchored_pattern ... ok
[INFO] [stdout] test scanner::global_deny_tests::structure_scan_config_file_matches_global_deny_file_pattern ... ok
[INFO] [stdout] test scanner::global_deny_tests::multiple_directory_only_deny_patterns ... ok
[INFO] [stdout] test scanner::global_deny_tests::global_deny_extensions_trigger_violation ... ok
[INFO] [stdout] test scanner::global_deny_tests::structure_scan_config_file_matches_global_deny_extension ... ok
[INFO] [stdout] test scanner::global_deny_tests::global_deny_patterns_trigger_violation ... ok
[INFO] [stdout] test scanner::global_deny_tests::structure_scan_config_file_matches_global_deny_pattern ... ok
[INFO] [stdout] test scanner::global_deny_tests::structure_scan_config_separates_dir_and_file_patterns ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::allowlist_rule_builder_with_naming_pattern ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::allowlist_rule_builder_invalid_regex_returns_error ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::allowlist_rule_naming_pattern_rejects_invalid_filename ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::allowlist_rule_no_naming_pattern_accepts_all ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::scan_with_structure_no_naming_violation_when_pattern_matches ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::scan_with_structure_combined_allowlist_and_naming_violations ... ok
[INFO] [stdout] test scanner::structure_config_tests::directory_only_deny_patterns_preserve_path_qualification ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::disallowed_file_does_not_trigger_naming_violation ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::scan_with_structure_naming_violation_includes_pattern ... ok
[INFO] [stdout] test scanner::structure_config_tests::global_deny_patterns_preserve_root_anchors_and_basename_patterns ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::scan_with_structure_detects_naming_violations ... ok
[INFO] [stdout] test scanner::naming_pattern_tests::allowlist_rule_naming_pattern_matches_valid_filename ... ok
[INFO] [stdout] test scanner::structure_config_tests::find_matching_allowlist_rule_returns_first_match ... ok
[INFO] [stdout] test scanner::structure_config_tests::non_recursive_file_glob_is_not_a_directory_prefix ... ok
[INFO] [stdout] test scanner::structure_config_tests::file_only_exclusion_does_not_prune_a_same_named_directory ... ok
[INFO] [stdout] test scanner::structure_config_tests::scan_result_default ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_empty_patterns_match_nothing ... ok
[INFO] [stdout] test scanner::structure_config_tests::scanner_exclusions_do_not_gain_implicit_basename_semantics ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_combined_patterns ... ok
[INFO] [stdout] test scanner::structure_config_tests::scanner_exclude_directory_pattern_is_anchored_to_its_logical_path ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_extracts_directory_prefixes ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_find_no_matching_rule ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_extracts_directory_prefixes_from_windows_paths ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_invalid_pattern_returns_error ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_find_matching_allowlist_rule ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_is_scanner_excluded_file ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_new_creates_config ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_pattern_without_trailing_glob ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_records_node_modules_directory_prefix ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_strips_only_one_terminal_recursive_suffix ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_preserves_complete_directory_prefix_globs ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_with_scanner_exclude ... ok
[INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_records_target_directory_prefix ... ok
[INFO] [stdout] test scanner::structure_scan_tests::allow_mode_tests::scan_with_structure_global_allow_dirs_permits_matching ... ok
[INFO] [stdout] test scanner::structure_scan_tests::allow_mode_tests::scan_with_structure_global_allow_extensions_rejects_non_matching ... ok
[INFO] [stdout] test scanner::structure_scan_tests::allow_mode_tests::scan_with_structure_global_allow_extensions_permits_matching_files ... ok
[INFO] [stdout] test scanner::structure_scan_tests::allow_mode_tests::scan_with_structure_global_allow_dirs_rejects_non_matching ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::count_excluded_file_is_exempt_from_quota_but_not_from_policy ... ok
[INFO] [stdout] test scanner::structure_scan_tests::allow_mode_tests::scan_with_structure_per_rule_allow_dirs_permits_matching ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_all_with_structure_merges_results ... ok
[INFO] [stdout] test scanner::structure_scan_tests::allow_mode_tests::scan_with_structure_per_rule_allow_dirs_rejects_non_matching ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_allowlist_violation_includes_rule_pattern ... ok
[INFO] [stdout] test scanner::directory_tests::file_scanner_default_scan_all_uses_scan ... ok
[INFO] [stdout] test scanner::filter::tests::filter_by_extension ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_depth_zero_at_root ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_counts_subdirectories ... ok
[INFO] [stdout] test scanner::structure_scan_tests::allow_mode_tests::scan_with_structure_global_allow_files_permits_matching ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_collects_files_and_stats ... ok
[INFO] [stdout] test scanner::structure_scan_tests::allow_mode_tests::scan_with_structure_per_rule_allow_files_works ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_handles_files_at_root ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_trend_with_since ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_detects_allowlist_violations ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_files_subcommand ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_trend_subcommand ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_multiple_dirs_at_same_level ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_empty_directory ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_dir_excluded_by_name_match ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_filter_excludes_files ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_no_violation_for_matching_files ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_summary_json_format ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_nested_directory_depth ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_with_include_paths ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_summary_subcommand ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_files_all ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_records_raw_child_inventory ... ok
[INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_trend_json_excludes_file_list ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_tracks_depth ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_with_scanner_exclude_skips_entirely ... ok
[INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_respects_scanner_exclude ... ok
[INFO] [stdout] test scanner::structure_scan_tests::dot_prefix_scope_tests::scan_with_dot_prefix_detects_deny_dirs_violation ... ok
[INFO] [stdout] test scanner::structure_scan_tests::dot_prefix_scope_tests::scan_from_subdirectory_still_detects_violations ... ok
[INFO] [stdout] test scanner::structure_scan_tests::dot_prefix_scope_tests::scan_with_dot_prefix_detects_deny_files_violation ... ok
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::non_recursive_file_glob_does_not_prune_its_parent_directory ... ok
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::scan_with_structure_gitignore_scanner_exclude_prunes_directory ... ok
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::unrooted_relative_scan_retains_identity_path_compatibility ... FAILED
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::dot_prefixed_directory_exclusion_is_anchored_to_the_scan_root ... ok
[INFO] [stdout] test state::tests::atomic_write_creates_file ... ok
[INFO] [stdout] test state::tests::atomic_write_cleans_up_temp_files ... ok
[INFO] [stdout] test state::tests::atomic_write_preserves_original_on_error ... ok
[INFO] [stdout] test state::tests::current_unix_timestamp_is_reasonable ... ok
[INFO] [stdout] test state::tests::detect_state_dir_in_git_repo_returns_git_path ... ok
[INFO] [stdout] test state::tests::detect_state_dir_outside_git_returns_fallback ... ok
[INFO] [stdout] test state::tests::atomic_write_creates_parent_directories ... ok
[INFO] [stdout] test state::tests::discover_project_root_finds_config_file ... ok
[INFO] [stdout] test state::tests::detect_state_dir_with_git_file_uses_safe_fallback ... ok
[INFO] [stdout] test state::tests::baseline_path_construction ... ok
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::unrooted_absolute_scan_prunes_only_the_anchored_directory_prefix ... ok
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::scan_with_structure_scanner_exclude_multiple_patterns ... ok
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::scan_with_structure_excluded_dir_not_counted_in_parent_stats ... ok
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::scan_with_structure_scanner_exclude_dotgit_pattern ... ok
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::scan_with_structure_scanner_exclude_prunes_directory_subtree ... ok
[INFO] [stdout] test state::tests::cache_path_construction ... ok
[INFO] [stdout] test state::tests::cache_path_in_git_repo ... ok
[INFO] [stdout] test state::tests::discover_project_root_prefers_git_over_config ... ok
[INFO] [stdout] test state::tests::lock_error_from_io_error ... ok
[INFO] [stdout] test state::tests::lock_error_source_io_returns_source ... ok
[INFO] [stdout] test state::tests::lock_error_source_timeout_returns_none ... ok
[INFO] [stdout] test state::tests::discover_project_root_finds_git_directory ... ok
[INFO] [stdout] test state::tests::discover_project_root_stops_at_first_marker ... ok
[INFO] [stdout] test state::tests::save_outcome_equality ... ok
[INFO] [stdout] test state::tests::save_outcome_is_saved ... ok
[INFO] [stdout] test state::tests::multiple_shared_locks_allowed ... ok
[INFO] [stdout] test state::tests::save_outcome_is_skipped ... ok
[INFO] [stdout] test state::tests::discover_project_root_finds_git_file ... ok
[INFO] [stdout] test state::tests::ensure_parent_dir_creates_nested_directory ... ok
[INFO] [stdout] test state::tests::ensure_parent_dir_handles_root_path ... ok
[INFO] [stdout] test state::tests::shared_lock_guard_acquires_lock_successfully ... ok
[INFO] [stdout] test state::tests::shared_lock_succeeds_on_uncontested_file ... ok
[INFO] [stdout] test state::tests::ensure_parent_dir_succeeds_when_exists ... ok
[INFO] [stdout] test state::tests::exclusive_lock_succeeds_on_uncontested_file ... ok
[INFO] [stdout] test state::tests::history_path_in_git_repo ... ok
[INFO] [stdout] test state::tests::history_path_construction ... ok
[INFO] [stdout] test state::tests::lock_error_display_io ... ok
[INFO] [stdout] test state::tests::lock_error_display_timeout ... ok
[INFO] [stdout] test state::tests::try_current_unix_timestamp_returns_some ... ok
[INFO] [stdout] test stats::duration::tests::test_case_insensitive ... ok
[INFO] [stdout] test stats::duration::tests::test_invalid_unit_error ... ok
[INFO] [stdout] test stats::duration::tests::test_missing_number_error ... ok
[INFO] [stdout] test stats::duration::tests::test_parse_days ... ok
[INFO] [stdout] test stats::duration::tests::test_empty_string_error ... ok
[INFO] [stdout] test stats::duration::tests::test_invalid_number_error ... ok
[INFO] [stdout] test stats::duration::tests::test_parse_hours ... ok
[INFO] [stdout] test stats::duration::tests::test_parse_minutes ... ok
[INFO] [stdout] test state::tests::atomic_write_overwrites_existing_file ... ok
[INFO] [stdout] test state::tests::unlock_file_is_idempotent ... ok
[INFO] [stdout] test stats::trend::tests::delta_tests::test_compute_decrease ... ok
[INFO] [stdout] test stats::trend::tests::delta_tests::test_compute_increase ... ok
[INFO] [stdout] test stats::trend::tests::delta_tests::test_default ... ok
[INFO] [stdout] test stats::trend::tests::delta_tests::test_no_changes ... ok
[INFO] [stdout] test stats::trend::tests::delta_tests::test_compute_copies_git_context ... ok
[INFO] [stdout] test stats::trend::tests::entry_tests::test_equality ... ok
[INFO] [stdout] test stats::trend::tests::entry_tests::test_new ... ok
[INFO] [stdout] test stats::trend::tests::entry_tests::test_with_git_context ... ok
[INFO] [stdout] test stats::trend::tests::entry_tests::test_with_git_context_commit_only ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_add_entry ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_add_if_allowed_with_context ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_add_if_allowed_with_context_respects_interval ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_add_with_context ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_add_with_context_detached_head ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_add ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_compute_delta_empty ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_compute_delta_with_entry ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_equality ... ok
[INFO] [stdout] test stats::duration::tests::test_parse_seconds ... ok
[INFO] [stdout] test stats::duration::tests::test_missing_unit_error ... ok
[INFO] [stdout] test stats::duration::tests::test_parse_weeks ... ok
[INFO] [stdout] test stats::duration::tests::test_whitespace_trimmed ... ok
[INFO] [stdout] test stats::duration::tests::test_zero_duration_error ... ok
[INFO] [stdout] test stats::trend::tests::entry_tests::test_with_timestamp ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_add_with_context_none ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_load_or_default_invalid_json ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_entries ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_default_trait ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_new ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_compute_delta_since_finds_entry ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_compute_delta_since_no_entry_old_enough ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_load_or_default_nonexistent ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_compute_delta_since_empty_history ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_find_entry_at_or_before_empty_history ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_compute_delta_since_exact_boundary ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_find_entry_at_or_before_single_entry_after ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_find_entry_at_or_before_single_entry_before ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_add_if_allowed_respects_interval ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_combined_age_and_entries ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_load_nonexistent_returns_error ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_git_context_preserved_in_save_load ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_max_age_days_removes_all_old ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_max_age_zero ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_max_entries ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_max_age_days ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_max_entries_no_excess ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_compute_delta_since_picks_nearest_entry ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_find_entry_at_or_before_all_entries_after ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_max_entries_zero ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_no_config_no_changes ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_find_entry_at_or_before_all_entries_before ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_config_partial_toml ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_find_entry_at_or_before_multiple_entries_finds_nearest ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_config_serialization ... ok
[INFO] [stdout] test stats::trend::tests::query_tests::test_find_entry_at_or_before_single_entry_exact ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_config_toml_deserialization ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_should_add_empty_history_always_true ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_should_add_no_min_interval_always_true ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_should_add_after_interval_returns_true ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_code_below_default_threshold_not_significant ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_save_and_load ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_custom_threshold_exceeded ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_file_change_always_significant ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_file_removed_always_significant ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_negative_code_below_threshold ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_negative_code_delta_uses_absolute_value ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_no_changes_not_significant ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_custom_threshold ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_should_add_exactly_at_interval_returns_true ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_should_add_with_zero_interval ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_should_add_within_interval_returns_false ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_code_above_default_threshold ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_code_at_default_threshold_not_significant ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_zero_delta_with_zero_threshold ... ok
[INFO] [stdout] test tests::exit_codes_are_distinct ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_only_comment_blank_changes_not_significant ... ok
[INFO] [stdout] test stats::trend::tests::history_tests::test_load_or_default_valid_file ... ok
[INFO] [stdout] test stats::trend::tests::significance_tests::test_zero_threshold_always_significant ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_save_with_retention_applies_cleanup ... ok
[INFO] [stdout] test stats::trend::tests::retention_tests::test_save_with_retention_age_based ... ok
[INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::default_scanner_config_excludes_git_directory ... ok
[INFO] [stdout] test state::tests::shared_lock_guard_unlocks_on_drop ... ok
[INFO] [stdout] test state::tests::exclusive_lock_times_out_when_held ... ok
[INFO] [stderr] ⚠ Warning: Failed to acquire write lock on test file
[INFO] [stdout] test state::tests::atomic_write_returns_skipped_on_lock_timeout ... ok
[INFO] [stderr]   × /tmp/.tmpreF0ru/test.json: lock acquisition timed out
[INFO] [stdout] test state::tests::shared_lock_times_out_when_exclusive_lock_held ... ok
[INFO] [stderr]   help: test file save skipped
[INFO] [stderr] ⚠ Warning: Failed to acquire read lock on test file
[INFO] [stderr]   × /tmp/.tmpzL2ZHS/test.json: lock acquisition timed out
[INFO] [stderr]   help: test file may be stale if written concurrently
[INFO] [stdout] test state::tests::shared_lock_guard_reports_not_locked_on_timeout ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- git::context::tests::git_context_from_current_repo stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'git::context::tests::git_context_from_current_repo' (4027) panicked at src/git/context.rs:60:9:
[INFO] [stdout] assertion failed: context.is_some()
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5ce9c03c29c1 - std[617be2ca0a6fd877]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5ce9c03c29c1 - std[617be2ca0a6fd877]::backtrace_rs::backtrace::trace_unsynchronized::<std[617be2ca0a6fd877]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5ce9c03c29c1 - std[617be2ca0a6fd877]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5ce9c03c29c1 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5ce9c03dcd5a - <core[a373ad73a504971]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5ce9c03dcd5a - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    6:     0x5ce9c03c860c - core[a373ad73a504971]::io::write::default_write_fmt::<alloc[2e1b2a31b91974c5]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/io/write.rs:402:11
[INFO] [stdout]    7:     0x5ce9c03c860c - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/io/write.rs:335:13
[INFO] [stdout]    8:     0x5ce9c03996d6 - <std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5ce9c03996d6 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:289:27
[INFO] [stdout]   10:     0x5ce9c03b8e69 - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:313:9
[INFO] [stdout]   11:     0x5ce9bf9bb930 - <alloc[2e1b2a31b91974c5]::boxed::Box<dyn for<'a, 'b> core[a373ad73a504971]::ops::function::Fn<(&'a std[617be2ca0a6fd877]::panic::PanicHookInfo<'b>,), Output = ()> + core[a373ad73a504971]::marker::Sync + core[a373ad73a504971]::marker::Send> as core[a373ad73a504971]::ops::function::Fn<(&std[617be2ca0a6fd877]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/alloc/src/boxed.rs:2328:9
[INFO] [stdout]   12:     0x5ce9bf9bb930 - test[aada8e7e76ba119b]::test_main_inner::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:137:21
[INFO] [stdout]   13:     0x5ce9c03b9192 - <alloc[2e1b2a31b91974c5]::boxed::Box<dyn for<'a, 'b> core[a373ad73a504971]::ops::function::Fn<(&'a std[617be2ca0a6fd877]::panic::PanicHookInfo<'b>,), Output = ()> + core[a373ad73a504971]::marker::Sync + core[a373ad73a504971]::marker::Send> as core[a373ad73a504971]::ops::function::Fn<(&std[617be2ca0a6fd877]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/alloc/src/boxed.rs:2328:9
[INFO] [stdout]   14:     0x5ce9c03b9192 - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:819:13
[INFO] [stdout]   15:     0x5ce9c03997b4 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:678:13
[INFO] [stdout]   16:     0x5ce9c0391f79 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5ce9c039a66d - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:676:5
[INFO] [stdout]   18:     0x5ce9c03dd62c - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5ce9c03dd5f2 - core[a373ad73a504971]::panicking::panic
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/panicking.rs:150:5
[INFO] [stdout]   20:     0x5ce9beebe437 - sloc_guard[a63f84eb9560a537]::git::context::tests::git_context_from_current_repo
[INFO] [stdout]                                at /opt/rustwide/workdir/src/git/context.rs:60:9
[INFO] [stdout]   21:     0x5ce9beeac837 - sloc_guard[a63f84eb9560a537]::git::context::tests::git_context_from_current_repo::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/git/context.rs:54:39
[INFO] [stdout]   22:     0x5ce9bef80af6 - <sloc_guard[a63f84eb9560a537]::git::context::tests::git_context_from_current_repo::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x5ce9bf9aed7b - <fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String> as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5ce9bf9aed7b - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:701:18
[INFO] [stdout]   25:     0x5ce9bf9bbf55 - test[aada8e7e76ba119b]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:724:74
[INFO] [stdout]   26:     0x5ce9bf9bbf55 - <core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<test[aada8e7e76ba119b]::run_test_in_process::{closure#0}> as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   27:     0x5ce9bf9bbf55 - std[617be2ca0a6fd877]::panicking::catch_unwind::do_call::<core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<test[aada8e7e76ba119b]::run_test_in_process::{closure#0}>, core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:573:43
[INFO] [stdout]   28:     0x5ce9bf9bbf55 - std[617be2ca0a6fd877]::panicking::catch_unwind::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<test[aada8e7e76ba119b]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:541:19
[INFO] [stdout]   29:     0x5ce9bf9bbf55 - std[617be2ca0a6fd877]::panic::catch_unwind::<core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<test[aada8e7e76ba119b]::run_test_in_process::{closure#0}>, core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panic.rs:359:14
[INFO] [stdout]   30:     0x5ce9bf9bbf55 - test[aada8e7e76ba119b]::run_test_in_process
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:724:27
[INFO] [stdout]   31:     0x5ce9bf9bbf55 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:645:43
[INFO] [stdout]   32:     0x5ce9bf9b5844 - test[aada8e7e76ba119b]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:675:41
[INFO] [stdout]   33:     0x5ce9bf9b5844 - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   34:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/thread/lifecycle.rs:70:13
[INFO] [stdout]   35:     0x5ce9bf9befe2 - <core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   36:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::panicking::catch_unwind::do_call::<core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:573:43
[INFO] [stdout]   37:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::panicking::catch_unwind::<(), core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:541:19
[INFO] [stdout]   38:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::panic::catch_unwind::<core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panic.rs:359:14
[INFO] [stdout]   39:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/thread/lifecycle.rs:68:26
[INFO] [stdout]   40:     0x5ce9bf9befe2 - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   41:     0x5ce9c03c15af - <alloc[2e1b2a31b91974c5]::boxed::Box<dyn core[a373ad73a504971]::ops::function::FnOnce<(), Output = ()> + core[a373ad73a504971]::marker::Send> as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/alloc/src/boxed.rs:2314:9
[INFO] [stdout]   42:     0x5ce9c03c15af - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/thread/unix.rs:127:17
[INFO] [stdout]   43:     0x79ddcf5c7dfa - <unknown>
[INFO] [stdout]   44:     0x79ddcf65b3d4 - clone
[INFO] [stdout]   45:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- scanner::structure_scan_tests::exclude_pruning_tests::unrooted_relative_scan_retains_identity_path_compatibility stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'scanner::structure_scan_tests::exclude_pruning_tests::unrooted_relative_scan_retains_identity_path_compatibility' (4959) panicked at src/scanner/structure_scan_tests/exclude_pruning_tests.rs:368:47:
[INFO] [stdout] called `Result::unwrap()` on an `Err` value: Custom { kind: ReadOnlyFilesystem, error: PathError { path: "/opt/rustwide/workdir/.tmpdsNQgR", err: Os { code: 30, kind: ReadOnlyFilesystem, message: "Read-only file system" } } }
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5ce9c03c29c1 - std[617be2ca0a6fd877]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5ce9c03c29c1 - std[617be2ca0a6fd877]::backtrace_rs::backtrace::trace_unsynchronized::<std[617be2ca0a6fd877]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5ce9c03c29c1 - std[617be2ca0a6fd877]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5ce9c03c29c1 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5ce9c03dcd5a - <core[a373ad73a504971]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5ce9c03dcd5a - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    6:     0x5ce9c03c860c - core[a373ad73a504971]::io::write::default_write_fmt::<alloc[2e1b2a31b91974c5]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/io/write.rs:402:11
[INFO] [stdout]    7:     0x5ce9c03c860c - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/io/write.rs:335:13
[INFO] [stdout]    8:     0x5ce9c03996d6 - <std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5ce9c03996d6 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:289:27
[INFO] [stdout]   10:     0x5ce9c03b8e69 - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:313:9
[INFO] [stdout]   11:     0x5ce9bf9bb930 - <alloc[2e1b2a31b91974c5]::boxed::Box<dyn for<'a, 'b> core[a373ad73a504971]::ops::function::Fn<(&'a std[617be2ca0a6fd877]::panic::PanicHookInfo<'b>,), Output = ()> + core[a373ad73a504971]::marker::Sync + core[a373ad73a504971]::marker::Send> as core[a373ad73a504971]::ops::function::Fn<(&std[617be2ca0a6fd877]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/alloc/src/boxed.rs:2328:9
[INFO] [stdout]   12:     0x5ce9bf9bb930 - test[aada8e7e76ba119b]::test_main_inner::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:137:21
[INFO] [stdout]   13:     0x5ce9c03b9192 - <alloc[2e1b2a31b91974c5]::boxed::Box<dyn for<'a, 'b> core[a373ad73a504971]::ops::function::Fn<(&'a std[617be2ca0a6fd877]::panic::PanicHookInfo<'b>,), Output = ()> + core[a373ad73a504971]::marker::Sync + core[a373ad73a504971]::marker::Send> as core[a373ad73a504971]::ops::function::Fn<(&std[617be2ca0a6fd877]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/alloc/src/boxed.rs:2328:9
[INFO] [stdout]   14:     0x5ce9c03b9192 - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:819:13
[INFO] [stdout]   15:     0x5ce9c0399782 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:685:13
[INFO] [stdout]   16:     0x5ce9c0391f79 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5ce9c039a66d - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:676:5
[INFO] [stdout]   18:     0x5ce9c03dd62c - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5ce9c03dd352 - core[a373ad73a504971]::result::unwrap_failed
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/result.rs:1870:5
[INFO] [stdout]   20:     0x5ce9bf077df9 - <core[a373ad73a504971]::result::Result<tempfile[2af9096c2da517b2]::dir::TempDir, core[a373ad73a504971]::io::error::Error>>::unwrap
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/result.rs:1232:23
[INFO] [stdout]   21:     0x5ce9bf077df9 - sloc_guard[a63f84eb9560a537]::scanner::structure_scan_tests::exclude_pruning_tests::unrooted_relative_scan_retains_identity_path_compatibility
[INFO] [stdout]                                at /opt/rustwide/workdir/src/scanner/structure_scan_tests/exclude_pruning_tests.rs:368:47
[INFO] [stdout]   22:     0x5ce9befff437 - sloc_guard[a63f84eb9560a537]::scanner::structure_scan_tests::exclude_pruning_tests::unrooted_relative_scan_retains_identity_path_compatibility::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/scanner/structure_scan_tests/exclude_pruning_tests.rs:365:64
[INFO] [stdout]   23:     0x5ce9bef834f6 - <sloc_guard[a63f84eb9560a537]::scanner::structure_scan_tests::exclude_pruning_tests::unrooted_relative_scan_retains_identity_path_compatibility::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5ce9bf9aed7b - <fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String> as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x5ce9bf9aed7b - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:701:18
[INFO] [stdout]   26:     0x5ce9bf9bbf55 - test[aada8e7e76ba119b]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:724:74
[INFO] [stdout]   27:     0x5ce9bf9bbf55 - <core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<test[aada8e7e76ba119b]::run_test_in_process::{closure#0}> as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   28:     0x5ce9bf9bbf55 - std[617be2ca0a6fd877]::panicking::catch_unwind::do_call::<core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<test[aada8e7e76ba119b]::run_test_in_process::{closure#0}>, core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:573:43
[INFO] [stdout]   29:     0x5ce9bf9bbf55 - std[617be2ca0a6fd877]::panicking::catch_unwind::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<test[aada8e7e76ba119b]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:541:19
[INFO] [stdout]   30:     0x5ce9bf9bbf55 - std[617be2ca0a6fd877]::panic::catch_unwind::<core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<test[aada8e7e76ba119b]::run_test_in_process::{closure#0}>, core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x5ce9bf9bbf55 - test[aada8e7e76ba119b]::run_test_in_process
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:724:27
[INFO] [stdout]   32:     0x5ce9bf9bbf55 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:645:43
[INFO] [stdout]   33:     0x5ce9bf9b5844 - test[aada8e7e76ba119b]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/test/src/lib.rs:675:41
[INFO] [stdout]   34:     0x5ce9bf9b5844 - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/thread/lifecycle.rs:70:13
[INFO] [stdout]   36:     0x5ce9bf9befe2 - <core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   37:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::panicking::catch_unwind::do_call::<core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:573:43
[INFO] [stdout]   38:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::panicking::catch_unwind::<(), core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panicking.rs:541:19
[INFO] [stdout]   39:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::panic::catch_unwind::<core[a373ad73a504971]::panic::unwind_safe::AssertUnwindSafe<std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x5ce9bf9befe2 - std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/thread/lifecycle.rs:68:26
[INFO] [stdout]   41:     0x5ce9bf9befe2 - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x5ce9c03c15af - <alloc[2e1b2a31b91974c5]::boxed::Box<dyn core[a373ad73a504971]::ops::function::FnOnce<(), Output = ()> + core[a373ad73a504971]::marker::Send> as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/alloc/src/boxed.rs:2314:9
[INFO] [stdout]   43:     0x5ce9c03c15af - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/e3feeb59cd1bdd011a2bfcc0747b55125d9b8527/library/std/src/sys/thread/unix.rs:127:17
[INFO] [stdout]   44:     0x79ddcf5c7dfa - <unknown>
[INFO] [stdout]   45:     0x79ddcf65b3d4 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     git::context::tests::git_context_from_current_repo
[INFO] [stdout]     scanner::structure_scan_tests::exclude_pruning_tests::unrooted_relative_scan_retains_identity_path_compatibility
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 2179 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.28s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--lib`
[INFO] running `Command { std: "docker" "inspect" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d", kill_on_drop: false }`
[INFO] [stdout] 519c190bbba829baea7b2d7386c02011727a555a22782f73d1ddccd112858c4d
