[INFO] cloning repository https://github.com/doraemonkeys/sloc-guard [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/doraemonkeys/sloc-guard" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdoraemonkeys%2Fsloc-guard", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdoraemonkeys%2Fsloc-guard'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] b0fb84ee174cc1bf10abe6015f282be75f795662 [INFO] testing doraemonkeys/sloc-guard against try#8da20828b6ea601dfd8e2448cb50ace88876bd78 for pr-150933 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdoraemonkeys%2Fsloc-guard" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/doraemonkeys/sloc-guard [INFO] finished tweaking git repo https://github.com/doraemonkeys/sloc-guard [INFO] tweaked toml for git repo https://github.com/doraemonkeys/sloc-guard written to /workspace/builds/worker-7-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/doraemonkeys/sloc-guard on toolchain 8da20828b6ea601dfd8e2448cb50ace88876bd78 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/doraemonkeys/sloc-guard already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 8df1c6de6668001adb197fc4b2a8532e92a2d7f5e6b901a199e67ae2263963d6 [INFO] running `Command { std: "docker" "start" "-a" "8df1c6de6668001adb197fc4b2a8532e92a2d7f5e6b901a199e67ae2263963d6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "8df1c6de6668001adb197fc4b2a8532e92a2d7f5e6b901a199e67ae2263963d6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8df1c6de6668001adb197fc4b2a8532e92a2d7f5e6b901a199e67ae2263963d6", kill_on_drop: false }` [INFO] [stdout] 8df1c6de6668001adb197fc4b2a8532e92a2d7f5e6b901a199e67ae2263963d6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 2041ede9297d39eadc97266a53e7dd3395b91c58b6a84c181df2f037ce4dc4da [INFO] running `Command { std: "docker" "start" "-a" "2041ede9297d39eadc97266a53e7dd3395b91c58b6a84c181df2f037ce4dc4da", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.103 [INFO] [stderr] Compiling unicode-ident v1.0.22 [INFO] [stderr] Compiling quote v1.0.42 [INFO] [stderr] Compiling libc v0.2.178 [INFO] [stderr] Compiling memchr v2.7.6 [INFO] [stderr] Compiling regex-syntax v0.8.8 [INFO] [stderr] Compiling smallvec v1.15.1 [INFO] [stderr] Compiling thiserror v2.0.17 [INFO] [stderr] Compiling fastrand v2.3.0 [INFO] [stderr] Compiling gix-trace v0.1.16 [INFO] [stderr] Compiling tinyvec v1.10.0 [INFO] [stderr] Compiling crc32fast v1.5.0 [INFO] [stderr] Compiling zlib-rs v0.5.5 [INFO] [stderr] Compiling itoa v1.0.16 [INFO] [stderr] Compiling bitflags v2.10.0 [INFO] [stderr] Compiling heapless v0.8.0 [INFO] [stderr] Compiling hash32 v0.3.1 [INFO] [stderr] Compiling sha1 v0.10.6 [INFO] [stderr] Compiling foldhash v0.2.0 [INFO] [stderr] Compiling jiff v0.2.17 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Compiling linux-raw-sys v0.11.0 [INFO] [stderr] Compiling bytes v1.11.0 [INFO] [stderr] Compiling sha1-checked v0.10.0 [INFO] [stderr] Compiling find-msvc-tools v0.1.6 [INFO] [stderr] Compiling unicode-normalization v0.1.25 [INFO] [stderr] Compiling unicode-bom v2.0.3 [INFO] [stderr] Compiling aho-corasick v1.1.4 [INFO] [stderr] Compiling faster-hex v0.10.0 [INFO] [stderr] Compiling winnow v0.7.14 [INFO] [stderr] Compiling cc v1.2.51 [INFO] [stderr] Compiling futures-sink v0.3.31 [INFO] [stderr] Compiling kstring v2.0.2 [INFO] [stderr] Compiling rustls-pki-types v1.13.2 [INFO] [stderr] Compiling http v1.4.0 [INFO] [stderr] Compiling futures-io v0.3.31 [INFO] [stderr] Compiling slab v0.4.11 [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 subtle v2.6.1 [INFO] [stderr] Compiling anstyle-parse v0.2.7 [INFO] [stderr] Compiling syn v2.0.111 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling regex-automata v0.4.13 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling log v0.4.29 [INFO] [stderr] Compiling anstyle-query v1.1.5 [INFO] [stderr] Compiling is_terminal_polyfill v1.70.2 [INFO] [stderr] Compiling portable-atomic v1.12.0 [INFO] [stderr] Compiling colorchoice v1.0.4 [INFO] [stderr] Compiling clru v0.6.2 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling memmap2 v0.9.9 [INFO] [stderr] Compiling socket2 v0.6.1 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling gix-sec v0.12.2 [INFO] [stderr] Compiling http-body v1.0.1 [INFO] [stderr] Compiling getrandom v0.2.16 [INFO] [stderr] Compiling filetime v0.2.26 [INFO] [stderr] Compiling anstyle v1.0.13 [INFO] [stderr] Compiling prodash v30.0.1 [INFO] [stderr] Compiling tokio v1.48.0 [INFO] [stderr] Compiling arc-swap v1.8.0 [INFO] [stderr] Compiling anstream v0.6.21 [INFO] [stderr] Compiling webpki-roots v1.0.4 [INFO] [stderr] Compiling iri-string v0.7.9 [INFO] [stderr] Compiling clap_lex v0.7.6 [INFO] [stderr] Compiling ryu v1.0.21 [INFO] [stderr] Compiling serde_json v1.0.147 [INFO] [stderr] Compiling unicode-width v0.2.2 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling dirs-sys v0.5.0 [INFO] [stderr] Compiling console v0.16.2 [INFO] [stderr] Compiling tempfile v3.24.0 [INFO] [stderr] Compiling clap_builder v4.5.53 [INFO] [stderr] Compiling http-body-util v0.1.3 [INFO] [stderr] Compiling toml_parser v1.0.6+spec-1.1.0 [INFO] [stderr] Compiling toml_datetime v0.7.5+spec-1.1.0 [INFO] [stderr] Compiling serde_spanned v1.0.4 [INFO] [stderr] Compiling unit-prefix v0.5.2 [INFO] [stderr] Compiling toml_writer v1.0.6+spec-1.1.0 [INFO] [stderr] Compiling zmij v0.1.9 [INFO] [stderr] Compiling indicatif v0.18.3 [INFO] [stderr] Compiling rayon v1.11.0 [INFO] [stderr] Compiling directories v6.0.0 [INFO] [stderr] Compiling toml v0.9.10+spec-1.1.0 [INFO] [stderr] Compiling indexmap v2.12.1 [INFO] [stderr] Compiling sha2 v0.10.9 [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 hyper v1.8.1 [INFO] [stderr] Compiling tower v0.5.2 [INFO] [stderr] Compiling gix-utils v0.3.1 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling globset v0.4.18 [INFO] [stderr] Compiling hyper-util v0.1.19 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling yoke v0.8.1 [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 gix-path v0.10.22 [INFO] [stderr] Compiling gix-quote v0.6.1 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling gix-packetline v0.20.0 [INFO] [stderr] Compiling gix-bitmap v0.2.15 [INFO] [stderr] Compiling gix-features v0.45.0 [INFO] [stderr] Compiling gix-actor v0.36.1 [INFO] [stderr] Compiling zerovec v0.11.5 [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-config-value v0.16.0 [INFO] [stderr] Compiling gix-command v0.6.3 [INFO] [stderr] Compiling gix-url v0.34.0 [INFO] [stderr] Compiling gix-hashtable v0.11.0 [INFO] [stderr] Compiling gix-commitgraph v0.31.0 [INFO] [stderr] Compiling gix-transport v0.51.0 [INFO] [stderr] Compiling tinystr v0.8.2 [INFO] [stderr] Compiling potential_utf v0.1.4 [INFO] [stderr] Compiling ignore v0.4.25 [INFO] [stderr] Compiling gix-object v0.53.0 [INFO] [stderr] Compiling gix-tempfile v20.0.0 [INFO] [stderr] Compiling icu_collections v2.1.1 [INFO] [stderr] Compiling gix-attributes v0.29.0 [INFO] [stderr] Compiling gix-ignore v0.18.0 [INFO] [stderr] Compiling clap v4.5.53 [INFO] [stderr] Compiling gix-lock v20.0.0 [INFO] [stderr] Compiling icu_locale_core v2.1.1 [INFO] [stderr] Compiling gix-shallow v0.7.0 [INFO] [stderr] Compiling rustls-webpki v0.103.8 [INFO] [stderr] Compiling gix-pathspec v0.14.0 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling icu_provider v2.1.1 [INFO] [stderr] Compiling icu_normalizer v2.1.1 [INFO] [stderr] Compiling icu_properties v2.1.2 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [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 gix-discover v0.44.0 [INFO] [stderr] Compiling gix-config v0.49.0 [INFO] [stderr] Compiling gix-protocol v0.54.0 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling gix-worktree v0.45.0 [INFO] [stderr] Compiling url v2.5.7 [INFO] [stderr] Compiling gix-submodule v0.23.0 [INFO] [stderr] Compiling gix-dir v0.18.0 [INFO] [stderr] Compiling gix-odb v0.73.0 [INFO] [stderr] Compiling gix v0.76.0 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling sloc-guard v0.3.3 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 20s [INFO] running `Command { std: "docker" "inspect" "2041ede9297d39eadc97266a53e7dd3395b91c58b6a84c181df2f037ce4dc4da", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "2041ede9297d39eadc97266a53e7dd3395b91c58b6a84c181df2f037ce4dc4da", kill_on_drop: false }` [INFO] [stdout] 2041ede9297d39eadc97266a53e7dd3395b91c58b6a84c181df2f037ce4dc4da [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 90a6a017bdd618a7bccf21ebae1820a861f739f7252a798adf37b8625abf761f [INFO] running `Command { std: "docker" "start" "-a" "90a6a017bdd618a7bccf21ebae1820a861f739f7252a798adf37b8625abf761f", kill_on_drop: false }` [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling predicates-core v1.0.9 [INFO] [stderr] Compiling normalize-line-endings v0.3.0 [INFO] [stderr] Compiling termtree v0.5.1 [INFO] [stderr] Compiling assert_cmd v2.1.1 [INFO] [stderr] Compiling difflib v0.4.0 [INFO] [stderr] Compiling wait-timeout v0.2.1 [INFO] [stderr] Compiling predicates-tree v1.0.12 [INFO] [stderr] Compiling float-cmp v0.10.0 [INFO] [stderr] Compiling predicates v3.1.3 [INFO] [stderr] Compiling sloc-guard v0.3.3 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 27.08s [INFO] running `Command { std: "docker" "inspect" "90a6a017bdd618a7bccf21ebae1820a861f739f7252a798adf37b8625abf761f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "90a6a017bdd618a7bccf21ebae1820a861f739f7252a798adf37b8625abf761f", kill_on_drop: false }` [INFO] [stdout] 90a6a017bdd618a7bccf21ebae1820a861f739f7252a798adf37b8625abf761f [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+8da20828b6ea601dfd8e2448cb50ace88876bd78" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 917a4a27d61ea2d13d9a7e2233345cad37aa49097ee83beb86e2b1e19214cac0 [INFO] running `Command { std: "docker" "start" "-a" "917a4a27d61ea2d13d9a7e2233345cad37aa49097ee83beb86e2b1e19214cac0", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.52s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/sloc_guard-e7c5c7ad6417bf0c) [INFO] [stdout] [INFO] [stdout] running 1992 tests [INFO] [stdout] test analyzer::parser::c_tests::test_cpp_parser_class_methods ... ok [INFO] [stdout] test analyzer::parser::go_tests::test_go_parser_special_functions ... ok [INFO] [stdout] test analyzer::parser::go_tests::test_go_parser_multiple_returns ... ok [INFO] [stdout] test analyzer::parser::go_tests::test_go_parser_receiver_types ... ok [INFO] [stdout] test analyzer::parser::c_tests::test_c_parser_pointer_returns ... ok [INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_arrow_variations ... ok [INFO] [stdout] test analyzer::parser::go_tests::test_go_parser ... ok [INFO] [stdout] test analyzer::parser::c_tests::test_cpp_parser_modern_features ... ok [INFO] [stdout] test analyzer::parser::go_tests::test_go_parser_variadic ... 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_templates ... ok [INFO] [stdout] test analyzer::parser::c_tests::test_c_parser_modifiers ... 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::js_tests::test_js_parser ... ok [INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_function_variations ... ok [INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_react_patterns ... ok [INFO] [stdout] test analyzer::parser::rust_tests::test_line_number_accuracy ... ok [INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_class_methods ... ok [INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_decorated_functions ... ok [INFO] [stdout] test analyzer::parser::js_tests::test_js_parser_default_export ... ok [INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_dunder_methods ... 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 ... ok [INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_nested_functions ... ok [INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_type_hints ... ok [INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_nested_braces ... ok [INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_with_docstrings ... ok [INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_visibility_modifiers ... ok [INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_trait_impl ... ok [INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_generics_and_lifetimes ... ok [INFO] [stdout] test analyzer::parser::rust_tests::test_rust_parser_unsafe_and_const ... ok [INFO] [stdout] test analyzer::split::tests::test_split_analyzer_generates_chunks ... ok [INFO] [stdout] test analyzer::parser::python_tests::test_python_parser_multiline_signature ... ok [INFO] [stdout] test analyzer::split::tests::test_split_analyzer_no_functions ... 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::rust_tests::test_rust_parser ... ok [INFO] [stdout] test analyzer::tests::generate_split_suggestions_skips_passed ... ok [INFO] [stdout] test analyzer::tests::generate_split_suggestions_skips_unknown_extension ... ok [INFO] [stdout] test baseline::tests::baseline_entry_content_constructor ... ok [INFO] [stdout] test analyzer::tests::generate_split_suggestions_skips_missing_file ... ok [INFO] [stdout] test baseline::tests::compute_content_hash_different_content_different_hash ... ok [INFO] [stdout] test baseline::tests::new_creates_empty_baseline ... ok [INFO] [stdout] test baseline::tests::compute_content_hash_produces_consistent_result ... ok [INFO] [stdout] test baseline::tests::compute_file_hash_nonexistent_returns_error ... ok [INFO] [stdout] test baseline::tests::contains_returns_correct_result ... ok [INFO] [stdout] test baseline::tests::files_returns_all_entries ... ok [INFO] [stdout] test baseline::tests::default_creates_new_baseline ... ok [INFO] [stdout] test baseline::tests::remove_entry ... ok [INFO] [stdout] test baseline::tests::set_content_and_get_entry ... ok [INFO] [stdout] test baseline::tests::remove_nonexistent_returns_none ... ok [INFO] [stdout] test baseline::tests::len_and_is_empty ... ok [INFO] [stdout] test baseline::tests::get_nonexistent_entry_returns_none ... ok [INFO] [stdout] test analyzer::split::tests::test_split_analyzer_single_chunk_no_suggestion ... ok [INFO] [stdout] test baseline::tests::set_content_updates_existing_entry ... ok [INFO] [stdout] test baseline::tests::set_generic_entry ... ok [INFO] [stdout] test cache::tests::test_cache_entry_metadata_matches ... ok [INFO] [stdout] test baseline::tests::load_nonexistent_file_returns_error ... ok [INFO] [stdout] test cache::tests::test_cache_get_if_metadata_matches ... ok [INFO] [stdout] test cache::tests::test_cache_files ... ok [INFO] [stdout] test baseline::tests::set_structure_and_get_entry ... ok [INFO] [stdout] test cache::tests::test_cache_is_valid ... ok [INFO] [stdout] test baseline::tests::baseline_entry_structure_constructor ... ok [INFO] [stdout] test cache::tests::test_cache_default ... ok [INFO] [stdout] test cache::tests::test_cache_entry_new ... ok [INFO] [stdout] test cache::tests::test_cache_get_if_valid ... ok [INFO] [stdout] test cache::tests::test_cache_new ... 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_compute_config_hash_changes_with_custom_languages ... ok [INFO] [stdout] test cache::tests::test_compute_config_hash ... ok [INFO] [stdout] test cache::tests::test_line_stats_from_cached ... ok [INFO] [stdout] test checker::structure::check_tests::basic_tests::check_empty_stats_returns_no_violations ... ok [INFO] [stdout] test cache::tests::test_compute_config_hash_ignores_non_counting_settings ... 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::check_under_limit_returns_no_violations ... 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::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::violation_type_equality ... ok [INFO] [stdout] test checker::structure::check_tests::basic_tests::violations_sorted_by_path ... ok [INFO] [stdout] test checker::structure::check_tests::basic_tests::checker_enabled_with_rules ... 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::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::invalid_rule_max_depth_returns_error ... 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::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_false_uses_absolute_depth ... ok [INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_moving_base_works ... ok [INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_saturating_sub_for_shallow_paths ... ok [INFO] [stdout] test cache::tests::test_cache_load_nonexistent ... ok [INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_with_wildcard_in_middle ... ok [INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_warn_threshold ... ok [INFO] [stdout] test checker::structure::check_tests::depth_tests::rule_overrides_global_depth_limit ... 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::limit_tests::check_over_dir_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::depth_tests::relative_depth_with_double_star_at_start ... ok [INFO] [stdout] test checker::structure::check_tests::depth_tests::relative_depth_violates_when_too_deep ... ok [INFO] [stdout] test baseline::tests::load_succeeds_with_shared_lock_held ... ok [INFO] [stdout] test baseline::tests::saved_json_is_readable ... ok [INFO] [stdout] test baseline::tests::save_and_load_baseline ... ok [INFO] [stdout] test baseline::tests::compute_file_hash_works ... ok [INFO] [stdout] test checker::structure::check_tests::limit_tests::check_both_limits_exceeded_returns_both_violations ... ok [INFO] [stdout] test baseline::tests::mixed_content_and_structure_entries ... ok [INFO] [stdout] test cache::tests::test_cache_load_invalid_json ... ok [INFO] [stdout] test checker::structure::check_tests::limit_tests::check_over_file_limit_returns_violation ... 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::limit_tests::invalid_max_dirs_value_returns_error ... 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_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::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::default_warn_threshold_is_0_8 ... 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::warn_dirs_threshold_overrides_global ... 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_files_threshold_overrides_global ... 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::limit_tests::rule_inherits_granular_threshold_from_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::warn_threshold_dir_count ... ok [INFO] [stdout] test checker::structure::check_tests::limit_tests::rule_overrides_global_limit ... 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::unconfigured_max_dirs_allows_unlimited_directories ... 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_no_warning_below_threshold ... 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::limit_tests::warn_threshold_rule_overrides_global ... ok [INFO] [stdout] test checker::structure::check_tests::limit_tests::rule_inherits_unset_limit_from_global ... ok [INFO] [stdout] test checker::structure::check_tests::rule_priority_tests::explain_reports_last_matching_rule ... ok [INFO] [stdout] test checker::structure::check_tests::limit_tests::rule_can_set_unlimited_to_override_global ... ok [INFO] [stdout] test cache::tests::test_cache_save_and_load ... 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::rule_priority_tests::last_match_wins_more_restrictive_rule_last ... 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_pattern_not_matching_skips_check ... 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::sibling_tests::check_siblings_no_rules_returns_empty ... 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::derive_sibling_path_basic ... 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_file_has_sibling_no_violation ... 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::directed_file_missing_sibling_returns_violation ... 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_stem_in_group_pattern_does_not_match ... ok [INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_nested_directories ... ok [INFO] [stdout] test checker::structure::check_tests::sibling_tests::directed_multiple_requires ... 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::directed_violations_are_sorted_by_path ... 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 checker::structure::check_tests::sibling_tests::directed_with_warn_severity_creates_warning ... 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::group_missing_member_still_detected_after_empty_stem_fix ... 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::invalid_match_glob_returns_error ... 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::prefix_pattern_with_empty_stem_not_matched ... 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::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::require_pattern_without_stem_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::sibling_tests::group_with_normal_files_still_works_after_empty_stem_fix ... 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::structure::check_tests::sibling_tests::single_char_stem_is_valid ... 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::group_with_one_pattern_returns_error ... 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::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::rule_allow_dirs_with_deny_patterns_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_no_override_reason_when_using_default ... 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_rule_without_reason ... ok [INFO] [stdout] test checker::threshold::tests::check_result_tests::check_uses_rule_with_reason ... ok [INFO] [stdout] test checker::threshold::tests::check_result_tests::check_uses_rule_specific_limit ... ok [INFO] [stdout] test checker::structure::check_tests::validation_tests::rule_allow_only_passes ... ok [INFO] [stdout] test checker::structure::check_tests::validation_tests::group_pattern_with_stem_placeholder_passes ... 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::content_exclude_tests::content_exclude_empty_has_no_effect ... 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_is_methods ... ok [INFO] [stdout] test checker::tests::check_result_is_failed ... ok [INFO] [stdout] test checker::tests::check_result_is_passed ... 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::error_handling_tests::error_has_suggestion ... ok [INFO] [stdout] test checker::threshold::tests::check_result_tests::check_fails_over_threshold ... ok [INFO] [stdout] test checker::threshold::tests::error_handling_tests::error_message_includes_pattern ... ok [INFO] [stdout] test checker::threshold::tests::check_result_tests::check_warns_near_threshold ... 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::content_exclude_multiple_patterns ... 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::content_exclude_skips_matching_files ... 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_content_rule_exact_match ... 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_skipped_without_rule ... 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::invalid_content_rule_pattern_returns_error ... 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_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::skip_settings_tests::get_skip_settings_falls_back_to_global ... ok [INFO] [stdout] test checker::threshold::tests::skip_settings_tests::get_skip_settings_from_path_rule ... ok [INFO] [stdout] test checker::threshold::tests::rule_matching_tests::path_rule_matches_glob_pattern ... 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::rule_matching_tests::multiple_path_rules_last_match_wins ... 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::error_handling_tests::invalid_content_exclude_pattern_returns_error ... ok [INFO] [stdout] test checker::threshold::tests::skip_settings_tests::get_skip_settings_last_match_wins ... ok [INFO] [stdout] test checker::threshold::tests::rule_matching_tests::path_rule_does_not_match_unrelated_path ... ok [INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::global_warn_at_takes_precedence_over_global_percentage ... ok [INFO] [stdout] test checker::threshold::tests::error_handling_tests::valid_patterns_succeed ... ok [INFO] [stdout] test checker::threshold::tests::content_exclude_tests::is_content_excluded_method ... 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::warn_threshold_tests::multiple_rules_winner_takes_all_warn_threshold ... 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::warn_at_explain_shows_effective_warn_at ... 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_default ... ok [INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::path_rule_warn_threshold_overrides_extension_rule ... ok [INFO] [stdout] test cli::tests::cli_check_default_path ... ok [INFO] [stdout] test cli::tests::cli_check_count_blank ... ok [INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::rule_warn_at_takes_precedence_over_percentage_threshold ... ok [INFO] [stdout] test cli::tests::cli_check_output_file ... 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_warn_at_overrides_global_warn_at ... ok [INFO] [stdout] test cli::tests::cli_check_warn_only ... ok [INFO] [stdout] test cli::tests::cli_check_multi_format_output ... 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_count_comments ... ok [INFO] [stdout] test analyzer::parser::tests::test_get_parser_language_mapping ... 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_diff_no_value ... ok [INFO] [stdout] test checker::threshold::tests::warn_threshold_tests::rule_without_warn_threshold_uses_default ... ok [INFO] [stdout] test cli::tests::cli_check_with_diff_range_syntax ... ok [INFO] [stdout] test cli::tests::cli_check_warn_threshold ... ok [INFO] [stdout] test cli::tests::cli_check_with_config ... ok [INFO] [stdout] test cli::tests::cli_check_with_diff ... ok [INFO] [stdout] test cli::tests::cli_check_with_diff_trailing_dots ... ok [INFO] [stdout] test cli::tests::cli_check_with_paths ... ok [INFO] [stdout] test cli::tests::cli_check_with_extensions ... ok [INFO] [stdout] test cli::tests::cli_check_with_exclude ... ok [INFO] [stdout] test cli::tests::cli_check_with_include ... ok [INFO] [stdout] test cli::tests::cli_check_with_max_lines ... ok [INFO] [stdout] test cli::tests::cli_init_command ... ok [INFO] [stdout] test cli::tests::cli_check_with_staged ... ok [INFO] [stdout] test cli::tests::cli_config_validate ... ok [INFO] [stdout] test cli::tests::cli_config_show ... ok [INFO] [stdout] test cli::tests::cli_global_quiet ... ok [INFO] [stdout] test cli::tests::cli_global_no_config ... ok [INFO] [stdout] test cli::tests::cli_check_with_format ... ok [INFO] [stdout] test cli::tests::cli_check_write_json ... ok [INFO] [stdout] test cli::tests::cli_global_verbose ... ok [INFO] [stdout] test cli::tests::cli_check_write_sarif ... ok [INFO] [stdout] test cli::tests::cli_global_color ... ok [INFO] [stdout] test cli::tests::cli_init_with_output ... ok [INFO] [stderr] ⚠ Warning: Failed to acquire write lock on baseline file [INFO] [stdout] test cli::tests::cli_stats_files_command ... ok [INFO] [stderr] × /tmp/.tmpjPeQi7/baseline.json: lock acquisition timed out [INFO] [stdout] test cli::tests::cli_stats_breakdown_command ... ok [INFO] [stderr] help: baseline file save skipped [INFO] [stdout] test cli::tests::cli_stats_files_format_markdown ... ok [INFO] [stderr] ✖ Baseline: outdated - 1 violation(s) resolved but not removed [INFO] [stdout] test cli::tests::cli_stats_files_sort_blank ... ok [INFO] [stderr] × /tmp/.tmplGxsqV/small_file.rs [INFO] [stdout] test cli::tests::cli_stats_history_command ... ok [INFO] [stderr] help: Update the baseline with --update-baseline or use --ratchet=auto [INFO] [stdout] test cli::tests::cli_stats_files_sort_name ... ok [INFO] [stderr] ✖ Baseline: outdated - 1 violation(s) resolved but not removed [INFO] [stdout] test cli::tests::cli_stats_report_command ... ok [INFO] [stderr] × /tmp/.tmpGoOEa8/small_file.rs [INFO] [stdout] test cli::tests::cli_stats_files_sort_comment ... ok [INFO] [stderr] help: Update the baseline with --update-baseline or use --ratchet=auto [INFO] [stdout] test cli::tests::cli_stats_common_args ... ok [INFO] [stderr] ✖ Config: line 1, column 9: key with no value, expected `=` [INFO] [stdout] test cli::tests::cli_stats_files_format_json ... ok [INFO] [stderr] × in /tmp/.tmpwDQzse/invalid.toml [INFO] [stdout] test cli::tests::cli_stats_files_default_sort ... ok [INFO] [stdout] test cli::tests::cli_stats_files_sort_total ... ok [INFO] [stdout] test cli::tests::cli_init_with_force ... ok [INFO] [stdout] test commands::check::check_baseline_tests::apply_baseline_comparison_handles_windows_paths ... ok [INFO] [stdout] test commands::check::check_baseline_tests::is_structure_violation_returns_true_for_structure_violations ... 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::parse_structure_violation_parses_files_correctly ... 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::apply_baseline_comparison_marks_failed_as_grandfathered ... ok [INFO] [stdout] test commands::check::check_baseline_tests::is_structure_violation_returns_false_for_non_structure ... 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_summary_command ... ok [INFO] [stdout] test cli::tests::cli_stats_trend_command ... ok [INFO] [stdout] test commands::check::check_baseline_tests::parse_structure_violation_parses_subdirs_correctly ... ok [INFO] [stdout] test commands::check::check_baseline_tests::check_baseline_ratchet_detects_stale_entries ... ok [INFO] [stdout] test commands::check::check_baseline_tests::apply_baseline_comparison_does_not_mark_new_violations ... ok [INFO] [stdout] test commands::check::check_context_structure_tests::apply_cli_overrides_structure_max_dirs ... ok [INFO] [stdout] test commands::check::check_context_structure_tests::apply_cli_overrides_structure_max_files ... ok [INFO] [stdout] test commands::check::check_context_structure_tests::check_context_from_config_creates_valid_context ... ok [INFO] [stdout] test commands::check::check_context_structure_tests::check_context_new_allows_custom_injection ... ok [INFO] [stdout] test cli::tests::cli_stats_report_with_config_flags ... ok [INFO] [stdout] test commands::check::check_baseline_tests::load_baseline_valid_file_returns_baseline ... ok [INFO] [stdout] test commands::check::check_context_structure_tests::run_check_with_cli_max_dirs_overrides_config ... ok [INFO] [stdout] test baseline::tests::save_returns_skipped_when_lock_unavailable ... 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_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_git_diff_tests::parse_diff_range_commit_hash ... 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_origin_refs ... ok [INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_single_ref ... ok [INFO] [stdout] test commands::check::check_git_diff_tests::parse_diff_range_tags ... 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::format_output_markdown_works ... ok [INFO] [stdout] test commands::check::check_baseline_tests::ratchet_strict_fails_when_baseline_outdated ... ok [INFO] [stdout] test commands::check::check_output_tests::format_output_text ... ok [INFO] [stdout] test commands::check::check_output_tests::structure_violation_to_check_result_dir_count ... ok [INFO] [stdout] test commands::check::check_baseline_tests::ratchet_config_works_without_cli_flag ... ok [INFO] [stdout] test commands::check::check_output_tests::format_output_sarif_works ... 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_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_context_structure_tests::run_check_with_context_uses_injected_threshold_checker ... ok [INFO] [stdout] test commands::check::check_baseline_tests::run_check_impl_without_baseline_fails_on_violations ... 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_processing_tests::check_result_and_file_stats_size_justifies_boxing ... ok [INFO] [stdout] test commands::check::check_output_tests::structure_violation_to_check_result_naming_convention ... ok [INFO] [stdout] test commands::check::check_baseline_tests::ratchet_warn_succeeds_but_warns_when_outdated ... ok [INFO] [stdout] test commands::check::check_processing_tests::compute_effective_stats_include_blanks ... ok [INFO] [stdout] test commands::check::check_processing_tests::compute_effective_stats_include_both ... ok [INFO] [stdout] test commands::check::check_processing_tests::compute_effective_stats_include_comments ... ok [INFO] [stdout] test commands::check::check_run_auto_snapshot_tests::auto_snapshot_config_default_is_none ... ok [INFO] [stdout] test commands::check::check_processing_tests::process_file_nonexistent_returns_error ... ok [INFO] [stdout] test commands::check::check_run_auto_snapshot_tests::auto_snapshot_config_parsing ... ok [INFO] [stdout] test commands::check::check_run_auto_snapshot_tests::auto_snapshot_respects_min_interval ... ok [INFO] [stdout] test commands::check::check_baseline_tests::run_check_impl_with_baseline_grandfathers_violations ... ok [INFO] [stdout] test commands::check::check_processing_tests::process_file_unknown_extension_returns_skipped ... 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_context_structure_tests::run_check_with_cli_max_files_overrides_config ... ok [INFO] [stdout] test commands::check::check_processing_tests::compute_effective_stats_skip_both ... ok [INFO] [stdout] test commands::check::check_processing_tests::process_file_valid_rust_file ... ok [INFO] [stdout] test commands::check::check_run_exit_code_tests::run_check_returns_config_error_on_invalid_config ... 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_structure_only_excludes_content ... ok [INFO] [stdout] test commands::check::check_run_quiet_mode_tests::normal_mode_success_outputs_results ... 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_failure_outputs_results ... ok [INFO] [stdout] test commands::check::check_baseline_tests::update_baseline_mode_new_preserves_existing_entries ... 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_warning_preserves_output_to_file ... 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_run_quiet_mode_tests::quiet_mode_success_suppresses_output_to_file ... 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::update_baseline_mode_content_only_excludes_structure ... ok [INFO] [stdout] test commands::check::check_run_quiet_mode_tests::quiet_mode_success_returns_zero_exit_code ... ok [INFO] [stdout] test baseline::tests::load_succeeds_with_warning_when_exclusive_lock_held ... ok [INFO] [stdout] test commands::check::check_run_strict_warn_tests::run_check_impl_strict_mode_disabled_warnings_pass ... ok [INFO] [stdout] test commands::check::check_run_exit_code_tests::run_check_impl_with_threshold_exceeded ... ok [INFO] [stdout] test commands::check::check_run_output_format_tests::run_check_impl_with_sarif_output ... 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_exit_code_tests::run_check_impl_with_valid_directory ... 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::check::check_run_filter_tests::run_check_impl_with_count_flags ... 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_sidecar_output_tests::run_check_impl_report_json_does_not_affect_exit_code ... 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_output_format_tests::run_check_impl_with_json_output ... ok [INFO] [stdout] test commands::check::check_run_filter_tests::run_check_impl_with_include_paths ... 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_tests::apply_cli_overrides_count_blank ... ok [INFO] [stdout] test commands::check::check_tests::apply_cli_overrides_count_comments ... ok [INFO] [stdout] test commands::config::tests::content_validation_tests::invalid_scanner_exclude_pattern ... ok [INFO] [stdout] test commands::check::check_tests::apply_cli_overrides_warn_threshold ... 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::rule_warn_at_less_than_rule_max_lines_is_valid ... ok [INFO] [stdout] test commands::config::tests::content_validation_tests::invalid_content_exclude_pattern ... 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::file_parsing_tests::validate_config_nonexistent_file_returns_error ... ok [INFO] [stdout] test commands::config::tests::file_parsing_tests::validate_config_valid_full_config_with_structure ... 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_full_config ... ok [INFO] [stdout] test commands::config::tests::file_parsing_tests::validate_config_invalid_toml_returns_error ... 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::config_show_json_format ... 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::config_show_from_file ... 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::warn_threshold_valid_boundaries ... ok [INFO] [stdout] test commands::config::tests::content_validation_tests::warn_at_greater_than_max_lines ... 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::file_parsing_tests::validate_config_valid_minimal_config ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::breakdown_by_case_insensitive ... ok [INFO] [stdout] test commands::config::tests::content_validation_tests::warn_threshold_too_high ... ok [INFO] [stdout] test commands::check::check_run_filter_tests::run_check_impl_with_verbose ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::exclude_case_insensitive ... ok [INFO] [stdout] test commands::config::tests::show_tests::format_config_text_shows_check_section ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::exclude_invalid_section ... ok [INFO] [stdout] test commands::config::tests::show_tests::config_show_default_returns_text ... 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_valid_values ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_invalid ... 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_write_formats_create_parent_directories ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::breakdown_by_valid_dir ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::breakdown_by_invalid ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_valid ... 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::rule_warn_threshold_out_of_range ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_valid_week ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_missing_unit ... ok [INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_valid_config ... 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_dirs_at_greater_than_max_dirs ... 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::rule_warn_dirs_at_negative ... ok [INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_warn_files_threshold_out_of_range ... ok [INFO] [stdout] test commands::config::tests::stats_validation_tests::trend_since_valid_hours ... ok [INFO] [stdout] test commands::config::tests::structure_validation_tests::second_rule_invalid ... 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_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_dirs_threshold_out_of_range ... ok [INFO] [stdout] test commands::config::tests::structure_validation_tests::rule_warn_dirs_threshold_out_of_range ... 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_too_high ... 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::config::tests::structure_validation_tests::warn_files_at_greater_than_max_files ... ok [INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_files_threshold_out_of_range ... ok [INFO] [stdout] test commands::context::tests::color_choice_to_mode_always ... ok [INFO] [stdout] test commands::context::tests::exit_codes_documented ... ok [INFO] [stdout] test commands::context::tests::file_process_error_display_metadata ... ok [INFO] [stdout] test commands::context::tests::file_process_error_display_cache_lock ... 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::file_skip_reason_display_ignored_by_directive ... ok [INFO] [stdout] test commands::context::tests::check_context_from_config_propagates_invalid_structure_pattern ... ok [INFO] [stdout] test commands::context::tests::file_process_error_source_cache_lock ... ok [INFO] [stdout] test commands::context::tests::file_process_error_source_metadata ... ok [INFO] [stdout] test commands::config::tests::structure_validation_tests::warn_threshold_valid_boundaries ... 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_read ... ok [INFO] [stdout] test commands::context::tests::file_skip_reason_display_no_extension ... ok [INFO] [stdout] test commands::context::tests::load_config_accepts_valid_config ... 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_negative ... 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_invalid_glob_pattern ... ok [INFO] [stdout] test commands::context::tests::load_config_rejects_invalid_structure_warn_threshold ... ok [INFO] [stdout] test commands::context::tests::load_config_with_nonexistent_path_returns_error ... ok [INFO] [stdout] test commands::context::tests::load_config_rejects_warn_at_exceeds_max_lines ... ok [INFO] [stdout] test commands::context::tests::real_file_reader_metadata_returns_size ... 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_success_for_valid_file ... ok [INFO] [stdout] test commands::context::tests::process_file_with_cache_returns_skipped_for_unrecognized_extension ... ok [INFO] [stdout] test commands::context::tests::real_file_reader_returns_error_for_nonexistent_file ... ok [INFO] [stdout] test commands::context::tests::process_file_with_cache_returns_skipped_for_no_extension ... ok [INFO] [stdout] test commands::context::tests::resolve_project_root_discovers_project_root ... ok [INFO] [stdout] test commands::context::tests::real_file_reader_reads_file_contents ... 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_cli_paths ... ok [INFO] [stdout] test commands::context::tests::write_output_normal_mode ... ok [INFO] [stdout] test commands::context::tests::resolve_scan_paths_uses_include_override ... ok [INFO] [stdout] test commands::detect::tests::detect_csharp_project ... ok [INFO] [stdout] test commands::detect::tests::detect_csharp_solution ... ok [INFO] [stdout] test commands::detect::tests::detect_go_project ... ok [INFO] [stdout] test commands::detect::tests::detect_java_project_maven ... ok [INFO] [stdout] test commands::detect::tests::detect_monorepo ... 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::context::tests::write_output_quiet_mode ... ok [INFO] [stdout] test commands::detect::tests::detect_unknown_when_no_markers ... ok [INFO] [stdout] test commands::detect::tests::detected_project_is_root ... ok [INFO] [stdout] test commands::detect::tests::detection_result_effective_type_with_root ... ok [INFO] [stdout] test commands::detect::tests::detection_result_effective_type_monorepo_without_root ... ok [INFO] [stdout] test commands::detect::tests::detect_rust_project ... ok [INFO] [stdout] test commands::context::tests::write_output_to_file ... ok [INFO] [stdout] test commands::detect::tests::generate_config_for_java_project ... ok [INFO] [stdout] test commands::detect::tests::generate_config_for_go_project ... ok [INFO] [stdout] test commands::detect::tests::generate_config_for_csharp_project ... ok [INFO] [stdout] test commands::context::tests::process_file_with_cache_returns_error_for_nonexistent_file ... ok [INFO] [stdout] test commands::detect::tests::generate_config_for_rust_project ... ok [INFO] [stdout] test commands::detect::tests::generated_config_is_valid_toml ... ok [INFO] [stdout] test commands::detect::tests::generate_config_for_monorepo ... ok [INFO] [stdout] test commands::detect::tests::generate_config_for_unknown_project ... ok [INFO] [stdout] test commands::detect::tests::generated_monorepo_config_is_valid_toml ... ok [INFO] [stdout] test commands::detect::tests::detect_java_project_gradle ... ok [INFO] [stdout] test commands::context::tests::load_config_with_no_extends_returns_config_without_merging ... ok [INFO] [stdout] test commands::detect::tests::generate_config_for_node_project ... ok [INFO] [stdout] test commands::detect::tests::go_priority_over_node ... ok [INFO] [stdout] test commands::detect::tests::generate_config_for_python_project ... 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::project_type_max_lines ... ok [INFO] [stdout] test commands::detect::tests::rust_priority_over_node ... ok [INFO] [stdout] test commands::detect::tests::project_type_name ... ok [INFO] [stdout] test commands::detect::tests::skips_excluded_directories ... ok [INFO] [stdout] test commands::context::tests::write_output_creates_parent_directories ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::format_config_explanation_empty_chain ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::config_explanation_from_inheritance_chain ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::format_config_explanation_json ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::format_toml_value_formats_types_correctly ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::config_explanation_from_single_source ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::get_nested_value_returns_correct_value ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::format_config_explanation_text ... ok [INFO] [stdout] test commands::detect::tests::skips_hidden_directories ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::key_fields_match_config_schema ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::config_explanation_tracks_multiple_field_types ... ok [INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_default_matches ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::get_nested_value_returns_none_for_missing_path ... ok [INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_rule_matches ... ok [INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_last_rule_wins ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::format_config_text_groups_fields_by_section ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::format_config_text_with_empty_fields ... ok [INFO] [stdout] test commands::explain::tests::config_sources_tests::config_explanation_from_empty_source_chain ... ok [INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_specific_rule_beats_general ... 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_rule_with_reason ... ok [INFO] [stdout] test commands::context::tests::load_config_rejects_invalid_threshold_from_extended_parent ... 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_output_contains_expected_sections ... ok [INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_json_output_is_valid ... 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_rule_percentage_source_with_index ... ok [INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_excluded_file_text ... ok [INFO] [stdout] test commands::context::tests::read_file_with_hash_returns_content_and_hash ... ok [INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_excluded_file ... ok [INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_warn_at_source_rule_absolute ... ok [INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_excluded_file_json ... 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_content_text_shows_global_percentage_source ... ok [INFO] [stdout] test commands::explain::tests::content_matching_tests::explain_content_warn_at_source_global_percentage ... 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_limit_helper_values ... 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_no_limits_shows_none ... ok [INFO] [stdout] test commands::explain::tests::formatting_tests::format_structure_with_rule_reason_shows_reason ... ok [INFO] [stdout] test commands::explain::tests::run_explain_tests::explain_non_existent_path_returns_error ... ok [INFO] [stderr] ℹ Using preset: rust-strict [INFO] [stderr] help: Run `sloc-guard config show` to see effective settings [INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_directory_with_json_format ... ok [INFO] [stdout] test commands::explain::tests::formatting_tests::format_content_with_rule_reason_shows_reason ... ok [INFO] [stdout] test commands::explain::tests::structure_matching_tests::explain_structure_default_matches ... 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_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_file_with_preset_config ... ok [INFO] [stdout] test commands::init::tests::generate_config_template_contains_content_section ... 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::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::run_init_creates_parent_directories ... ok [INFO] [stdout] test commands::init::tests::generate_config_template_is_valid_toml ... ok [INFO] [stdout] test commands::init::tests::run_init_fails_if_file_exists_without_force ... ok [INFO] [stderr] ✖ Config: Configuration file already exists: /tmp/.tmpteNQ5m/.sloc-guard.toml. Use --force to overwrite. [INFO] [stdout] test commands::init::tests::run_init_returns_success_exit_code ... ok [INFO] [stdout] test commands::init::tests::run_init_returns_error_exit_code_when_file_exists ... ok [INFO] [stdout] test commands::init::tests::run_init_with_detect_creates_rust_config ... ok [INFO] [stdout] test commands::init::tests::run_init_overwrites_with_force ... ok [INFO] [stdout] test commands::snapshot::tests::test_print_dry_run_output_would_add ... ok [INFO] [stdout] test commands::snapshot::tests::test_print_dry_run_output_with_git_context ... 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::init::tests::run_init_with_detect_handles_unknown_project ... ok [INFO] [stdout] test commands::explain::tests::structure_matching_tests::explain_structure_rule_with_reason ... ok [INFO] [stdout] test commands::explain::tests::structure_matching_tests::explain_structure_rule_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_markdown_works ... ok [INFO] [stdout] test commands::stats::stats_formatting_tests::format_stats_output_sarif_not_implemented ... ok [INFO] [stdout] test commands::explain::tests::structure_matching_tests::explain_structure_rule_chain_statuses ... ok [INFO] [stdout] test commands::stats::stats_history_tests::run_stats_history_respects_limit ... ok [INFO] [stdout] test commands::stats::stats_formatting_tests::format_stats_output_text ... ok [INFO] [stdout] test commands::stats::stats_history_tests::run_stats_history_with_existing_history ... ok [INFO] [stdout] test commands::stats::stats_history_tests::run_stats_history_with_json_format ... ok [INFO] [stdout] test commands::stats::stats_history_tests::run_stats_history_with_empty_history ... ok [INFO] [stdout] test commands::stats::stats_history_tests::test_days_to_ymd_epoch ... 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_days_to_ymd_end_of_year ... ok [INFO] [stdout] test commands::stats::stats_history_tests::test_format_history_json_empty ... 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_format_history_text_no_git_context ... ok [INFO] [stdout] test commands::stats::stats_history_tests::test_format_history_text_empty ... 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_timestamp_leap_year ... ok [INFO] [stdout] test commands::stats::stats_history_tests::test_is_leap_year_false ... 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_epoch ... ok [INFO] [stdout] test commands::stats::stats_history_tests::test_format_timestamp_basic ... ok [INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_directory_with_structure_config ... 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_output_is_valid ... ok [INFO] [stdout] test commands::context::tests::read_file_with_hash_returns_none_for_nonexistent ... ok [INFO] [stdout] test commands::snapshot::tests::test_print_snapshot_summary_with_git_context ... ok [INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_sources_with_no_extends ... ok [INFO] [stdout] test commands::explain::tests::run_explain_tests::run_explain_impl_with_existing_directory ... ok [INFO] [stdout] test commands::init::tests::generate_config_template_contains_structure_section ... ok [INFO] [stdout] test commands::stats::stats_collection_tests::collection_module_exports_are_accessible ... ok [INFO] [stdout] test commands::stats::stats_formatting_tests::format_stats_output_html_works ... 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_parse_breakdown_by_invalid ... 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_report_tests::test_build_exclude_set_normalizes_case ... ok [INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_uses_depth_from_config_without_cli_override ... ok [INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_depth_but_lang_breakdown ... 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] [stderr] × Depth 0 behaves the same as no depth limit (shows full paths) [INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_exclude_sections ... ok [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_lang ... 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] [stderr] ✖ Config: line 1, column 9: key with no value, expected `=` [INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_top_count ... ok [INFO] [stderr] × in /tmp/.tmpxVjt9f/invalid.toml [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_depth_zero_shows_warning ... ok [INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_subcommand ... ok [INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_breakdown_by_dir_and_depth ... ok [INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_json ... ok [INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_breakdown_by_dir ... 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_date_comparison ... ok [INFO] [stdout] test config::expires::tests::test_empty_rules_no_expired ... 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 config::expires::tests::test_is_expired_at_past_date ... ok [INFO] [stdout] test config::expires::tests::test_is_expired_at_same_date ... ok [INFO] [stdout] test config::expires::tests::test_mixed_content_and_structure_expired_rules ... 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_no_rules_expired ... 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 config::expires::tests::test_parse_invalid_month ... 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::expires::tests::test_today_returns_valid_date ... 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_marker_in_non_first_position ... 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_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_string_marker_in_array ... 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_returns_false_for_array_without_markers ... 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_simple_values ... 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_handles_empty_array ... 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::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::is_reset_element_ignores_other_strings ... 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_appends_by_default ... 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::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_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::array_merge_tests::merge_arrays_reset_with_empty_child ... ok [INFO] [stdout] test config::loader::tests::chain_loading_tests::extends_chain_works ... 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_loads_base_config ... 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_direct_cycle ... 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::depth_limit_tests::extends_preset_does_not_count_toward_depth ... ok [INFO] [stdout] test config::loader::tests::depth_limit_tests::extends_respects_max_depth_limit ... ok [INFO] [stdout] test config::loader::tests::discovery_tests::default_loader_can_be_created ... ok [INFO] [stdout] test config::loader::tests::discovery_tests::handles_missing_config_dir ... ok [INFO] [stdout] test config::loader::tests::discovery_tests::loads_local_config_from_current_directory ... ok [INFO] [stdout] test config::loader::tests::discovery_tests::loads_user_config_as_fallback ... ok [INFO] [stdout] test config::loader::tests::discovery_tests::local_config_takes_priority_over_user_config ... ok [INFO] [stdout] test config::loader::tests::discovery_tests::returns_default_when_no_config_found ... ok [INFO] [stdout] test config::loader::tests::inheritance_order_tests::extends_child_can_override_with_same_pattern ... 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::inheritance_order_tests::extends_preserves_rule_order_for_last_match_wins ... 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_structure_rules_preserve_order ... 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::line_number_preserved_in_load_without_extends ... ok [INFO] [stdout] test config::loader::tests::parsing_tests::line_number_preserved_with_multiline_arrays ... ok [INFO] [stdout] test config::loader::tests::parsing_tests::load_from_explicit_path ... ok [INFO] [stdout] test config::loader::tests::parsing_tests::load_without_extends_returns_syntax_error ... ok [INFO] [stdout] test config::loader::tests::parsing_tests::parses_full_v2_config ... ok [INFO] [stdout] test config::loader::tests::parsing_tests::returns_error_for_nonexistent_explicit_path ... 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::parsing_tests::syntax_error_includes_file_origin ... 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_has_precise_line_number_single_file ... 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::type_error_with_blank_lines_preserved ... ok [INFO] [stdout] test config::loader::tests::parsing_tests::type_error_with_reset_marker_still_works ... 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_all_available_presets_work ... ok [INFO] [stdout] test config::loader::tests::preset_tests::extends_preset_child_adds_rules ... ok [INFO] [stdout] test config::loader::tests::preset_tests::extends_preset_child_overrides_preset_values ... 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::reset_tests::extends_appends_scanner_exclude ... 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_parent_rules ... ok [INFO] [stdout] test config::loader::tests::reset_tests::extends_reset_clears_scanner_exclude ... 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_in_wrong_position_fails ... ok [INFO] [stdout] test config::loader::tests::reset_tests::reset_stripped_when_no_extends ... ok [INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_cycle_detection ... 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::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_preset_chain ... ok [INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_relative_extends ... ok [INFO] [stdout] test config::loader::tests::source_tracking_tests::load_from_path_with_sources_single_file ... 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_local_config_only ... 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_preset_tracks_preset_source ... ok [INFO] [stdout] test config::loader::tests::source_tracking_tests::load_with_sources_user_config_fallback ... 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::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::version_tests::config_with_unsupported_version_returns_error ... 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::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::loader::tests::without_extends_tests::load_without_extends_falls_back_to_user_config ... 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::model::model_tests::content_config_tests::config_deserialize_check_section_partial ... 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_rule_without_warn_threshold ... ok [INFO] [stdout] test config::model::model_tests::content_config_tests::config_deserialize_v2_format ... 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_with_version ... 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::content_config_tests::config_version_constant_is_two ... ok [INFO] [stdout] test config::model::model_tests::content_config_tests::config_version_defaults_to_none ... ok [INFO] [stdout] test config::model::model_tests::content_config_tests::content_config_has_expected_defaults ... ok [INFO] [stdout] test config::model::model_tests::language_config_tests::config_deserialize_custom_language ... ok [INFO] [stdout] test config::model::model_tests::language_config_tests::config_deserialize_multiple_custom_languages ... 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::scanner_config_tests::config_default_scanner_excludes_git ... 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::scanner_config_tests::config_deserialize_with_explicit_scanner_exclude_replaces_default ... 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::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_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_deserialize_stats_report_section ... 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_has_default_stats_config ... 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::stats_config_default_all_empty ... ok [INFO] [stdout] test config::model::model_tests::stats_config_tests::stats_report_config_roundtrip_serialization ... ok [INFO] [stdout] test config::model::model_tests::structure_config_tests::config_deserialize_deny_file_patterns_alias ... 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_all_deny_types ... 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_deny_files ... 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_deserialize_structure_with_rules ... 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::sibling_rule_ambiguous_match_and_group_rejected ... 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::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_empty_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::structure_config_default_values ... 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::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_auto_snapshot_on_check_false ... 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_section ... 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_deserialize_trend_with_other_sections ... 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::trend_config_equality ... ok [INFO] [stdout] test config::model::model_tests::trend_config_tests::trend_config_roundtrip_serialization ... ok [INFO] [stdout] test config::presets::tests::all_presets_have_required_sections ... ok [INFO] [stdout] test config::presets::tests::all_presets_have_version_2 ... 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_move_strict_preset ... ok [INFO] [stdout] test config::presets::tests::load_node_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_dir_returns_path_with_project_root ... ok [INFO] [stdout] test config::remote::tests::cache_tests::cache_dir_structure_matches_expected ... 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::is_cache_within_ttl_returns_false_for_nonexistent_file ... 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::cache_tests::read_from_cache_returns_none_when_no_project_root ... 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_remote_config_rejects_invalid_url ... ok [INFO] [stdout] test config::remote::tests::fetch_tests::fetch_remote_config_rejects_non_http_scheme ... ok [INFO] [stderr] ⚠ Warning: Fetching remote config from https://mock-test-error.example.com/config.toml [INFO] [stderr] help: Consider using --extends-policy=offline or extends_sha256 for reproducible builds [INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_error ... 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_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::fetch_tests::fetch_with_mock_client_http_url_accepted ... 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_network_error ... ok [INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_success ... ok [INFO] [stdout] test config::remote::tests::fetch_tests::fetch_with_mock_client_timeout_error ... 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::fetch_tests::reqwest_client_can_be_instantiated ... 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::hash_verification_tests::compute_content_hash_produces_consistent_hash ... 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_not_required_when_none ... 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_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_success_on_match ... 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::policy_tests::force_refresh_skips_cache ... ok [INFO] [stdout] test config::remote::tests::policy_tests::force_refresh_updates_cache ... ok [INFO] [stdout] test config::remote::tests::policy_tests::offline_mode_ignores_ttl ... ok [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_cached_content ... ok [INFO] [stdout] test config::remote::tests::policy_tests::offline_mode_returns_error_on_cache_miss ... ok [INFO] [stdout] test config::remote::tests::policy_tests::offline_mode_returns_error_without_project_root ... 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_http ... 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_local_paths ... ok [INFO] [stdout] test config::remote::tests::url_tests::is_remote_url_rejects_other_schemes ... ok [INFO] [stdout] test config::remote::tests::url_tests::is_remote_url_rejects_partial_schemes ... ok [INFO] [stdout] test config::remote::tests::warning_tests::warning_flag_initially_false ... 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] [stdout] test config::remote::tests::warning_tests::warning_not_shown_when_cache_hit ... ok [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::warning_tests::warning_shown_on_first_remote_fetch ... ok [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] [stdout] test config::remote::tests::warning_tests::warning_shown_only_once_per_session ... ok [INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_trend_json_excludes_file_list ... ok [INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_summary_subcommand ... ok [INFO] [stdout] test config::validation::tests::test_invalid_warn_threshold_rejected ... ok [INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_summary_json_format ... 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_at_various_positions ... ok [INFO] [stdout] test counter::comment::tests::detection_tests::comment_marker_split_by_whitespace ... ok [INFO] [stdout] test counter::comment::tests::detection_tests::detect_multi_line_comment_end ... 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 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 config::tests::config_default_values ... ok [INFO] [stdout] test config::validation::tests::test_valid_config_passes_validation ... ok [INFO] [stdout] test counter::comment::tests::detection_tests::html_comment_style ... ok [INFO] [stdout] test config::tests::config_has_v2_sections ... 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::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::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::comment_in_char_literal_sequence ... ok [INFO] [stdout] test counter::comment::tests::edge_case_tests::consecutive_backslash_escape_sequences ... ok [INFO] [stdout] test counter::comment::tests::edge_case_tests::apostrophe_in_identifier ... ok [INFO] [stdout] test counter::comment::tests::edge_case_tests::deeply_escaped_quote_chain ... 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::unicode_in_string_before_comment ... ok [INFO] [stdout] test counter::comment::tests::lua_tests::lua_comment_marker_looks_like_array_access ... ok [INFO] [stdout] test counter::comment::tests::detection_tests::empty_needle_returns_none ... ok [INFO] [stdout] test counter::comment::tests::lua_tests::lua_double_dash_not_multiline_start ... ok [INFO] [stdout] test counter::comment::tests::edge_case_tests::string_with_backslash_at_end ... ok [INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_high_level_end_detection ... 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_1_end_detection ... ok [INFO] [stdout] test counter::comment::tests::lua_tests::lua_extended_comment_level_2 ... 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_extended_comment_markers ... ok [INFO] [stdout] test counter::comment::tests::lua_tests::lua_level_mismatch_not_closed ... ok [INFO] [stdout] test counter::comment::tests::nested_comment_tests::comment_marker_after_nested_pattern ... ok [INFO] [stdout] test counter::comment::tests::lua_tests::lua_long_string_not_comment ... ok [INFO] [stdout] test counter::comment::tests::lua_tests::lua_multiline_comment_detection ... 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::nested_comment_markers_not_supported ... 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::rust_nested_comment_depth_two ... ok [INFO] [stdout] test counter::comment::tests::nested_comment_tests::rust_nested_comment_only_opener_in_line ... 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_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::python_docstring_tests::python_triple_quote_with_mixed_quotes ... ok [INFO] [stdout] test counter::comment::tests::nested_comment_tests::rust_nested_block_comment_limitation_counting ... 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_empty_triple_quote_string ... 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::python_docstring_tests::python_triple_single_quote_with_double_quotes_inside ... ok [INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_byte_raw_string ... 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_raw_string_spanning_affects_subsequent_code ... ok [INFO] [stdout] test counter::comment::tests::raw_string_tests::failure_case_raw_string_with_backslash_quote ... 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::raw_string_tests::failure_case_unbalanced_quote_comparison ... ok [INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_level_2_two_hashes ... ok [INFO] [stdout] test counter::comment::tests::raw_string_tests::raw_string_limitation ... 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::failure_case_multiple_raw_strings_on_line ... 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_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_works_by_coincidence_balanced_quotes ... 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_works_by_coincidence_comment_inside ... 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_proper_support_with_real_comment ... 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_in_string ... 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_comment_in_string ... 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::string_context_tests::comment_marker_immediately_after_quote ... 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::comment_end_marker_in_string ... 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_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::first_comment_marker_in_string_second_outside ... ok [INFO] [stdout] test counter::comment::tests::string_context_tests::escaped_backslash_before_quote ... 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::glob_pattern_star_star_slash ... 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::regex_with_comment_markers ... ok [INFO] [stdout] test counter::comment::tests::string_context_tests::unicode_before_comment_marker ... 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::single_quote_in_double_quoted_string ... ok [INFO] [stdout] test counter::comment::tests::string_context_tests::url_in_code ... ok [INFO] [stdout] test counter::comment::tests::string_context_tests::template_literal_style_string_edge_case ... 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::sloc::sloc_tests::counting_tests::count_reader_empty_input ... 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_with_doc_comments ... 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_reader_with_multi_line_comment ... 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 commands::stats::stats_runner_tests::run_stats_trend_subcommand ... ok [INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::count_code_only ... 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_files_all ... 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::ignore_block_tests::count_reader_ignore_block ... ok [INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_block_empty ... 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_no_end_ignores_rest_of_file ... ok [INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::ignore_block_with_comments_inside ... ok [INFO] [stdout] test counter::sloc::sloc_tests::counting_tests::line_stats_new_has_zero_ignored ... ok [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_trend_with_since ... ok [INFO] [stdout] test counter::sloc::sloc_tests::ignore_block_tests::multiple_ignore_blocks ... 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_file_tests::ignore_file_directive_after_line_10_not_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::ignore_next_then_ignore_block ... 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_block_python_style ... ok [INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_files_subcommand ... ok [INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_breakdown_by_dir_with_depth ... ok [INFO] [stdout] test commands::stats::stats_runner_tests::run_stats_breakdown_depth_zero_shows_warning ... 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 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_reader ... 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_in_multi_line_comment_not_recognized ... 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_within_first_10_lines ... 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_next_tests::ignore_next_more_than_remaining_lines ... ok [INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_python_style ... 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_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_file_tests::no_ignore_directive_returns_stats ... ok [INFO] [stdout] test counter::sloc::sloc_tests::ignore_file_tests::ignore_file_directive_python_style ... 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::lua_tests::sloc_lua_extended_bracket_single_line ... 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_spanning_ignore_block ... ok [INFO] [stdout] test counter::sloc::sloc_tests::lua_tests::sloc_lua_extended_bracket_multiline ... 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::lua_tests::sloc_lua_extended_bracket_level_2 ... ok [INFO] [stdout] test counter::sloc::sloc_tests::ignore_next_tests::ignore_next_with_invalid_number ... 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::ignore_next_tests::count_reader_ignore_next ... ok [INFO] [stdout] test commands::check::check_run_strict_warn_tests::run_check_impl_with_warn_only ... 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_deeply_nested_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::lua_tests::sloc_lua_level_0_bracket_single_line ... 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_nested_comment_markers_first_close_wins ... ok [INFO] [stdout] test counter::sloc::sloc_tests::nested_comment_tests::sloc_nested_comment_multiline ... 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::lua_tests::sloc_lua_static_syntax_multiline_works ... 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::nested_comment_tests::sloc_deeply_nested_comment_depth_10_multiline ... 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::nested_comment_tests::sloc_rust_nested_comment_depth_two ... 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_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::python_tests::sloc_python_docstring_with_two_adjacent_quotes ... ok [INFO] [stdout] test counter::sloc::sloc_tests::python_tests::sloc_python_triple_quote_docstring ... 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::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_mixed_docstring_and_code ... ok [INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::glob_pattern_in_string_not_treated_as_comment ... 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_single_line_comment_markers_in_strings ... 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::string_literal_tests::multiple_glob_patterns_in_strings ... 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::python_tests::sloc_python_triple_quote_with_nested_double_quotes ... 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::single_line_comment_marker_in_string_is_code ... 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::sloc::sloc_tests::string_literal_tests::sloc_raw_string_multiline_delimiter ... ok [INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::sloc_raw_string_with_comment_like_pattern ... ok [INFO] [stdout] test error::tests::config_source_tests::file_display ... ok [INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::sloc_raw_string_with_quotes_inside ... ok [INFO] [stdout] test error::tests::config_source_tests::remote_display ... ok [INFO] [stdout] test error::tests::extends_tests::circular_extends_detail ... ok [INFO] [stdout] test error::tests::extends_tests::circular_extends_display ... ok [INFO] [stdout] test counter::tests::counter_integration_with_language ... ok [INFO] [stdout] test error::tests::extends_tests::circular_extends_error_type ... 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::url_in_string_not_treated_as_comment ... ok [INFO] [stdout] test error::tests::config_source_tests::preset_display ... ok [INFO] [stdout] test error::tests::extends_tests::circular_extends_suggestion ... ok [INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::comment_end_marker_in_string_not_closing_comment ... ok [INFO] [stdout] test error::tests::extends_tests::circular_extends_message ... ok [INFO] [stdout] test error::tests::extends_tests::extends_resolution_display ... ok [INFO] [stdout] test counter::sloc::sloc_tests::string_literal_tests::python_hash_comment_in_string_is_code ... ok [INFO] [stdout] test error::tests::extends_tests::extends_resolution_suggestion ... ok [INFO] [stdout] test error::tests::extends_tests::extends_resolution_error_type ... ok [INFO] [stdout] test counter::sloc::sloc_tests::python_tests::sloc_python_triple_quote_with_nested_single_quotes ... ok [INFO] [stdout] test error::tests::extends_tests::extends_too_deep_detail ... ok [INFO] [stdout] test error::tests::extends_tests::extends_too_deep_error_type ... ok [INFO] [stdout] test error::tests::extends_tests::extends_too_deep_display ... ok [INFO] [stdout] test error::tests::extends_tests::extends_too_deep_suggestion ... ok [INFO] [stdout] test error::tests::extends_tests::remote_config_hash_mismatch_suggestion ... ok [INFO] [stdout] test error::tests::git_tests::git_display ... 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_error_type ... ok [INFO] [stdout] test error::tests::git_tests::git_repo_not_found_suggestion ... ok [INFO] [stdout] test error::tests::git_tests::git_repo_not_found_display ... ok [INFO] [stdout] test error::tests::extends_tests::extends_resolution_message ... ok [INFO] [stdout] test error::tests::extends_tests::extends_too_deep_message ... ok [INFO] [stdout] test error::tests::git_tests::git_message ... ok [INFO] [stdout] test error::tests::io_tests::file_access_detail ... ok [INFO] [stdout] test error::tests::git_tests::git_suggestion ... ok [INFO] [stdout] test error::tests::io_tests::file_access_error_type ... ok [INFO] [stdout] test error::tests::io_tests::file_access_message ... ok [INFO] [stdout] test error::tests::io_tests::file_access_suggestion_invalid_data ... ok [INFO] [stdout] test error::tests::io_tests::file_access_suggestion_not_found ... ok [INFO] [stdout] test error::tests::io_tests::io_display_with_full_context ... ok [INFO] [stdout] test error::tests::io_tests::file_access_suggestion_permission_denied ... ok [INFO] [stdout] test error::tests::io_tests::io_display_with_path_only ... 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_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::file_access_display ... ok [INFO] [stdout] test error::tests::io_tests::io_suggestion_other_has_none ... ok [INFO] [stdout] test error::tests::io_tests::io_suggestion_timeout ... ok [INFO] [stdout] test error::tests::io_tests::io_detail_includes_path_operation_and_kind ... ok [INFO] [stdout] test error::tests::io_tests::io_suggestion_permission_denied ... ok [INFO] [stdout] test error::tests::io_tests::io_detail_without_context_shows_kind ... ok [INFO] [stdout] test error::tests::io_tests::io_with_context_includes_path_and_operation ... ok [INFO] [stdout] test error::tests::io_tests::io_with_path_includes_path_in_message ... 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::suggestion ... ok [INFO] [stdout] test error::tests::semantic_tests::config_detail_none ... ok [INFO] [stdout] test error::tests::semantic_tests::config_display ... ok [INFO] [stdout] test error::tests::semantic_tests::config_error_type ... ok [INFO] [stdout] test error::tests::config_source_tests::constructors ... ok [INFO] [stdout] test error::tests::semantic_tests::config_message ... ok [INFO] [stdout] test error::tests::pattern_tests::detail ... ok [INFO] [stdout] test error::tests::semantic_tests::semantic_display_without_origin ... ok [INFO] [stdout] test error::tests::pattern_tests::display ... ok [INFO] [stdout] test error::tests::semantic_tests::semantic_display ... ok [INFO] [stdout] test error::tests::semantic_tests::config_suggestion ... ok [INFO] [stdout] test error::tests::io_tests::io_suggestion_not_found ... ok [INFO] [stdout] test error::tests::pattern_tests::message ... ok [INFO] [stdout] test error::tests::semantic_tests::semantic_message ... ok [INFO] [stdout] test error::tests::semantic_tests::semantic_error_type ... ok [INFO] [stdout] test error::tests::syntax_tests::span_first_line ... ok [INFO] [stdout] test error::tests::semantic_tests::semantic_suggestion_from_field ... ok [INFO] [stdout] test error::tests::syntax_tests::span_middle_of_first_line ... ok [INFO] [stdout] test error::tests::semantic_tests::semantic_suggestion_none ... 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_at_newline ... ok [INFO] [stdout] test error::tests::syntax_tests::span_third_line_middle ... ok [INFO] [stdout] test error::tests::syntax_tests::span_empty_content ... ok [INFO] [stdout] test error::tests::syntax_tests::syntax_detail_without_origin ... ok [INFO] [stdout] test error::tests::syntax_tests::syntax_detail_with_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::syntax_tests::span_beyond_content ... 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::syntax_tests::syntax_error_type ... ok [INFO] [stdout] test error::tests::syntax_tests::toml_parse_suggestion ... ok [INFO] [stdout] test error::tests::type_mismatch_tests::detail_with_origin ... ok [INFO] [stdout] test error::tests::type_mismatch_tests::suggestion ... ok [INFO] [stdout] test error::tests::type_mismatch_tests::message ... ok [INFO] [stdout] test error::tests::type_mismatch_tests::display_without_origin ... ok [INFO] [stdout] test error::tests::type_mismatch_tests::error_type ... ok [INFO] [stdout] test error::tests::type_mismatch_tests::display ... ok [INFO] [stdout] test git::context::tests::git_context_detached_head ... 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 counter::sloc::sloc_tests::python_tests::sloc_python_empty_docstring ... ok [INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_with_breakdown_by ... ok [INFO] [stdout] test commands::stats::stats_report_tests::run_stats_report_html ... ok [INFO] [stdout] test git::context::tests::git_context_from_current_repo ... ok [INFO] [stdout] test git::tests::changed_files_range_invalid_ref_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_empty_when_no_changes ... ok [INFO] [stdout] test git::tests::changed_files_detects_modified_file ... 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::changed_files_range_same_ref_returns_empty ... ok [INFO] [stdout] test git::tests::changed_files_invalid_reference_returns_error ... ok [INFO] [stdout] test git::tests::changed_files_handles_subdirectory ... ok [INFO] [stdout] test git::tests::changed_files_handles_nested_directory_addition ... ok [INFO] [stdout] test git::tests::changed_files_range_matches_trait_behavior ... ok [INFO] [stdout] test language::registry::tests::comment_syntax_construction ... ok [INFO] [stdout] test language::registry::tests::custom_language_adds_new_extension ... 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::custom_language_overrides_builtin ... ok [INFO] [stdout] test git::tests::discover_finds_git_repo ... ok [INFO] [stdout] test language::registry::tests::default_registry_has_lua ... ok [INFO] [stdout] test language::registry::tests::default_registry_has_python ... ok [INFO] [stdout] test language::registry::tests::default_registry_has_ruby ... 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::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::default_registry_has_swift ... 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::default_registry_has_move ... 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 output::error_output::tests::default_creates_stderr_output ... ok [INFO] [stdout] test output::error_output::tests::error_with_colors_contains_ansi ... ok [INFO] [stdout] test output::error_output::tests::error_with_colors_full_message ... ok [INFO] [stdout] test output::error_output::tests::error_without_colors_basic ... ok [INFO] [stdout] test output::error_output::tests::error_without_colors_full ... ok [INFO] [stdout] test git::tests::staged_files_empty_when_nothing_staged ... 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 language::registry::tests::with_custom_languages_checked_reports_multiple_overrides ... ok [INFO] [stdout] test output::error_output::tests::info_with_colors_full_message ... ok [INFO] [stdout] test output::error_output::tests::info_with_colors_contains_ansi ... 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::info_without_colors_with_detail ... 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::warning_without_colors_basic ... ok [INFO] [stdout] test output::error_output::tests::warning_without_colors_with_detail ... ok [INFO] [stdout] test output::error_output::tests::warning_without_colors_with_suggestion ... ok [INFO] [stdout] test output::html::tests::document::default_formatter ... ok [INFO] [stdout] test output::html::tests::document::generates_valid_html_structure ... ok [INFO] [stdout] test output::html::tests::document::has_client_side_javascript ... ok [INFO] [stdout] test output::html::tests::document::has_embedded_css ... ok [INFO] [stdout] test output::html::tests::document::has_footer ... ok [INFO] [stdout] test output::html::tests::escape::html_escape_special_characters ... ok [INFO] [stdout] test output::html::tests::document::status_icons_are_html_entities ... 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::formats_file_table ... 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::file_table::numeric_columns_have_number_class ... ok [INFO] [stdout] test output::html::tests::file_table::rows_have_data_status_attribute ... 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::histogram::histogram_has_chart_container_styles ... ok [INFO] [stdout] test output::html::tests::histogram::histogram_has_chart_css_variable ... ok [INFO] [stdout] test git::tests::staged_files_in_new_repo_without_commits ... ok [INFO] [stdout] test output::html::tests::file_table::shows_override_reason ... ok [INFO] [stdout] test output::html::tests::histogram::histogram_not_shown_with_insufficient_files ... ok [INFO] [stdout] test git::tests::changed_files_range_between_tags ... ok [INFO] [stdout] test output::html::tests::file_table::table_has_id_for_js ... ok [INFO] [stdout] test output::html::tests::histogram::histogram_shown_with_sufficient_files ... ok [INFO] [stdout] test output::html::tests::language_breakdown::both_charts_shown_when_data_available ... ok [INFO] [stdout] test language::registry::tests::with_custom_languages_checked_reports_no_overrides_for_new_extensions ... 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_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 git::tests::workdir_returns_correct_path ... 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::summary::hides_grandfathered_card_when_zero ... ok [INFO] [stdout] test output::html::tests::suggestions::shows_split_suggestions_when_enabled ... ok [INFO] [stdout] test output::html::tests::summary::shows_failed_card ... ok [INFO] [stdout] test output::html::tests::summary::shows_aggregate_line_stats ... ok [INFO] [stdout] test output::html::tests::summary::formats_summary_correctly ... 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::suggestions::split_suggestions_with_empty_functions ... ok [INFO] [stdout] test output::html::tests::summary::shows_grandfathered_card_when_present ... ok [INFO] [stdout] test output::html::tests::trend::only_trend_chart_when_no_stats ... ok [INFO] [stdout] test output::html::tests::trend::trend_chart_appears_first_in_visualizations ... ok [INFO] [stdout] test output::html::tests::trend::trend_chart_has_data_points ... ok [INFO] [stdout] test git::tests::staged_files_detects_modified_staged_file ... ok [INFO] [stdout] test output::html::tests::histogram::histogram_not_shown_without_stats ... ok [INFO] [stdout] test output::html::tests::trend::trend_chart_has_line_path ... ok [INFO] [stdout] test git::tests::staged_files_ignores_unstaged_changes ... ok [INFO] [stdout] test output::json::tests::json_default_formatter ... ok [INFO] [stdout] test output::html::tests::summary::aggregate_stats_with_empty_results ... ok [INFO] [stdout] test output::html::tests::trend::trend_chart_shown_with_history ... ok [INFO] [stdout] test git::tests::changed_files_skips_unchanged_subtrees ... ok [INFO] [stdout] test output::json::tests::json_empty_results ... ok [INFO] [stdout] test output::html::tests::trend::trend_chart_with_stats_shows_both ... ok [INFO] [stdout] test output::json::tests::json_grandfathered_status ... ok [INFO] [stdout] test output::json::tests::json_output_is_valid ... ok [INFO] [stdout] test git::tests::staged_files_detects_staged_file ... ok [INFO] [stdout] test output::html::tests::trend::trend_chart_not_shown_with_empty_history ... ok [INFO] [stdout] test git::tests::changed_files_detects_added_file ... ok [INFO] [stdout] test output::markdown::tests::default_formatter ... ok [INFO] [stdout] test output::json::tests::json_result_fields ... ok [INFO] [stdout] test output::html::tests::file_table::numeric_cells_have_data_value_attribute ... ok [INFO] [stdout] test output::json::tests::json_status_values ... ok [INFO] [stdout] test output::json::tests::json_override_reason_excluded_when_none ... 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::html::tests::trend::trend_chart_not_shown_without_history ... ok [INFO] [stdout] test git::tests::changed_files_detects_file_to_directory_change ... ok [INFO] [stdout] test output::json::tests::json_without_suggestions_flag_excludes_suggestions ... ok [INFO] [stdout] test output::json::tests::json_with_suggestions ... 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::markdown::tests::formats_details_table ... 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::override_reason_shown_in_table ... 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_not_child_of_root ... 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::markdown::tests::without_suggestions_flag_hides_split_suggestions_section ... ok [INFO] [stdout] test output::path::tests::display_path_without_project_root ... ok [INFO] [stdout] test output::path::tests::normalize_for_matching_handles_bare_dot ... ok [INFO] [stdout] test output::markdown::tests::formats_summary_correctly ... 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::path::tests::normalize_for_matching_normalizes_backslashes ... ok [INFO] [stdout] test output::path::tests::normalize_for_matching_preserves_parent_dir ... 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_plain_paths ... 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_progress_bar_hidden_in_quiet_mode ... ok [INFO] [stdout] test output::progress::tests::test_progress_bar_hidden_when_not_tty ... 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_increment ... ok [INFO] [stdout] test output::progress::tests::test_progress_bar_visible_when_tty ... ok [INFO] [stdout] test output::progress::tests::test_progress_bar_clone ... ok [INFO] [stdout] test output::sarif::tests::sarif_empty_results ... ok [INFO] [stdout] test output::sarif::tests::sarif_default_formatter ... ok [INFO] [stdout] test output::sarif::tests::sarif_has_correct_schema ... ok [INFO] [stdout] test output::sarif::tests::sarif_output_is_valid_json ... ok [INFO] [stdout] test output::sarif::tests::sarif_override_reason_included ... ok [INFO] [stdout] test output::sarif::tests::sarif_tool_info ... ok [INFO] [stdout] test output::sarif::tests::sarif_passed_results_excluded ... ok [INFO] [stdout] test output::sarif::tests::sarif_failed_result ... ok [INFO] [stdout] test output::progress::tests::test_create_visible_progress_bar ... ok [INFO] [stdout] test output::sarif::tests::sarif_grandfathered_result_has_suppression ... ok [INFO] [stdout] test output::sarif::tests::sarif_result_properties ... ok [INFO] [stdout] test output::sarif::tests::sarif_without_suggestions_flag_excludes_suggestions ... ok [INFO] [stdout] test output::sarif::tests::structure_violations::sarif_dir_count_violation ... ok [INFO] [stdout] test output::sarif::tests::structure_violations::sarif_denied_file_violation ... ok [INFO] [stdout] test output::sarif::tests::sarif_windows_path_converted ... ok [INFO] [stdout] test output::sarif::tests::sarif_warning_result ... ok [INFO] [stdout] test output::sarif::tests::sarif_rules_defined ... ok [INFO] [stdout] test output::sarif::tests::sarif_with_suggestions ... ok [INFO] [stdout] test output::sarif::tests::structure_violations::sarif_denied_directory_violation ... ok [INFO] [stdout] test output::sarif::tests::structure_violations::sarif_disallowed_directory_violation ... ok [INFO] [stdout] test output::sarif::tests::structure_violations::sarif_disallowed_file_violation ... ok [INFO] [stdout] test output::sarif::tests::structure_violations::sarif_max_depth_violation ... ok [INFO] [stdout] test output::sarif::tests::structure_violations::sarif_group_incomplete_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_missing_sibling_violation ... 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_rules_include_structure_rules ... ok [INFO] [stdout] test output::sarif::tests::structure_violations::sarif_file_count_violation ... ok [INFO] [stdout] test output::stats::html::tests::format_directory_breakdown_with_relative_paths ... ok [INFO] [stdout] test output::stats::html::tests::format_includes_number_class_for_alignment ... ok [INFO] [stdout] test output::sarif::tests::structure_violations::sarif_structure_warning_level ... ok [INFO] [stdout] test output::stats::html::tests::format_no_charts_when_no_data ... ok [INFO] [stdout] test output::stats::html::tests::default_is_new ... ok [INFO] [stdout] test output::stats::html::tests::format_summary_only_includes_trend_if_available ... ok [INFO] [stdout] test output::stats::html::tests::format_empty_language_breakdown_omitted ... ok [INFO] [stdout] test output::stats::html::tests::format_includes_file_path_class ... ok [INFO] [stdout] test output::stats::html::tests::format_includes_css_variables ... ok [INFO] [stdout] test output::stats::html::tests::format_with_average ... ok [INFO] [stdout] test output::stats::html::tests::format_escapes_special_characters_in_directory ... ok [INFO] [stdout] test output::stats::html::tests::format_top_files_with_project_root ... ok [INFO] [stdout] test output::stats::html::tests::format_with_language_chart ... ok [INFO] [stdout] test output::stats::html::tests::format_with_trend_delta ... ok [INFO] [stdout] test output::stats::html::tests::format_basic_stats ... ok [INFO] [stdout] test output::stats::html::tests::format_with_language_breakdown ... ok [INFO] [stdout] test output::stats::html::tests::format_escapes_special_characters_in_language ... ok [INFO] [stdout] test output::stats::html::tests::format_without_trend_omits_section ... ok [INFO] [stdout] test output::stats::html::tests::format_summary_only_mode_omits_detailed_sections ... ok [INFO] [stdout] test output::stats::html::tests::format_with_top_files ... ok [INFO] [stdout] test output::stats::html::tests::format_with_trend_history_shows_chart ... ok [INFO] [stdout] test output::stats::html::tests::format_trend_delta_css_classes ... 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::json::tests::json_formatter_files_only_sorted_by_name ... ok [INFO] [stdout] test output::stats::html::tests::format_with_directory_breakdown ... ok [INFO] [stdout] test output::stats::html::tests::format_files_only_mode_omits_charts ... ok [INFO] [stdout] test output::stats::html::tests::format_files_only_mode_shows_only_file_list ... 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_no_empty_files ... 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_skips_language_breakdown ... ok [INFO] [stdout] test output::stats::json::tests::json_formatter_summary_only_skips_directory_breakdown ... ok [INFO] [stdout] test output::stats::json::tests::json_formatter_summary_only_preserves_trend ... 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_valid_json ... 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_trend_with_git_context ... 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_trend ... 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_without_trend ... ok [INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_empty ... ok [INFO] [stdout] test output::stats::json::tests::json_formatter_with_top_files ... ok [INFO] [stdout] test output::stats::json::tests::json_formatter_with_directory_breakdown ... ok [INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_summary_only_preserves_trend ... 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_with_top_files ... 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_with_directory_breakdown ... 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_trend ... ok [INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_depth_zero_shows_full_path ... ok [INFO] [stdout] test output::stats::statistics::tests::language_breakdown_multiple_languages ... ok [INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_single_directory ... ok [INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_summary_only_skips_top_files ... 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::new_has_full_output_mode ... ok [INFO] [stdout] test output::stats::statistics::tests::language_breakdown_single_language ... ok [INFO] [stdout] test output::stats::statistics::tests::project_statistics_with_trend ... ok [INFO] [stdout] test output::stats::markdown::tests::markdown_formatter_without_trend ... ok [INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_dot_returns_unchanged ... ok [INFO] [stdout] test output::stats::statistics::tests::project_statistics_multiple_files ... ok [INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_exceeds_path_components ... ok [INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_depth_handles_root_files ... ok [INFO] [stdout] test output::stats::statistics::tests::project_statistics_single_file ... ok [INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_depth_1_groups_top_level ... ok [INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_exact_match ... ok [INFO] [stdout] test output::stats::statistics::tests::directory_breakdown_multiple_directories ... ok [INFO] [stdout] test output::stats::statistics::tests::project_statistics_empty ... ok [INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_default_code_order ... ok [INFO] [stdout] test output::stats::statistics::tests::with_language_breakdown_preserves_full_mode ... ok [INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_one_returns_first_component ... ok [INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_total_order ... ok [INFO] [stdout] test output::stats::statistics::tests::truncate_path_to_depth_single_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_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_empty ... ok [INFO] [stdout] test output::stats::statistics::tests::with_summary_only_clears_files_and_breakdowns ... ok [INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_with_limit ... 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_name_order ... ok [INFO] [stdout] test output::stats::statistics::tests::with_sorted_files_limit_exceeds_count ... ok [INFO] [stdout] test output::stats::statistics::tests::with_summary_only_computes_average_if_not_set ... ok [INFO] [stdout] test output::stats::statistics::tests::with_summary_only_empty_project_no_average ... 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 output::stats::statistics::tests::with_top_files_fewer_than_n ... 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_sets_summary_only_mode ... ok [INFO] [stdout] test output::stats::statistics::tests::with_summary_only_preserves_trend ... ok [INFO] [stdout] test output::stats::statistics::tests::with_top_files_preserves_full_mode ... 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::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::text_formatter_directory_breakdown_shows_progress_bar ... 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_empty ... 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_summary_only_skips_top_files ... 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_with_colors ... ok [INFO] [stdout] test output::stats::text::tests::text_formatter_trend_shows_percentage ... ok [INFO] [stdout] test output::stats::text::tests::render_progress_bar_negative_ratio_clamped_to_zero ... ok [INFO] [stdout] test output::stats::text::tests::text_formatter_with_directory_breakdown ... ok [INFO] [stdout] test output::stats::text::tests::render_progress_bar_half_ratio ... ok [INFO] [stdout] test output::stats::text::tests::text_formatter_trend_with_relative_time ... ok [INFO] [stdout] test output::stats::text::tests::text_formatter_with_language_breakdown ... 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_files ... ok [INFO] [stdout] test output::stats::text::tests::text_formatter_with_top_files ... ok [INFO] [stdout] test output::stats::text::tests::text_formatter_with_zero_trend_shows_tilde ... ok [INFO] [stdout] test output::svg::builder::tests::builder_adds_elements ... ok [INFO] [stdout] test output::svg::chart::tests::bar_chart_tests::bar_chart_default_creates_empty_chart ... ok [INFO] [stdout] test output::stats::text::tests::text_formatter_with_negative_trend_shows_down_arrow ... ok [INFO] [stdout] test output::svg::builder::tests::builder_adds_raw_svg ... ok [INFO] [stdout] test output::stats::text::tests::render_progress_bar_rounding_boundary ... ok [INFO] [stdout] test output::stats::text::tests::render_progress_bar_preserves_total_width ... 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_creates_svg ... ok [INFO] [stdout] test output::svg::chart::tests::bar_chart_tests::bar_chart_escapes_title ... ok [INFO] [stdout] test output::svg::chart::tests::bar_chart_tests::bar_chart_has_accessibility_attributes ... 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_empty_shows_message ... 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::line_chart_tests::line_chart_default_creates_empty_chart ... ok [INFO] [stdout] test output::svg::chart::tests::horizontal_bar_chart_tests::horizontal_bar_chart_renders ... 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::bar_chart_tests::bar_chart_renders_svg ... 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_single_point_handles_x_step ... 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::line_chart_tests::line_chart_custom_size ... ok [INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_no_id_collision ... ok [INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_without_area ... ok [INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_shows_grid_lines ... ok [INFO] [stdout] test output::svg::data::tests::with_color_sets_color ... ok [INFO] [stdout] test output::svg::chart::tests::line_chart_tests::line_chart_without_points ... ok [INFO] [stdout] test output::svg::element::tests::axis_tests::axis_with_custom_font_size ... ok [INFO] [stdout] test output::svg::data::tests::new_creates_point ... ok [INFO] [stdout] test output::svg::element::tests::axis_tests::horizontal_axis_renders ... 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::element::tests::line_tests::line_with_custom_stroke_width ... 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_and_baseline_renders_area ... 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::html_escape_tests::escapes_ampersand ... 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_multiple ... ok [INFO] [stdout] test output::svg::format::tests::format_number_tests::thousands_show_k ... ok [INFO] [stdout] test output::svg::histogram::tests::bucket_contains_min_boundary ... ok [INFO] [stdout] test output::svg::histogram::tests::bucket_contains_middle_value ... ok [INFO] [stdout] test output::svg::histogram::tests::bucket_excludes_below_min ... ok [INFO] [stdout] test output::svg::histogram::tests::default_buckets_cover_all_ranges ... ok [INFO] [stdout] test output::svg::histogram::tests::default_buckets_no_overlap ... ok [INFO] [stdout] test output::svg::format::tests::html_escape_tests::escapes_quotes ... ok [INFO] [stdout] test output::svg::histogram::tests::bucket_excludes_max_boundary ... ok [INFO] [stdout] test output::svg::histogram::tests::has_sufficient_data_empty ... ok [INFO] [stdout] test output::svg::histogram::tests::from_stats_multiple_buckets ... ok [INFO] [stdout] test output::svg::element::tests::axis_tests::vertical_axis_renders ... ok [INFO] [stdout] test output::svg::histogram::tests::from_stats_empty ... ok [INFO] [stdout] test output::svg::histogram::tests::has_sufficient_data_three_files ... ok [INFO] [stdout] test output::svg::histogram::tests::from_stats_single_bucket ... ok [INFO] [stdout] test output::svg::histogram::tests::has_sufficient_data_two_files ... ok [INFO] [stdout] test output::svg::histogram::tests::render_insufficient_files ... ok [INFO] [stdout] test output::svg::histogram::tests::render_empty_state ... 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_has_axis_title ... 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::with_size ... ok [INFO] [stdout] test output::svg::language_chart::tests::from_stats_empty_files ... ok [INFO] [stdout] test output::svg::histogram::tests::with_title ... ok [INFO] [stdout] test output::svg::language_chart::tests::from_stats_multiple_languages ... ok [INFO] [stdout] test output::svg::language_chart::tests::from_stats_no_language_data ... ok [INFO] [stdout] test output::svg::language_chart::tests::handles_language_name_with_ampersand ... ok [INFO] [stdout] test output::svg::language_chart::tests::render_empty_state ... ok [INFO] [stdout] test output::svg::language_chart::tests::from_stats_single_language ... ok [INFO] [stdout] test output::svg::histogram::tests::unbounded_bucket_contains_large_values ... ok [INFO] [stdout] test output::svg::language_chart::tests::render_hover_tooltips ... ok [INFO] [stdout] test output::svg::language_chart::tests::handles_special_characters_in_language_names ... ok [INFO] [stdout] test output::svg::language_chart::tests::render_multiple_languages_sorted_by_sloc ... ok [INFO] [stdout] test output::svg::language_chart::tests::with_color ... ok [INFO] [stdout] test output::svg::language_chart::tests::render_single_language ... ok [INFO] [stdout] test output::svg::language_chart::tests::with_width ... ok [INFO] [stdout] test output::svg::language_chart::tests::render_has_accessible_title ... ok [INFO] [stdout] test output::svg::style::tests::chart_color_tests::css_var_format ... 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::text_anchor_tests::display_formats ... ok [INFO] [stdout] test output::svg::tests::exports_are_available ... ok [INFO] [stdout] test output::svg::trend_chart::tests::chart_customization ... 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::tests::data_point_with_color ... ok [INFO] [stdout] test output::svg::trend_chart::tests::chart_renders_accessible_title ... 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_more_than_max_reduces ... ok [INFO] [stdout] test output::svg::trend_chart::tests::downsample_less_than_max_returns_all ... 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::element::tests::bar_tests::bar_escapes_special_characters ... ok [INFO] [stdout] test output::svg::trend_chart::tests::format_timestamp_smart_long_range_produces_week ... 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_branch_appears_when_no_ref ... ok [INFO] [stdout] test output::svg::histogram::tests::from_stats_boundary_values ... ok [INFO] [stdout] test output::svg::trend_chart::tests::is_leap_year_check ... ok [INFO] [stdout] test output::svg::trend_chart::tests::git_ref_preferred_over_branch ... ok [INFO] [stdout] test output::svg::trend_chart::tests::single_entry_renders_chart ... ok [INFO] [stdout] test output::svg::trend_chart::tests::multiple_entries_render_line ... ok [INFO] [stdout] test output::svg::trend_chart::tests::timestamp_to_date_leap_year ... ok [INFO] [stdout] test output::svg::trend_chart::tests::week_of_year_calculation ... ok [INFO] [stdout] test output::svg::trend_chart::tests::git_ref_appears_in_label ... ok [INFO] [stdout] test output::svg::trend_chart::tests::timestamp_to_date_conversion ... ok [INFO] [stdout] test output::tests::html_formatter_produces_valid_html ... ok [INFO] [stdout] test output::svg::trend_chart::tests::timestamp_to_date_unix_epoch ... ok [INFO] [stdout] test output::tests::output_format_from_str ... ok [INFO] [stdout] test output::tests::output_format_unknown ... ok [INFO] [stdout] test output::tests::json_formatter_produces_valid_json ... ok [INFO] [stdout] test output::tests::text_formatter_produces_output ... ok [INFO] [stdout] test output::text::tests::color_mode_always_produces_colored_output ... 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::failed_results_shown_first ... ok [INFO] [stdout] test output::text::tests::format_content_violation_category ... ok [INFO] [stdout] test output::text::tests::format_failed_result ... ok [INFO] [stdout] test output::text::tests::default_formatter_hides_passed_files ... ok [INFO] [stdout] test output::text::tests::format_mixed_results ... ok [INFO] [stdout] test output::text::tests::format_structure_denied_file_violation ... ok [INFO] [stdout] test output::text::tests::format_passed_result ... ok [INFO] [stdout] test output::text::tests::format_structure_dir_count_violation ... ok [INFO] [stdout] test output::text::tests::format_structure_file_count_violation ... ok [INFO] [stdout] test output::text::tests::format_structure_max_depth_violation ... ok [INFO] [stdout] test output::text::tests::format_warning_result ... ok [INFO] [stdout] test output::text::tests::grandfathered_status_shown_in_summary ... ok [INFO] [stdout] test output::text::tests::grandfathered_colored_output ... ok [INFO] [stdout] test output::text::tests::grandfathered_with_reason_shown ... ok [INFO] [stdout] test output::text::tests::no_reason_line_when_override_reason_is_none ... ok [INFO] [stdout] test output::text::tests::override_reason_shown_in_output ... ok [INFO] [stdout] test output::text::tests::format_structure_disallowed_file_violation ... ok [INFO] [stdout] test output::text::tests::summary_line_included ... ok [INFO] [stdout] test output::svg::language_chart::tests::render_uses_css_variables ... ok [INFO] [stdout] test output::text::tests::verbose_zero_hides_passed_files ... ok [INFO] [stdout] test output::text::tests::with_suggestions_shows_split_suggestions ... ok [INFO] [stdout] test output::text::tests::verbose_one_shows_grandfathered_files ... ok [INFO] [stdout] test output::text::tests::verbose_zero_hides_grandfathered_files ... ok [INFO] [stdout] test output::text::tests::verbose_one_shows_passed_files ... ok [INFO] [stdout] test output::trend_formatting::tests::format_delta_negative ... ok [INFO] [stdout] test output::trend_formatting::tests::format_delta_positive ... ok [INFO] [stdout] test output::trend_formatting::tests::format_delta_zero ... ok [INFO] [stdout] test output::trend_formatting::tests::percentage_from_negative_delta ... 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::relative_time_hours ... ok [INFO] [stdout] test output::trend_formatting::tests::relative_time_just_now ... ok [INFO] [stdout] test output::trend_formatting::tests::relative_time_minutes ... ok [INFO] [stdout] test output::trend_formatting::tests::relative_time_one_day ... 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_months ... ok [INFO] [stdout] test output::trend_formatting::tests::relative_time_weeks ... ok [INFO] [stdout] test output::trend_formatting::tests::trend_arrow_negative ... ok [INFO] [stdout] test output::trend_formatting::tests::relative_time_one_month ... ok [INFO] [stdout] test output::trend_formatting::tests::relative_time_one_week ... ok [INFO] [stdout] test output::trend_formatting::tests::trend_header_no_git_no_timestamp ... ok [INFO] [stdout] test output::trend_formatting::tests::trend_arrow_positive ... ok [INFO] [stdout] test output::trend_formatting::tests::trend_arrow_zero ... 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_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_line_formatter_with_colors ... ok [INFO] [stdout] test output::trend_formatting::tests::trend_header_with_git_no_branch ... ok [INFO] [stdout] test output::trend_formatting::tests::trend_line_formatter_no_colors ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_creates_rule ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_invalid_allow_pattern ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_with_allow_dirs ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_dir_matches ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_with_allow_files ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_empty_extension_list ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_dir_matches_empty_allowlist ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_builder_with_patterns ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_by_full_path ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_extension_match_with_dot ... 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_allow_files ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_deny_pattern ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_extension ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_pattern ... 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_has_allowlist_empty ... 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_has_dir_allowlist_empty ... 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_glob_star_with_dot_prefix ... 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 ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_pattern ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_directory_partial ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_no_extension_match_when_file_has_no_extension ... ok [INFO] [stdout] test scanner::allowlist_tests::deny_file_patterns_takes_precedence_over_allowlist ... ok [INFO] [stdout] test scanner::allowlist_tests::per_rule_allow_extensions_overrides_global_deny_extensions ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_matches_directory_with_backslash_dot_prefix ... ok [INFO] [stdout] test scanner::allowlist_tests::per_rule_allow_patterns_overrides_global_deny_patterns ... 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_dirs_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_deny_still_takes_precedence_over_per_rule_allow ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_excludes_dir_by_name ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_fallback_respects_gitignore ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_fallback_respects_gitignore_scan_with_structure ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_new_creates_scanner ... ok [INFO] [stdout] test scanner::allowlist_tests::per_rule_deny_extensions_trigger_violation ... ok [INFO] [stdout] test scanner::allowlist_tests::deny_takes_precedence_over_allowlist ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_no_gitignore_multiple_paths ... 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_all_with_structure ... 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_without_gitignore ... 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_with_gitignore_true_does_not_error ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_excludes_patterns ... 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_with_gitignore ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_with_structure_uses_exclude_patterns ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_with_structure_without_gitignore ... ok [INFO] [stdout] test scanner::composite_tests::scan_files_function_basic ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_without_gitignore_finds_files ... ok [INFO] [stdout] test output::html::tests::language_breakdown::language_chart_not_shown_without_language_breakdown ... ok [INFO] [stdout] test output::path::tests::normalize_separators_converts_backslashes ... 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_shows_summary_section ... ok [INFO] [stdout] test output::stats::text::tests::text_formatter_summary_only_skips_language_breakdown ... ok [INFO] [stdout] test output::svg::trend_chart::tests::chart_tooltips_include_delta ... ok [INFO] [stdout] test output::text::tests::format_structure_naming_convention_violation ... ok [INFO] [stdout] test output::text::tests::without_suggestions_flag_hides_split_suggestions ... ok [INFO] [stdout] test scanner::allowlist_tests::allowlist_rule_file_matches_deny_extension ... ok [INFO] [stdout] test scanner::composite_tests::scan_files_function_with_exclude ... ok [INFO] [stdout] test scanner::composite_tests::scan_files_with_exclude ... 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 git::tests::changed_files_detects_directory_to_file_change ... ok [INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_negation_pattern ... ok [INFO] [stdout] test scanner::composite_tests::scan_files_with_gitignore_true_fallback ... 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_relative_dot_path ... ok [INFO] [stdout] test scanner::directory_tests::scanner_finds_files_in_subdirectories ... ok [INFO] [stdout] test scanner::filter::tests::filter_by_extension ... ok [INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_scan_subdirectory_directly ... ok [INFO] [stdout] test git::tests::changed_files_detects_deleted_file ... ok [INFO] [stdout] test scanner::directory_tests::scanner_respects_filter ... ok [INFO] [stdout] test scanner::filter::tests::filter_complex_exclude_patterns ... ok [INFO] [stdout] test scanner::filter::tests::filter_empty_extensions_accepts_all ... ok [INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_scan_with_structure ... ok [INFO] [stdout] test scanner::directory_tests::file_scanner_default_scan_all_uses_scan ... ok [INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_respects_gitignore_without_git_repo ... ok [INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_nested_gitignore ... ok [INFO] [stdout] test scanner::directory_tests::scanner_finds_files_in_directory ... ok [INFO] [stdout] test scanner::filter::tests::filter_file_without_extension_rejected_when_extensions_set ... ok [INFO] [stdout] test scanner::filter::tests::filter_multiple_extensions ... ok [INFO] [stdout] test scanner::filter::tests::filter_exclude_by_filename ... ok [INFO] [stdout] test scanner::global_allow_tests::file_matches_global_allow_pattern ... ok [INFO] [stdout] test scanner::filter::tests::filter_file_without_extension_accepted_when_empty_extensions ... ok [INFO] [stdout] test scanner::global_allow_tests::file_matches_global_allow_extension ... ok [INFO] [stdout] test scanner::global_allow_tests::has_global_dir_allowlist_empty ... 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_with_files ... ok [INFO] [stdout] test scanner::composite_tests::scan_files_without_gitignore ... ok [INFO] [stdout] test scanner::filter::tests::filter_exclude_patterns ... ok [INFO] [stdout] test scanner::global_deny_tests::dir_matches_global_deny_returns_original_pattern ... ok [INFO] [stdout] test scanner::filter::tests::filter_invalid_pattern_returns_error ... ok [INFO] [stdout] test scanner::filter::tests::filter_exclude_specific_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_allow_tests::dir_matches_global_allow ... ok [INFO] [stdout] test scanner::global_deny_tests::global_deny_extensions_trigger_violation ... 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::global_deny_tests::global_deny_file_patterns_trigger_violation ... ok [INFO] [stdout] test scanner::global_deny_tests::global_deny_patterns_trigger_violation ... ok [INFO] [stdout] test scanner::global_deny_tests::multiple_directory_only_deny_patterns ... ok [INFO] [stdout] test scanner::global_deny_tests::structure_scan_config_file_matches_global_deny_extension ... 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::global_deny_tests::structure_scan_config_file_matches_global_deny_file_pattern ... ok [INFO] [stdout] test scanner::naming_pattern_tests::allowlist_rule_builder_invalid_regex_returns_error ... ok [INFO] [stdout] test scanner::global_deny_tests::structure_scan_config_file_matches_global_deny_pattern ... ok [INFO] [stdout] test scanner::naming_pattern_tests::allowlist_rule_naming_pattern_matches_valid_filename ... ok [INFO] [stdout] test scanner::global_deny_tests::global_deny_dirs_trigger_violation ... ok [INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_complex_wildcards ... ok [INFO] [stdout] test scanner::naming_pattern_tests::allowlist_rule_no_naming_pattern_accepts_all ... ok [INFO] [stdout] test scanner::directory_tests::directory_scanner_without_gitignore_ignores_gitignore_file ... 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_empty ... ok [INFO] [stdout] test scanner::naming_pattern_tests::scan_with_structure_combined_allowlist_and_naming_violations ... ok [INFO] [stdout] test scanner::global_deny_tests::deny_pattern_without_trailing_slash_only_matches_files ... 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::allowlist_rule_naming_pattern_rejects_invalid_filename ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_combines_results ... ok [INFO] [stdout] test scanner::naming_pattern_tests::disallowed_file_does_not_trigger_naming_violation ... ok [INFO] [stdout] test scanner::composite_tests::composite_scanner_scan_all_structure_no_gitignore_multiple_paths ... ok [INFO] [stdout] test scanner::directory_tests::directory_scanner_with_gitignore_anchored_pattern ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_empty_patterns_match_nothing ... ok [INFO] [stdout] test scanner::structure_config_tests::scan_result_default ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_extracts_dir_names ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_extract_dir_names_windows_paths ... ok [INFO] [stdout] test scanner::structure_config_tests::find_matching_allowlist_rule_returns_first_match ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_combined_patterns ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_extract_dir_names_complex ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_is_scanner_excluded_by_dir_name ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_is_count_excluded ... 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::naming_pattern_tests::scan_with_structure_detects_naming_violations ... 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_is_scanner_excluded_directory_by_name ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_find_no_matching_rule ... ok [INFO] [stdout] test scanner::naming_pattern_tests::scan_with_structure_naming_violation_includes_pattern ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_with_count_exclude ... ok [INFO] [stdout] test scanner::structure_config_tests::structure_scan_config_with_scanner_exclude ... 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_config_tests::structure_scan_config_invalid_pattern_returns_error ... 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::scan_with_structure_filter_excludes_files ... 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_per_rule_allow_files_works ... 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_depth_zero_at_root ... ok [INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_allowlist_violation_includes_rule_pattern ... ok [INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_all_with_structure_merges_results ... ok [INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_empty_directory ... 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::basic_tests::scan_with_structure_detects_allowlist_violations ... 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_tracks_depth ... ok [INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_nested_directory_depth ... 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_with_structure_respects_scanner_exclude ... 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::basic_tests::scan_with_structure_multiple_dirs_at_same_level ... 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_no_violation_for_matching_files ... ok [INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_respects_count_exclude ... 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_handles_files_at_root ... 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::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_gitignore_scanner_exclude_prunes_directory ... ok [INFO] [stdout] test state::tests::cache_path_construction ... ok [INFO] [stdout] test state::tests::current_unix_timestamp_is_reasonable ... ok [INFO] [stdout] test state::tests::baseline_path_construction ... ok [INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::scan_with_structure_scanner_exclude_dotgit_pattern ... ok [INFO] [stdout] test state::tests::detect_state_dir_in_git_repo_returns_git_path ... ok [INFO] [stdout] test state::tests::atomic_write_creates_file ... ok [INFO] [stdout] test state::tests::atomic_write_overwrites_existing_file ... ok [INFO] [stdout] test state::tests::detect_state_dir_outside_git_returns_fallback ... ok [INFO] [stdout] test state::tests::atomic_write_preserves_original_on_error ... ok [INFO] [stdout] test state::tests::discover_project_root_finds_config_file ... ok [INFO] [stdout] test scanner::structure_scan_tests::dot_prefix_scope_tests::scan_with_dot_prefix_detects_deny_files_violation ... ok [INFO] [stdout] test state::tests::discover_project_root_finds_git_directory ... ok [INFO] [stdout] test scanner::structure_scan_tests::basic_tests::scan_with_structure_with_count_exclude_does_not_affect_file_list ... ok [INFO] [stdout] test state::tests::atomic_write_cleans_up_temp_files ... 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_in_git_repo ... ok [INFO] [stdout] test state::tests::exclusive_lock_succeeds_on_uncontested_file ... ok [INFO] [stdout] test state::tests::discover_project_root_prefers_git_over_config ... ok [INFO] [stdout] test state::tests::lock_error_display_io ... ok [INFO] [stdout] test state::tests::lock_error_source_io_returns_source ... ok [INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::scan_with_structure_scanner_exclude_multiple_patterns ... ok [INFO] [stdout] test state::tests::lock_error_from_io_error ... ok [INFO] [stdout] test state::tests::lock_error_display_timeout ... ok [INFO] [stdout] test state::tests::multiple_shared_locks_allowed ... ok [INFO] [stdout] test state::tests::ensure_parent_dir_handles_root_path ... ok [INFO] [stdout] test state::tests::history_path_construction ... ok [INFO] [stdout] test state::tests::discover_project_root_stops_at_first_marker ... ok [INFO] [stdout] test state::tests::history_path_in_git_repo ... ok [INFO] [stdout] test state::tests::lock_error_source_timeout_returns_none ... ok [INFO] [stdout] test scanner::structure_scan_tests::dot_prefix_scope_tests::scan_with_dot_prefix_detects_deny_dirs_violation ... ok [INFO] [stdout] test state::tests::atomic_write_creates_parent_directories ... ok [INFO] [stdout] test state::tests::save_outcome_is_skipped ... ok [INFO] [stdout] test state::tests::shared_lock_guard_acquires_lock_successfully ... ok [INFO] [stdout] test state::tests::shared_lock_guard_unlocks_on_drop ... ok [INFO] [stdout] test state::tests::ensure_parent_dir_creates_nested_directory ... 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::try_current_unix_timestamp_returns_some ... 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_missing_unit_error ... ok [INFO] [stdout] test stats::duration::tests::test_parse_days ... ok [INFO] [stdout] test state::tests::unlock_file_is_idempotent ... ok [INFO] [stdout] test stats::duration::tests::test_missing_number_error ... ok [INFO] [stdout] test stats::duration::tests::test_parse_seconds ... ok [INFO] [stdout] test stats::duration::tests::test_case_insensitive ... ok [INFO] [stdout] test stats::duration::tests::test_parse_hours ... ok [INFO] [stdout] test stats::duration::tests::test_invalid_unit_error ... ok [INFO] [stdout] test stats::duration::tests::test_parse_minutes ... 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::trend::tests::delta_tests::test_compute_decrease ... ok [INFO] [stdout] test stats::trend::tests::delta_tests::test_compute_increase ... ok [INFO] [stdout] test stats::duration::tests::test_zero_duration_error ... ok [INFO] [stdout] test stats::trend::tests::delta_tests::test_default ... ok [INFO] [stdout] test stats::trend::tests::entry_tests::test_with_timestamp ... ok [INFO] [stdout] test stats::trend::tests::entry_tests::test_with_git_context ... ok [INFO] [stdout] test stats::trend::tests::delta_tests::test_compute_copies_git_context ... ok [INFO] [stdout] test stats::trend::tests::entry_tests::test_with_git_context_commit_only ... ok [INFO] [stdout] test state::tests::shared_lock_succeeds_on_uncontested_file ... ok [INFO] [stdout] test stats::trend::tests::entry_tests::test_equality ... ok [INFO] [stdout] test stats::trend::tests::delta_tests::test_no_changes ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_add ... ok [INFO] [stdout] test scanner::structure_scan_tests::exclude_pruning_tests::default_scanner_config_excludes_git_directory ... ok [INFO] [stdout] test stats::trend::tests::entry_tests::test_new ... 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_if_allowed_with_context_respects_interval ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_add_with_context_none ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_compute_delta_empty ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_default_trait ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_compute_delta_with_entry ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_entries ... 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_equality ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_load_nonexistent_returns_error ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_add_entry ... ok [INFO] [stdout] test stats::trend::tests::query_tests::test_compute_delta_since_empty_history ... ok [INFO] [stdout] test state::tests::ensure_parent_dir_succeeds_when_exists ... 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_new ... ok [INFO] [stdout] test stats::trend::tests::query_tests::test_compute_delta_since_exact_boundary ... 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_finds_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::query_tests::test_compute_delta_since_no_entry_old_enough ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_load_or_default_valid_file ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_save_and_load ... ok [INFO] [stdout] test stats::trend::tests::history_tests::test_git_context_preserved_in_save_load ... 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_before ... 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_find_entry_at_or_before_multiple_entries_finds_nearest ... 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::query_tests::test_find_entry_at_or_before_single_entry_exact ... 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_add_if_allowed_respects_interval ... 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_entries ... ok [INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_max_entries_no_excess ... ok [INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_no_config_no_changes ... ok [INFO] [stdout] test stats::trend::tests::retention_tests::test_apply_retention_combined_age_and_entries ... ok [INFO] [stdout] test stats::trend::tests::retention_tests::test_config_partial_toml ... 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_max_age_days ... ok [INFO] [stdout] test stats::trend::tests::retention_tests::test_config_serialization ... ok [INFO] [stdout] test stats::trend::tests::retention_tests::test_should_add_after_interval_returns_true ... 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_exactly_at_interval_returns_true ... 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_within_interval_returns_false ... ok [INFO] [stdout] test stats::trend::tests::significance_tests::test_code_at_default_threshold_not_significant ... ok [INFO] [stderr] ⚠ Warning: Failed to acquire write lock on test file [INFO] [stderr] × /tmp/.tmpqq73iL/test.json: lock acquisition timed out [INFO] [stderr] help: test file save skipped [INFO] [stderr] ⚠ Warning: Failed to acquire read lock on test file [INFO] [stderr] × /tmp/.tmpiBH6pN/test.json: lock acquisition timed out [INFO] [stderr] help: test file may be stale if written concurrently [INFO] [stdout] test stats::trend::tests::significance_tests::test_code_above_default_threshold ... ok [INFO] [stdout] test stats::trend::tests::retention_tests::test_save_with_retention_applies_cleanup ... ok [INFO] [stdout] test state::tests::exclusive_lock_times_out_when_held ... ok [INFO] [stdout] test state::tests::shared_lock_guard_reports_not_locked_on_timeout ... ok [INFO] [stdout] test state::tests::shared_lock_times_out_when_exclusive_lock_held ... ok [INFO] [stdout] test stats::trend::tests::significance_tests::test_custom_threshold ... ok [INFO] [stdout] test stats::trend::tests::significance_tests::test_custom_threshold_exceeded ... ok [INFO] [stdout] test stats::trend::tests::retention_tests::test_should_add_with_zero_interval ... ok [INFO] [stdout] test stats::trend::tests::significance_tests::test_file_change_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_no_changes_not_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_code_below_default_threshold_not_significant ... ok [INFO] [stdout] test state::tests::atomic_write_returns_skipped_on_lock_timeout ... 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_only_comment_blank_changes_not_significant ... ok [INFO] [stdout] test stats::trend::tests::significance_tests::test_zero_threshold_always_significant ... ok [INFO] [stdout] test tests::exit_codes_are_distinct ... ok [INFO] [stdout] test stats::trend::tests::significance_tests::test_zero_delta_with_zero_threshold ... ok [INFO] [stdout] test stats::trend::tests::retention_tests::test_save_with_retention_age_based ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 1992 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.67s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/sloc_guard-71452a3ed10153ad) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running tests/action_contract_tests.rs (/opt/rustwide/target/debug/deps/action_contract_tests-afe5fa9b8b110b21) [INFO] [stdout] [INFO] [stdout] running 17 tests [INFO] [stdout] test action_contract_exit_code_2_on_config_error ... ok [INFO] [stdout] test action_contract_diff_option_exists ... ok [INFO] [stdout] test action_contract_exit_code_0_on_success ... ok [INFO] [stdout] test action_contract_full_workflow_passing ... ok [INFO] [stdout] test action_contract_json_has_summary_failed ... ok [INFO] [stdout] test action_contract_json_has_summary_total_files ... ok [INFO] [stdout] test action_contract_json_has_summary_passed ... ok [INFO] [stdout] test action_contract_exit_code_1_on_violation ... ok [INFO] [stdout] test action_contract_full_workflow_with_sarif ... ok [INFO] [stdout] test action_contract_write_sarif_option_exists ... ok [INFO] [stdout] test action_contract_config_option_exists ... ok [INFO] [stdout] test action_contract_json_has_summary_warnings ... ok [INFO] [stdout] test action_contract_write_json_option_exists ... ok [INFO] [stdout] test action_contract_format_text_option_exists ... ok [INFO] [stdout] test action_contract_json_has_summary_grandfathered ... ok [INFO] [stdout] test action_contract_baseline_option_exists ... ok [INFO] [stdout] test action_contract_strict_option_exists ... ok [INFO] [stderr] Running tests/check_integration_tests.rs (/opt/rustwide/target/debug/deps/check_integration_tests-4012ed5f41ceb7bd) [INFO] [stdout] [INFO] [stdout] test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 44 tests [INFO] [stdout] test check_integration_tests::check_core_tests::check_fails_when_file_exceeds_limit ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_no_config_uses_defaults ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_nonexistent_path_handles_gracefully ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_verbose_mode_shows_details ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_passes_with_small_files ... ok [INFO] [stdout] test check_integration_tests::check_output_tests::check_html_output_format ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_cli_include_filter ... ok [INFO] [stdout] test check_integration_tests::check_output_tests::check_markdown_output_format ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_color_never_disables_colors ... ok [INFO] [stdout] test check_integration_tests::check_output_tests::check_report_json_creates_stats_file ... ok [INFO] [stdout] test check_integration_tests::check_output_tests::check_sarif_output_format ... ok [INFO] [stdout] test check_integration_tests::check_output_tests::check_output_to_file ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_warn_only_mode_always_succeeds ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_strict_mode_fails_on_warnings ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_content_rules_apply_pattern_limits ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_cli_exclude_pattern ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_warns_when_near_threshold ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_quiet_mode_suppresses_output ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_structure_global_deny_extension_violation ... ok [INFO] [stdout] test check_integration_tests::check_output_tests::check_json_output_format ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_structure_allowlist_violation ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_structure_global_allowlist_violation ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_from_subdirectory_with_relative_paths ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_structure_max_dirs_violation ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_path_normalization_exclude_patterns ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_invalid_config_returns_error ... ok [INFO] [stdout] test check_integration_tests::check_state_tests::check_auto_snapshot_disabled_by_default ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_structure_cli_override ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_cli_max_lines_override ... ok [INFO] [stdout] test check_integration_tests::check_state_tests::check_auto_snapshot_creates_history_file ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_structure_path_normalization ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_structure_max_files_violation ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_path_normalization_dot_slash_matches_rules ... ok [INFO] [stdout] test check_integration_tests::check_state_tests::check_auto_snapshot_respects_min_interval ... ok [INFO] [stdout] test check_integration_tests::check_state_tests::check_update_baseline_creates_file ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_path_normalization_dot_backslash_matches_rules ... ok [INFO] [stdout] test check_integration_tests::check_state_tests::check_count_blank_flag ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_cli_ext_override ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_path_normalization_rule_is_effective ... ok [INFO] [stdout] test check_integration_tests::check_rules_tests::check_directory_with_normalized_paths ... ok [INFO] [stdout] test check_integration_tests::check_state_tests::check_with_baseline_grandfathers_violations ... ok [INFO] [stdout] test check_integration_tests::check_state_tests::check_skip_comments_by_default ... ok [INFO] [stdout] test check_integration_tests::check_state_tests::check_count_comments_flag ... ok [INFO] [stdout] test check_integration_tests::check_core_tests::check_no_config_with_cli_args ... ok [INFO] [stderr] Running tests/config_integration_tests.rs (/opt/rustwide/target/debug/deps/config_integration_tests-d1fa63a9ee840260) [INFO] [stdout] [INFO] [stdout] test result: ok. 44 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.43s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 19 tests [INFO] [stdout] test config_show_with_scanner_exclude_patterns ... ok [INFO] [stdout] test config_validate_invalid_glob_pattern ... ok [INFO] [stdout] test config_show_custom_path ... ok [INFO] [stdout] test config_validate_custom_path ... ok [INFO] [stdout] test extends_policy_normal_is_default ... ok [INFO] [stdout] test config_show_with_content_rules ... ok [INFO] [stdout] test config_show_missing_file_uses_defaults ... ok [INFO] [stdout] test config_show_text_format ... ok [INFO] [stdout] test config_validate_valid_config ... ok [INFO] [stdout] test extends_policy_offline_with_local_extends ... ok [INFO] [stdout] test extends_policy_refresh_flag_is_recognized ... ok [INFO] [stdout] test config_validate_invalid_warn_threshold ... ok [INFO] [stdout] test config_validate_missing_file ... ok [INFO] [stdout] test config_show_json_contains_expected_fields ... ok [INFO] [stdout] test config_show_json_format ... ok [INFO] [stdout] test config_show_json_parseable ... ok [INFO] [stdout] test config_validate_invalid_toml_syntax ... ok [INFO] [stdout] test extends_policy_refresh_with_preset ... ok [INFO] [stdout] test extends_policy_refresh_with_check_command ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s [INFO] [stdout] [INFO] [stderr] Running tests/explain_integration_tests.rs (/opt/rustwide/target/debug/deps/explain_integration_tests-8ede3e9e27548007) [INFO] [stdout] [INFO] [stdout] running 15 tests [INFO] [stdout] test explain_no_config_uses_defaults ... ok [INFO] [stdout] test explain_file_matching_rule ... ok [INFO] [stdout] test explain_file_with_default_rules ... ok [INFO] [stdout] test explain_deep_nested_path ... ok [INFO] [stdout] test explain_directory_with_unlimited_setting ... ok [INFO] [stdout] test explain_directory_structure ... ok [INFO] [stdout] test explain_file_outside_extensions_filter ... ok [INFO] [stdout] test explain_json_format ... ok [INFO] [stdout] test explain_directory_with_structure_rules ... ok [INFO] [stdout] test explain_text_format ... ok [INFO] [stdout] test explain_with_custom_config ... ok [INFO] [stdout] test explain_nonexistent_file_returns_error ... ok [INFO] [stdout] test explain_json_parseable ... ok [INFO] [stdout] test explain_shows_rule_with_reason ... ok [INFO] [stdout] test explain_shows_rule_chain_for_file ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s [INFO] [stdout] [INFO] [stderr] Running tests/init_integration_tests.rs (/opt/rustwide/target/debug/deps/init_integration_tests-ed9c973616a91492) [INFO] [stdout] [INFO] [stdout] running 9 tests [INFO] [stdout] test init_fails_without_parent_directories ... ok [INFO] [stdout] test init_force_overwrites_existing_config ... ok [INFO] [stdout] test init_succeeds_with_existing_parent_directory ... ok [INFO] [stdout] test init_fails_if_config_exists ... ok [INFO] [stdout] test init_creates_default_config_file ... ok [INFO] [stdout] test init_template_contains_required_sections ... ok [INFO] [stdout] test init_template_is_valid_toml ... ok [INFO] [stdout] test init_creates_config_at_custom_path ... ok [INFO] [stdout] test init_created_config_can_be_used_by_check ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s [INFO] [stdout] [INFO] [stderr] Running tests/stats_integration_tests.rs (/opt/rustwide/target/debug/deps/stats_integration_tests-f5ec02df573ce07c) [INFO] [stdout] [INFO] [stdout] running 34 tests [INFO] [stdout] test stats_bare_command_requires_subcommand ... ok [INFO] [stdout] test stats_history_json_format ... ok [INFO] [stdout] test stats_history_empty ... ok [INFO] [stdout] test stats_history_limit ... ok [INFO] [stdout] test stats_history_with_entries ... ok [INFO] [stdout] test stats_files_top_largest_files ... ok [INFO] [stdout] test stats_breakdown_by_directory ... ok [INFO] [stdout] test stats_files_shows_all_files ... ok [INFO] [stdout] test stats_summary_cli_include_filter ... ok [INFO] [stdout] test stats_report_html_output ... ok [INFO] [stdout] test stats_summary_cli_ext_filter ... ok [INFO] [stdout] test stats_files_sort_by_code ... ok [INFO] [stdout] test stats_summary_empty_directory ... ok [INFO] [stdout] test stats_summary_handles_binary_files_gracefully ... ok [INFO] [stdout] test stats_summary_with_specific_path ... ok [INFO] [stdout] test stats_summary_handles_empty_files ... ok [INFO] [stdout] test stats_trend_invalid_since_falls_back ... ok [INFO] [stdout] test stats_trend_empty_history ... ok [INFO] [stdout] test stats_summary_markdown_format ... ok [INFO] [stdout] test stats_trend_json_format ... ok [INFO] [stdout] test stats_summary_no_config_mode ... ok [INFO] [stdout] test stats_breakdown_by_language ... ok [INFO] [stdout] test stats_summary_basic_output ... ok [INFO] [stdout] test stats_report_to_file ... ok [INFO] [stdout] test stats_summary_json_format ... ok [INFO] [stdout] test stats_trend_shows_delta_values ... ok [INFO] [stdout] test stats_trend_shows_summary_only_not_file_list ... ok [INFO] [stdout] test stats_trend_markdown_format ... ok [INFO] [stdout] test stats_summary_cli_exclude_pattern ... ok [INFO] [stdout] test stats_trend_basic ... ok [INFO] [stdout] test stats_trend_without_history_shows_summary_only ... ok [INFO] [stdout] test stats_summary_handles_files_with_only_comments ... ok [INFO] [stdout] test stats_trend_with_git_context_display ... ok [INFO] [stdout] test stats_trend_with_since ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s [INFO] [stdout] [INFO] [stderr] Doc-tests sloc_guard [INFO] [stdout] [INFO] [stdout] running 1 test [INFO] [stdout] test src/stats/duration.rs - stats::duration::parse_duration (line 26) ... ignored [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stdout] all doctests ran in 0.62s; merged doctests compilation took 0.61s [INFO] running `Command { std: "docker" "inspect" "917a4a27d61ea2d13d9a7e2233345cad37aa49097ee83beb86e2b1e19214cac0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "917a4a27d61ea2d13d9a7e2233345cad37aa49097ee83beb86e2b1e19214cac0", kill_on_drop: false }` [INFO] [stdout] 917a4a27d61ea2d13d9a7e2233345cad37aa49097ee83beb86e2b1e19214cac0