[INFO] fetching crate kardo-gate 0.4.0... [INFO] testing kardo-gate-0.4.0 against master#562dee4820c458d823175268e41601d4c060588a for pr-154210-1 [INFO] extracting crate kardo-gate 0.4.0 into /workspace/builds/worker-6-tc1/source [INFO] started tweaking crates.io crate kardo-gate 0.4.0 [INFO] finished tweaking crates.io crate kardo-gate 0.4.0 [INFO] tweaked toml for crates.io crate kardo-gate 0.4.0 written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate kardo-gate 0.4.0 on toolchain 562dee4820c458d823175268e41601d4c060588a [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate kardo-gate 0.4.0 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded supports-color v2.1.0 [INFO] [stderr] Downloaded cassowary v0.3.0 [INFO] [stderr] Downloaded unicode-truncate v1.1.0 [INFO] [stderr] Downloaded ratatui v0.29.0 [INFO] [stderr] Downloaded libz-sys v1.1.24 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 2a0efc028d6b39ea95d3e8a3360e7199a12e4c391dca1988b5166c02ede3a233 [INFO] running `Command { std: "docker" "start" "-a" "2a0efc028d6b39ea95d3e8a3360e7199a12e4c391dca1988b5166c02ede3a233", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "2a0efc028d6b39ea95d3e8a3360e7199a12e4c391dca1988b5166c02ede3a233", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "2a0efc028d6b39ea95d3e8a3360e7199a12e4c391dca1988b5166c02ede3a233", kill_on_drop: false }` [INFO] [stdout] 2a0efc028d6b39ea95d3e8a3360e7199a12e4c391dca1988b5166c02ede3a233 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 7f03f44714993edab403615661833dafc45a64dcfab1ce7438c6ef9e4a91fb15 [INFO] running `Command { std: "docker" "start" "-a" "7f03f44714993edab403615661833dafc45a64dcfab1ce7438c6ef9e4a91fb15", kill_on_drop: false }` [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Compiling percent-encoding v2.3.2 [INFO] [stderr] Compiling unicode-width v0.2.0 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling simd-adler32 v0.3.8 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Compiling litrs v1.0.0 [INFO] [stderr] Compiling is_ci v1.2.0 [INFO] [stderr] Compiling linux-raw-sys v0.4.15 [INFO] [stderr] Compiling rustls v0.23.37 [INFO] [stderr] Compiling castaway v0.2.4 [INFO] [stderr] Compiling is-terminal v0.4.17 [INFO] [stderr] Compiling pulldown-cmark v0.12.2 [INFO] [stderr] Compiling form_urlencoded v1.2.2 [INFO] [stderr] Compiling miniz_oxide v0.8.9 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Compiling owo-colors v4.3.0 [INFO] [stderr] Compiling indexmap v2.13.0 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Compiling getopts v0.2.24 [INFO] [stderr] Compiling compact_str v0.8.1 [INFO] [stderr] Compiling supports-color v2.1.0 [INFO] [stderr] Compiling unicode-truncate v1.1.0 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling flate2 v1.1.9 [INFO] [stderr] Compiling webpki-roots v0.26.11 [INFO] [stderr] Compiling supports-color v3.0.2 [INFO] [stderr] Compiling lru v0.12.5 [INFO] [stderr] Compiling unicase v2.9.0 [INFO] [stderr] Compiling pulldown-cmark-escape v0.11.0 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling cassowary v0.3.0 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling document-features v0.2.12 [INFO] [stderr] Compiling crossterm v0.28.1 [INFO] [stderr] Compiling crossterm v0.29.0 [INFO] [stderr] Compiling libz-sys v1.1.24 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling libssh2-sys v0.3.1 [INFO] [stderr] Compiling libgit2-sys v0.17.0+1.8.1 [INFO] [stderr] Compiling comfy-table v7.2.2 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Compiling rustls-webpki v0.103.9 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling tinystr v0.8.2 [INFO] [stderr] Compiling potential_utf v0.1.4 [INFO] [stderr] Compiling strum v0.26.3 [INFO] [stderr] Compiling clap v4.5.60 [INFO] [stderr] Compiling icu_locale_core v2.1.1 [INFO] [stderr] Compiling icu_collections v2.1.1 [INFO] [stderr] Compiling ratatui v0.29.0 [INFO] [stderr] Compiling icu_provider v2.1.1 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling icu_normalizer v2.1.1 [INFO] [stderr] Compiling icu_properties v2.1.2 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling serde_yaml v0.9.34+deprecated [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling git2 v0.19.0 [INFO] [stderr] Compiling ureq v2.12.1 [INFO] [stderr] Compiling kardo-gate v0.4.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 42.89s [INFO] running `Command { std: "docker" "inspect" "7f03f44714993edab403615661833dafc45a64dcfab1ce7438c6ef9e4a91fb15", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "7f03f44714993edab403615661833dafc45a64dcfab1ce7438c6ef9e4a91fb15", kill_on_drop: false }` [INFO] [stdout] 7f03f44714993edab403615661833dafc45a64dcfab1ce7438c6ef9e4a91fb15 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 514619c4f1b0588b9f6ce6db27fa21c3e48ef110494fd7cf621bfa8d45e84af7 [INFO] running `Command { std: "docker" "start" "-a" "514619c4f1b0588b9f6ce6db27fa21c3e48ef110494fd7cf621bfa8d45e84af7", kill_on_drop: false }` [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling crossterm v0.29.0 [INFO] [stderr] Compiling tempfile v3.26.0 [INFO] [stderr] Compiling comfy-table v7.2.2 [INFO] [stderr] Compiling kardo-gate v0.4.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 12.93s [INFO] running `Command { std: "docker" "inspect" "514619c4f1b0588b9f6ce6db27fa21c3e48ef110494fd7cf621bfa8d45e84af7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "514619c4f1b0588b9f6ce6db27fa21c3e48ef110494fd7cf621bfa8d45e84af7", kill_on_drop: false }` [INFO] [stdout] 514619c4f1b0588b9f6ce6db27fa21c3e48ef110494fd7cf621bfa8d45e84af7 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] e68ca57264cc8d703cc76c5db1c0122f2b9226b2feea62d9e6efe6984d82a424 [INFO] running `Command { std: "docker" "start" "-a" "e68ca57264cc8d703cc76c5db1c0122f2b9226b2feea62d9e6efe6984d82a424", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.29s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/kardo_gate-7e764d8f6a640314) [INFO] [stdout] [INFO] [stdout] running 472 tests [INFO] [stdout] test agent_reporter::tests::test_agent_issues_sorted_severity_desc ... ok [INFO] [stdout] test agent_reporter::tests::test_format_agent_report_no_issues_contains_no_issues_found ... ok [INFO] [stdout] test agent_reporter::tests::test_agent_report_with_issues_does_not_panic ... ok [INFO] [stdout] test agent_reporter::tests::test_format_agent_report_yellow_threshold ... ok [INFO] [stdout] test agent_reporter::tests::test_agent_status_thresholds ... ok [INFO] [stdout] test agent_reporter::tests::test_agent_report_no_issues_does_not_panic ... ok [INFO] [stdout] test baseline::tests::test_compute_diff_no_baseline ... ok [INFO] [stdout] test baseline::tests::test_baseline_path_ends_with_expected_filename ... ok [INFO] [stdout] test agent_reporter::tests::test_format_agent_report_red_threshold ... ok [INFO] [stdout] test baseline::tests::test_current_timestamp_format ... ok [INFO] [stdout] test baseline::tests::test_days_to_ymd_epoch ... ok [INFO] [stdout] test baseline::tests::test_days_to_ymd_known_date ... ok [INFO] [stdout] test baseline::tests::test_load_returns_none_when_file_absent ... ok [INFO] [stdout] test agent_reporter::tests::test_format_agent_report_contains_kardo_gate_header ... ok [INFO] [stdout] test agent_reporter::tests::test_format_agent_report_with_issues_contains_issue_lines ... ok [INFO] [stdout] test baseline::tests::test_load_backward_compat_no_history_field ... ok [INFO] [stdout] test baseline::tests::test_load_returns_none_on_corrupt_json ... ok [INFO] [stdout] test baseline::tests::test_sparkline_length_matches_input ... ok [INFO] [stdout] test baseline::tests::test_sparkline_empty_returns_empty ... ok [INFO] [stdout] test baseline::tests::test_sparkline_score_100_maps_to_full_block ... ok [INFO] [stdout] test baseline::tests::test_sparkline_single_score_returns_empty ... ok [INFO] [stdout] test baseline::tests::test_sparkline_score_0_maps_to_lower_block ... ok [INFO] [stdout] test baseline::tests::test_sparkline_two_scores_returns_two_chars ... ok [INFO] [stdout] test config::tests::test_custom_rules_default_is_empty ... ok [INFO] [stdout] test config::tests::test_default_config_has_sensible_values ... ok [INFO] [stdout] test baseline::tests::test_compute_diff_no_new ... ok [INFO] [stdout] test config::tests::test_config_drop_threshold_over_100_clamped ... ok [INFO] [stdout] test config::tests::test_default_ignore_includes_calibration ... ok [INFO] [stdout] test config::tests::test_config_partial_file_uses_defaults_for_missing_fields ... ok [INFO] [stdout] test baseline::tests::test_save_creates_file_atomically ... ok [INFO] [stdout] test config::tests::test_load_missing_file_returns_default ... ok [INFO] [stdout] test config::tests::test_config_parse_error_returns_default ... ok [INFO] [stdout] test config::tests::test_default_ignore_includes_fixtures ... ok [INFO] [stdout] test config::tests::test_config_missing_file_returns_default ... ok [INFO] [stdout] test config::tests::test_custom_rules_parse_from_yaml ... ok [INFO] [stdout] test config::tests::test_custom_rule_default_weight_is_5 ... ok [INFO] [stdout] test config::tests::test_default_ignore_includes_testdata ... ok [INFO] [stdout] test config::tests::test_config_warn_threshold_over_100_clamped ... ok [INFO] [stdout] test config::tests::test_validate_default_config_passes ... ok [INFO] [stdout] test config::tests::test_load_partial_yaml_uses_defaults ... ok [INFO] [stdout] test config::tests::test_validate_drop_threshold_at_100_passes ... ok [INFO] [stdout] test config::tests::test_load_valid_yaml ... ok [INFO] [stdout] test baseline::tests::test_compute_diff_mixed ... ok [INFO] [stdout] test config::tests::test_validate_drop_threshold_over_100_fails ... ok [INFO] [stdout] test config::tests::test_validate_warn_threshold_over_100_fails ... ok [INFO] [stdout] test config::tests::test_validate_warn_threshold_at_100_passes ... ok [INFO] [stdout] test drop_detector::tests::test_base_score_80_via_override ... ok [INFO] [stdout] test drop_detector::tests::test_drop_detected_any_decrease ... ok [INFO] [stdout] test config::tests::test_p1_fields_absent_from_yaml_use_defaults ... ok [INFO] [stdout] test config::tests::test_validate_invalid_threshold ... ok [INFO] [stdout] test drop_detector::tests::test_drop_result_compared_constructor ... ok [INFO] [stdout] test drop_detector::tests::test_drop_result_skipped_constructor ... ok [INFO] [stdout] test drop_detector::tests::test_drop_threshold_exceeded ... ok [INFO] [stdout] test drop_detector::tests::test_drop_threshold_grace_margin ... ok [INFO] [stdout] test config::tests::test_p1_fields_parse_from_yaml ... ok [INFO] [stdout] test config::tests::test_validate_invalid_yaml ... ok [INFO] [stdout] test drop_detector::tests::test_empty_base_ref_skips ... ok [INFO] [stdout] test drop_detector::tests::test_no_drop_equal_scores ... ok [INFO] [stdout] test drop_detector::tests::test_no_drop_score_improved ... ok [INFO] [stdout] test drop_detector::tests::test_malformed_value_skips_via_skip_constructor ... ok [INFO] [stdout] test drop_detector::tests::test_out_of_range_override_skips ... ok [INFO] [stdout] test config::tests::test_validate_config_summary ... ok [INFO] [stdout] test config::tests::test_validate_no_config ... ok [INFO] [stdout] test config::tests::test_validate_valid_config ... ok [INFO] [stdout] test baseline::tests::test_save_and_load_roundtrip ... ok [INFO] [stdout] test baseline::tests::test_compute_diff_new_issues ... ok [INFO] [stdout] test baseline::tests::test_save_overwrites_previous_baseline ... ok [INFO] [stdout] test drop_detector::tests::test_missing_env_var_skips ... ok [INFO] [stdout] test fix::tests::test_apply_fix_delete_lines ... ok [INFO] [stdout] test fix::tests::test_fix_create_file_dry_run ... ok [INFO] [stdout] test fix::tests::test_dry_run_does_not_modify_files ... ok [INFO] [stdout] test fix::tests::test_fix_create_file ... ok [INFO] [stdout] test config::tests::test_validate_unknown_keys ... ok [INFO] [stdout] test fix::tests::test_fix_create_file_in_subdirectory ... ok [INFO] [stdout] test fix::tests::test_apply_fix_create_file ... ok [INFO] [stdout] test fix::tests::test_apply_multiple_fixes_same_file ... ok [INFO] [stdout] test fix::tests::test_fix_out_of_range_line ... ok [INFO] [stdout] test fix::tests::test_fix_append_to_file ... ok [INFO] [stdout] test fix::tests::test_fix_create_file_already_exists ... ok [INFO] [stdout] test fix::tests::test_apply_fix_append_to_file ... ok [INFO] [stdout] test fix::tests::test_apply_fix_replace_lines ... ok [INFO] [stdout] test fix::tests::test_apply_fix_insert_after_line ... ok [INFO] [stdout] test fix::tests::test_fix_report_counts ... ok [INFO] [stdout] test fix::tests::test_fix_result_helpers ... ok [INFO] [stdout] test baseline::tests::test_save_builds_history_across_runs ... ok [INFO] [stdout] test fix::tests::test_fix_serialization_roundtrip ... ok [INFO] [stdout] test fix::tests::test_preview_fix_append ... ok [INFO] [stdout] test fix::tests::test_preview_fix_create ... ok [INFO] [stdout] test fix::tests::test_preview_fix_delete ... ok [INFO] [stdout] test fix::tests::test_preview_fix_insert ... ok [INFO] [stdout] test fix::tests::test_fix_insert_after_line ... ok [INFO] [stdout] test fix::tests::test_preview_fix_replace ... ok [INFO] [stdout] test fix::tests::test_fix_delete_lines ... ok [INFO] [stdout] test gate::matrix_tests::test_boundary_inclusive_at_threshold ... ok [INFO] [stdout] test gate::matrix_tests::test_boundary_warn_just_below_warn_threshold ... ok [INFO] [stdout] test fix::tests::test_fix_insert_at_line_zero_prepends ... ok [INFO] [stdout] test fix::tests::test_fix_replace_lines ... ok [INFO] [stdout] test gate::matrix_tests::test_boundary_warn_threshold_inclusive ... ok [INFO] [stdout] test gate::matrix_tests::test_drop_result_skipped_suppresses_fail ... ok [INFO] [stdout] test gate::matrix_tests::test_drop_result_small_delta_still_triggers ... ok [INFO] [stdout] test gate::matrix_tests::test_fail_on_drop_no_base_ref_skipped ... ok [INFO] [stdout] test gate::matrix_tests::test_gate_status_as_str_v2 ... ok [INFO] [stdout] test gate::matrix_tests::test_gate_status_exit_codes ... ok [INFO] [stdout] test gate::matrix_tests::test_matrix_row_1_pass_above_both_thresholds ... ok [INFO] [stdout] test gate::matrix_tests::test_matrix_row_3_warn_threshold_soft_gate_v2 ... ok [INFO] [stdout] test gate::matrix_tests::test_matrix_row_4_fail_drop_in_warn_zone ... ok [INFO] [stdout] test gate::matrix_tests::test_matrix_row_2_fail_drop_above_thresholds ... ok [INFO] [stdout] test gate::matrix_tests::test_matrix_row_5_fail_hard_gate ... ok [INFO] [stdout] test gate::matrix_tests::test_matrix_row_6_fail_drop_and_threshold ... ok [INFO] [stdout] test gate::matrix_tests::test_matrix_row_7_fail_no_warn_threshold_configured ... ok [INFO] [stdout] test gate::matrix_tests::test_matrix_row_8_pass_no_thresholds ... ok [INFO] [stdout] test gate::matrix_tests::test_no_thresholds_only_drop_fires ... ok [INFO] [stdout] test gate::matrix_tests::test_score_zero_no_gates ... ok [INFO] [stdout] test gate::tests::test_fail_on_drop_disabled_ignores_drop ... ok [INFO] [stdout] test gate::tests::test_fail_on_drop_skipped_gracefully ... ok [INFO] [stdout] test gate::matrix_tests::test_warn_threshold_equal_threshold_hard_gate_wins ... ok [INFO] [stdout] test gate::tests::test_matrix_row_3_warn_threshold_soft_gate ... ok [INFO] [stdout] test gate::tests::test_matrix_row_4_warn_and_drop_fail_drop_wins ... ok [INFO] [stdout] test gate::tests::test_matrix_row_5_hard_gate_fires_no_drop ... ok [INFO] [stdout] test gate::tests::test_exit_code_failures_are_one ... ok [INFO] [stdout] test gate::tests::test_matrix_row_1_all_pass ... ok [INFO] [stdout] test gate::tests::test_matrix_row_7_below_both_thresholds_no_drop ... ok [INFO] [stdout] test gate::matrix_tests::test_warn_threshold_higher_than_threshold_allowed ... ok [INFO] [stdout] test gate::tests::test_matrix_row_8_below_both_thresholds_drop_fires ... ok [INFO] [stdout] test gate::tests::test_matrix_row_2_drop_fires_above_both_thresholds ... ok [INFO] [stdout] test gate::tests::test_exit_code_pass_and_warn_are_zero ... ok [INFO] [stdout] test gate::tests::test_score_exactly_at_threshold_passes ... ok [INFO] [stdout] test gate::tests::test_score_exactly_at_warn_threshold_no_warn ... ok [INFO] [stdout] test help::tests::test_rule_help_stale ... ok [INFO] [stdout] test help::tests::test_rule_help_all_rules_have_content ... ok [INFO] [stdout] test hook_manager::tests::test_find_git_root_direct ... ok [INFO] [stdout] test gate::tests::test_matrix_row_6_hard_gate_and_drop ... ok [INFO] [stdout] test hook_manager::tests::test_find_git_root_parent_walk ... ok [INFO] [stdout] test gate::tests::test_gate_status_as_str ... ok [INFO] [stdout] test help::tests::test_custom_rule_help ... ok [INFO] [stdout] test help::tests::test_rule_help_config_example_valid_yaml ... ok [INFO] [stdout] test hook_manager::tests::test_find_git_root_not_found ... ok [INFO] [stdout] test hook_manager::tests::test_remove_hook_missing_file ... ok [INFO] [stdout] test hook_manager::tests::test_install_hook_sets_executable ... ok [INFO] [stdout] test hook_manager::tests::test_install_hook_creates_file ... ok [INFO] [stdout] test gate::tests::test_no_thresholds_always_pass ... ok [INFO] [stdout] test help::tests::test_format_rule_help_contains_sections ... ok [INFO] [stdout] test gate::tests::test_warn_threshold_equals_threshold_hard_gate_wins ... ok [INFO] [stdout] test help::tests::test_list_all_rules_count ... ok [INFO] [stdout] test hook_manager::tests::test_remove_hook_refuses_non_kardo_gate ... ok [INFO] [stdout] test hook_manager::tests::test_install_hook_warns_on_existing_non_kardo_gate ... ok [INFO] [stdout] test hook_manager::tests::test_install_hook_overwrites_kardo_gate_hook ... ok [INFO] [stdout] test html_reporter::tests::test_html_contains_issues_table ... ok [INFO] [stdout] test html_reporter::tests::test_html_contains_score ... ok [INFO] [stdout] test html_reporter::tests::test_html_contains_status_color ... ok [INFO] [stdout] test html_reporter::tests::test_html_dark_mode_media_query ... ok [INFO] [stdout] test html_reporter::tests::test_html_escape_xss ... ok [INFO] [stdout] test html_reporter::tests::test_html_footer_has_version_and_link ... ok [INFO] [stdout] test html_reporter::tests::test_html_no_issues_shows_clean ... ok [INFO] [stdout] test html_reporter::tests::test_html_self_contained ... ok [INFO] [stdout] test html_reporter::tests::test_html_sparkline_svg ... ok [INFO] [stdout] test html_reporter::tests::test_html_valid_structure ... ok [INFO] [stdout] test human_reporter::tests::test_compute_rule_gains_sorted_by_pts_desc ... ok [INFO] [stdout] test human_reporter::tests::test_duration_formatting_ms ... ok [INFO] [stdout] test human_reporter::tests::test_hook_mode_delta_shown ... ok [INFO] [stdout] test human_reporter::tests::test_hook_mode_red_output ... ok [INFO] [stdout] test human_reporter::tests::test_hook_mode_sparkline_shown_with_history ... ok [INFO] [stdout] test human_reporter::tests::test_hook_mode_yellow_output ... ok [INFO] [stdout] test human_reporter::tests::test_penalty_weight_values ... ok [INFO] [stdout] test human_reporter::tests::test_print_human_report_base_env_var_source ... ok [INFO] [stdout] test human_reporter::tests::test_print_human_report_improvement_banner ... ok [INFO] [stdout] test human_reporter::tests::test_print_roadmap_no_panic_score_above_target ... ok [INFO] [stdout] test human_reporter::tests::test_compute_rule_gains_caps_at_budget ... ok [INFO] [stdout] test hook_manager::tests::test_remove_hook_removes_kardo_gate_hook ... ok [INFO] [stdout] test human_reporter::tests::test_print_human_report_score_100 ... ok [INFO] [stdout] test human_reporter::tests::test_print_human_report_first_run_tip_shown ... ok [INFO] [stdout] test html_reporter::tests::test_html_top_actions ... ok [INFO] [stdout] test human_reporter::tests::test_print_human_report_no_panic_with_issues ... ok [INFO] [stdout] test human_reporter::tests::test_compute_rule_gains_empty_report ... ok [INFO] [stdout] test human_reporter::tests::test_print_human_report_no_panic_empty ... ok [INFO] [stdout] test human_reporter::tests::test_compute_rule_gains_links_cap_at_20 ... ok [INFO] [stdout] test human_reporter::tests::test_duration_formatting_seconds ... ok [INFO] [stdout] test human_reporter::tests::test_hook_mode_green_output ... ok [INFO] [stdout] test human_reporter::tests::test_print_roadmap_no_panic_score_below_target ... ok [INFO] [stdout] test human_reporter::tests::test_roadmap_empty_report_no_steps ... ok [INFO] [stdout] test human_reporter::tests::test_roadmap_no_steps_at_exactly_76 ... ok [INFO] [stdout] test human_reporter::tests::test_roadmap_partial_when_total_gain_less_than_gap ... ok [INFO] [stdout] test human_reporter::tests::test_roadmap_no_steps_when_already_at_target ... ok [INFO] [stdout] test human_reporter::tests::test_roadmap_steps_returned_when_below_target ... ok [INFO] [stdout] test human_reporter::tests::test_roadmap_steps_sum_closes_gap ... ok [INFO] [stdout] test human_reporter::tests::test_truncate_empty_string ... ok [INFO] [stdout] test human_reporter::tests::test_truncate_exact_length ... ok [INFO] [stdout] test human_reporter::tests::test_truncate_long_string ... ok [INFO] [stdout] test human_reporter::tests::test_truncate_short_string ... ok [INFO] [stdout] test human_reporter::tests::test_print_roadmap_output_for_low_score ... ok [INFO] [stdout] test human_reporter::tests::test_roadmap_steps_ordered_by_pts_desc ... ok [INFO] [stdout] test onboarding::tests::test_detect_generic_project ... ok [INFO] [stdout] test onboarding::tests::test_detect_go_project ... ok [INFO] [stdout] test onboarding::tests::test_detect_ai_assisted_takes_priority ... ok [INFO] [stdout] test onboarding::tests::test_detect_ai_assisted_project ... ok [INFO] [stdout] test onboarding::tests::test_detect_node_project ... ok [INFO] [stdout] test onboarding::tests::test_detect_python_project ... ok [INFO] [stdout] test onboarding::tests::test_detect_rust_project ... ok [INFO] [stdout] test human_reporter::tests::test_severity_rank_ordering ... ok [INFO] [stdout] test reporter::tests::test_compute_trend_unknown_single_entry ... ok [INFO] [stdout] test reporter::tests::test_enrich_populates_fields ... ok [INFO] [stdout] test reporter::tests::test_compute_trend_improving ... ok [INFO] [stdout] test reporter::tests::test_json_enriched_fields_present ... ok [INFO] [stdout] test reporter::tests::test_compute_trend_uses_last_five_entries ... ok [INFO] [stdout] test onboarding::tests::test_generate_config_per_type_differences ... ok [INFO] [stdout] test reporter::tests::test_json_output_format ... ok [INFO] [stdout] test reporter::tests::test_json_rules_summary_counts ... ok [INFO] [stdout] test reporter::tests::test_json_version_matches_cargo ... ok [INFO] [stdout] test reporter::tests::test_compute_trend_declining ... ok [INFO] [stdout] test onboarding::tests::test_welcome_message_contains_project_type ... ok [INFO] [stdout] test reporter::tests::test_compute_trend_stable ... ok [INFO] [stdout] test reporter::tests::test_json_rules_summary_custom ... ok [INFO] [stdout] test reporter::tests::test_score_no_issues ... ok [INFO] [stdout] test reporter::tests::test_score_some_issues ... ok [INFO] [stdout] test reporter::tests::test_should_fail_warning_mode_always_passes ... ok [INFO] [stdout] test onboarding::tests::test_generate_config_parses_as_kardo_gate_config ... ok [INFO] [stdout] test reporter::tests::test_top_actions_empty_no_issues ... ok [INFO] [stdout] test reporter::tests::test_score_caps_broken_links_at_20 ... ok [INFO] [stdout] test reporter::tests::test_score_caps_missing_at_30 ... ok [INFO] [stdout] test reporter::tests::test_status_thresholds ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_score_caps_stale_at_30 ... ok [INFO] [stdout] test reporter::tests::test_score_caps_stale_at_30 ... ok [INFO] [stdout] test reporter::tests::test_score_never_below_zero ... ok [INFO] [stdout] test reporter::tests::test_should_fail_strict_mode ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_score_caps_missing_at_30 ... ok [INFO] [stdout] test reporter::tests::test_top_actions_max_three ... ok [INFO] [stdout] test reporter::tests::test_top_actions_ordering ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_score_caps_broken_links_at_20 ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_json_output_format ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_score_never_below_zero ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_score_no_issues ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_score_some_issues ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_should_fail_strict_mode ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_status_thresholds ... ok [INFO] [stdout] test reporter_test::reporter_tests::test_warning_mode_never_fails ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_all_issues_have_correct_rule_id ... ok [INFO] [stdout] test onboarding::tests::test_generate_config_valid_yaml ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_claude_md_good_quality_no_issues ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_cursorrules_checked ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_claude_md_too_short ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_claude_md_no_code_blocks ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_agents_md_checked ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_claude_md_no_directory_paths ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_config_disabled_no_issues ... ok [INFO] [stdout] test rules::changelog_format::tests::test_changelog_heading_case_variants ... ok [INFO] [stdout] test rules::changelog_format::tests::test_is_valid_version_heading ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_copilot_md_checked ... ok [INFO] [stdout] test rules::changelog_format::tests::test_config_disabled_no_issues ... ok [INFO] [stdout] test rules::changelog_format::tests::test_missing_changelog_heading ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_no_ai_files_no_issues ... ok [INFO] [stdout] test rules::changelog_format::tests::test_invalid_version_format ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_custom_min_lines ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_multiple_quality_issues_per_file ... ok [INFO] [stdout] test rules::changelog_format::tests::test_version_with_prerelease_tag ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_code_block_lang_generates_fix ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_find_untagged_code_blocks_unit ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_guess_language_heuristics ... ok [INFO] [stdout] test rules::changelog_format::tests::test_unknown_change_category ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_inline_code_not_flagged ... ok [INFO] [stdout] test rules::changelog_format::tests::test_line_numbers_reported ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_config_disabled_no_issues ... ok [INFO] [stdout] test rules::changelog_format::tests::test_empty_version_section ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_mixed_tagged_and_untagged ... ok [INFO] [stdout] test rules::consistency::tests::test_consistency_agents_md_broken_ref ... ok [INFO] [stdout] test baseline::tests::test_save_trims_history_to_limit ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_stale_tool_reference ... ok [INFO] [stdout] test rules::consistency::tests::test_consistency_finds_broken_ref ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_line_number_correct ... ok [INFO] [stdout] test rules::consistency::tests::test_extract_deduplicates ... ok [INFO] [stdout] test rules::changelog_format::tests::test_no_changelog_file_no_issues ... ok [INFO] [stdout] test rules::consistency::tests::test_extract_no_slash_skipped ... ok [INFO] [stdout] test rules::consistency::tests::test_extract_path_references_finds_paths ... ok [INFO] [stdout] test rules::consistency::tests::test_extract_ignores_commands ... ok [INFO] [stdout] test rules::consistency::tests::test_extract_ignores_urls ... ok [INFO] [stdout] test rules::consistency::tests::test_extract_skips_cli_commands ... ok [INFO] [stdout] test rules::consistency::tests::test_extract_skips_glob_patterns ... ok [INFO] [stdout] test rules::consistency::tests::test_extract_keeps_real_paths ... ok [INFO] [stdout] test rules::ai_context_quality::tests::test_copilot_instructions_checked ... ok [INFO] [stdout] test rules::consistency::tests::test_extract_skips_shell_variables ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_ignored_files_skipped ... ok [INFO] [stdout] test rules::custom::tests::test_build_regex_empty_returns_none ... ok [INFO] [stdout] test rules::custom::tests::test_compiled_pattern_literal ... ok [INFO] [stdout] test rules::custom::tests::test_compiled_pattern_alternation ... ok [INFO] [stdout] test rules::custom::tests::test_content_match_alternation ... ok [INFO] [stdout] test rules::custom::tests::test_content_match_missing_pattern_skipped ... ok [INFO] [stdout] test rules::custom::tests::test_content_match_found ... ok [INFO] [stdout] test rules::custom::tests::test_custom_rule_severity_mapping ... ok [INFO] [stdout] test rules::custom::tests::test_content_match_max_matches ... ok [INFO] [stdout] test rules::custom::tests::test_custom_rules_scoring ... ok [INFO] [stdout] test rules::custom::tests::test_content_match_no_match ... ok [INFO] [stdout] test rules::custom::tests::test_custom_rules_scoring_cap ... ok [INFO] [stdout] test rules::custom::tests::test_empty_custom_rules ... ok [INFO] [stdout] test rules::custom::tests::test_extract_extension_filter_md ... ok [INFO] [stdout] test rules::changelog_format::tests::test_valid_changelog_no_issues ... ok [INFO] [stdout] test rules::custom::tests::test_extract_extension_filter_rst ... ok [INFO] [stdout] test rules::changelog_format::tests::test_unreleased_section_accepted ... ok [INFO] [stdout] test rules::custom::tests::test_extract_extension_filter_wildcard ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_code_block_without_language_produces_issue ... ok [INFO] [stdout] test rules::consistency::tests::test_consistency_no_claude_md ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_multiple_untagged_blocks ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_code_block_with_language_no_issue ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_empty_code_block_not_flagged ... ok [INFO] [stdout] test rules::custom::tests::test_content_match_missing_glob_skipped ... ok [INFO] [stdout] test rules::custom::tests::test_min_length_missing_file ... ok [INFO] [stdout] test rules::custom::tests::test_min_length_pass ... ok [INFO] [stdout] test rules::custom::tests::test_min_length_missing_min_lines_skipped ... ok [INFO] [stdout] test rules::code_block_lang::tests::test_min_lines_filter ... ok [INFO] [stdout] test rules::consistency::tests::test_consistency_all_refs_valid ... ok [INFO] [stdout] test rules::custom::tests::test_file_exists_fail ... ok [INFO] [stdout] test rules::custom::tests::test_file_exists_pass ... ok [INFO] [stdout] test rules::custom::tests::test_invalid_check_type_fields_skipped_gracefully ... ok [INFO] [stdout] test rules::custom::tests::test_min_length_fail ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_below_threshold_no_issue ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_config_disabled_no_issues ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_different_content_no_issue ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_extract_content_lines_excludes_headings ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_jaccard_similarity_empty ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_jaccard_similarity_identical ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_jaccard_similarity_disjoint ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_identical_files_flagged ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_near_duplicate_above_threshold ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_min_lines_custom_value ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_ignores_headings_in_comparison ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_allow_multiple_h1 ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_no_duplicates_clean ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_multiple_skips_multiple_issues ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_config_disabled_no_issues ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_no_headings_no_issues ... ok [INFO] [stdout] test rules::duplicate_content::tests::test_small_files_skipped ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_empty_file ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_extract_headings_levels ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_h2_start_no_skip ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_multiple_h1_warning ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_ignored_files_skipped ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_skip_h1_to_h3 ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_mdx_files_scanned ... ok [INFO] [stdout] test rules::links::tests::test_broken_relative_link ... ok [INFO] [stdout] test rules::links::tests::test_extract_relative_links_unit ... ok [INFO] [stdout] test rules::links::tests::test_external_links_skipped ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_valid_hierarchy ... ok [INFO] [stdout] test rules::links::tests::test_anchor_link_same_file ... ok [INFO] [stdout] test rules::links::tests::test_absolute_path_checked_when_configured ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_skip_h2_to_h4 ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_line_numbers_correct ... ok [INFO] [stdout] test rules::links::tests::test_absolute_path_skipped_by_default ... ok [INFO] [stdout] test rules::heading_hierarchy::tests::test_going_up_is_valid ... ok [INFO] [stdout] test rules::links::tests::test_is_anchor_link_classification ... ok [INFO] [stdout] test rules::links::tests::test_is_external_link_classification ... ok [INFO] [stdout] test rules::links::tests::test_is_within_repo_boundary_check ... ok [INFO] [stdout] test rules::links::tests::test_multiple_broken_links_produce_multiple_issues ... ok [INFO] [stdout] test rules::links::tests::test_link_with_fragment_to_existing_file ... ok [INFO] [stdout] test rules::links::tests::test_nested_dir_links_resolve_correctly ... ok [INFO] [stdout] test rules::links::tests::test_path_traversal_outside_repo_treated_as_broken ... ok [INFO] [stdout] test rules::links::tests::test_protocol_relative_links_skipped ... ok [INFO] [stdout] test rules::links::tests::test_valid_relative_link ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_anchor_link_same_file ... ok [INFO] [stdout] test html_reporter::tests::test_sparkline_empty_produces_no_svg ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_empty_markdown_file_no_issues ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_extract_relative_links_basic ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_extract_strips_fragment ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_is_anchor_link_classifications ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_external_links_skipped ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_is_external_link_classifications ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_markdown_with_prose_but_no_links ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_link_with_fragment_to_existing_file ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_relative_link_resolves_from_source_file_directory ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_valid_relative_link ... ok [INFO] [stdout] test rules::missing::tests::test_docs_dir_existing_no_issue ... ok [INFO] [stdout] test rules::missing::tests::test_docs_dir_missing_produces_issue ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_multiple_broken_links_separate_issues ... ok [INFO] [stdout] test rules::missing::tests::test_custom_required_file_flagged_when_missing ... ok [INFO] [stdout] test rules::missing::tests::test_existing_readme_no_issue ... ok [INFO] [stdout] test rules::missing::tests::test_missing_docs_generates_fix ... ok [INFO] [stdout] test rules::missing::tests::test_missing_readme_produces_high_severity_issue ... ok [INFO] [stdout] test rules::missing::tests::test_parse_severity_known_values ... ok [INFO] [stdout] test rules::missing::tests::test_parse_severity_unknown_defaults_to_medium ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_docs_dir_missing ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_docs_dir_present ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_missing_file_no_readme_has_no_annotation ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_missing_readme_annotates_readme_when_exists ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_readme_missing ... ok [INFO] [stdout] test rules::missing::tests::test_ignored_required_file_not_flagged ... ok [INFO] [stdout] test rules::links_test::links_rule_tests::test_broken_relative_link ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_missing_readme_itself_uses_readme_as_anchor ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_severity_mapping_from_config ... ok [INFO] [stdout] test rules::sections::tests::test_extract_headings ... ok [INFO] [stdout] test rules::sections::tests::test_case_insensitive_matching ... ok [INFO] [stdout] test rules::sections::tests::test_empty_required_sections ... ok [INFO] [stdout] test rules::missing::tests::test_readme_rst_accepted_as_readme_variant ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_ignored_required_file_skipped ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_custom_required_file ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_multiple_missing_files ... ok [INFO] [stdout] test rules::sections::tests::test_default_config_no_checks ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_readme_present ... ok [INFO] [stdout] test rules::stale::tests::test_is_ignored_double_star_matches_nested_node_modules ... ok [INFO] [stdout] test rules::sections::tests::test_file_not_found ... ok [INFO] [stdout] test rules::stale::tests::test_is_ignored_exact_match ... ok [INFO] [stdout] test rules::sections::tests::test_all_sections_present ... ok [INFO] [stdout] test rules::stale::tests::test_is_ignored_no_match ... ok [INFO] [stdout] test rules::missing_test::missing_rule_tests::test_readme_rst_variant_accepted ... ok [INFO] [stdout] test rules::stale::tests::test_is_ignored_prefix_match ... ok [INFO] [stdout] test rules::sections::tests::test_missing_section ... ok [INFO] [stdout] test rules::stale::tests::test_is_path_within_repo_boundary_check ... ok [INFO] [stdout] test rules::stale::tests::test_is_ignored_suffix_match ... ok [INFO] [stdout] test rules::stale::tests::test_match_ignore_pattern_double_star_variants ... ok [INFO] [stdout] test rules::stale::tests::test_staleness_severity_thresholds ... ok [INFO] [stdout] test rules::stale_test::stale_rule_tests::test_issue_new_has_no_line_number_by_default ... ok [INFO] [stdout] test rules::stale_test::stale_rule_tests::test_issue_new_with_line_preserves_line_number ... ok [INFO] [stdout] test rules::stale_test::stale_rule_tests::test_severity_penalty_weight_ordering ... ok [INFO] [stdout] test rules::stale_test::stale_rule_tests::test_stale_file_issue_severity_logic ... ok [INFO] [stdout] test rules::tests::test_rule_id_strings ... ok [INFO] [stdout] test rules::stale_test::stale_rule_tests::test_stale_issue_has_line_number_one ... ok [INFO] [stdout] test rules::tests::test_issue_construction ... ok [INFO] [stdout] test rules::tests::test_severity_penalty_weights_are_ordered ... ok [INFO] [stdout] test rules::tests::test_rule_id_display_custom ... ok [INFO] [stdout] test sarif::tests::test_sarif_blocking_level_is_error ... ok [INFO] [stdout] test sarif::tests::test_sarif_driver_name ... ok [INFO] [stdout] test sarif::tests::test_sarif_empty_issues ... ok [INFO] [stdout] test sarif::tests::test_sarif_broken_links_maps_to_dg003 ... ok [INFO] [stdout] test sarif::tests::test_sarif_medium_level_is_warning ... ok [INFO] [stdout] test sarif::tests::test_sarif_no_file_path_uses_dot ... ok [INFO] [stdout] test sarif::tests::test_sarif_low_level_is_note ... ok [INFO] [stdout] test sarif::tests::test_sarif_line_number_in_region ... ok [INFO] [stdout] test sarif::tests::test_sarif_file_path_in_location ... ok [INFO] [stdout] test sarif::tests::test_sarif_message_combines_title_and_suggestion ... ok [INFO] [stdout] test sarif::tests::test_sarif_missing_maps_to_dg002 ... ok [INFO] [stdout] test sarif::tests::test_sarif_line_number_defaults_to_1 ... ok [INFO] [stdout] test sarif::tests::test_sarif_stale_maps_to_dg001 ... ok [INFO] [stdout] test rules::stale_test::stale_rule_tests::test_fresh_file_no_issue ... ok [INFO] [stdout] test rules::stale_test::stale_rule_tests::test_check_non_git_repo_does_not_panic ... ok [INFO] [stdout] test rules::stale_test::stale_rule_tests::test_gitignored_file_skipped ... ok [INFO] [stdout] test rules::stale::tests::test_check_non_git_repo_returns_empty ... ok [INFO] [stdout] test rules::stale_test::stale_rule_tests::test_custom_threshold ... ok [INFO] [stdout] test sarif::tests::test_sarif_rule_ids ... ok [INFO] [stdout] test tui_reporter::tests::test_history_display_sparkline_only ... ok [INFO] [stdout] test tui_reporter::tests::test_history_display_with_negative_delta ... ok [INFO] [stdout] test tui_reporter::tests::test_history_display_with_positive_delta ... ok [INFO] [stdout] test sarif::tests::test_sarif_version_field ... ok [INFO] [stdout] test sarif::tests::test_sarif_runs_length ... ok [INFO] [stdout] test sarif::tests::test_sarif_schema_field ... ok [INFO] [stdout] test sarif::tests::test_sarif_rules_count ... ok [INFO] [stdout] test tui_reporter::tests::test_score_gauge_color_green ... ok [INFO] [stdout] test tui_reporter::tests::test_score_gauge_color_red ... ok [INFO] [stdout] test tui_reporter::tests::test_rules_summary_rows_reflect_counts ... ok [INFO] [stdout] test tui_reporter::tests::test_score_gauge_color_yellow ... ok [INFO] [stdout] test tui_reporter::tests::test_score_label_format ... ok [INFO] [stdout] test tui_reporter::tests::test_score_ratio_fifty ... ok [INFO] [stdout] test sarif::tests::test_sarif_valid_json ... ok [INFO] [stdout] test tui_reporter::tests::test_score_ratio_hundred ... ok [INFO] [stdout] test tui_reporter::tests::test_score_ratio_zero ... ok [INFO] [stdout] test tui_reporter::tests::test_top_actions_formatting ... ok [INFO] [stdout] test tui_reporter::tests::test_top_actions_formatting_single_pt ... ok [INFO] [stdout] test tui_reporter::tests::test_trend_display_red_low_score_no_estimate ... ok [INFO] [stdout] test tui_reporter::tests::test_trend_display_yellow_with_estimate ... ok [INFO] [stdout] test tui_reporter::tests::test_tui_feature_flag_conditional_compilation ... ok [INFO] [stdout] test tui_reporter::tests::test_tui_skipped_when_not_terminal ... ok [INFO] [stdout] test upload::tests::parse_slug_https ... ok [INFO] [stdout] test upload::tests::component_score_small_budget ... ok [INFO] [stdout] test upload::tests::grade_mapping ... ok [INFO] [stdout] test upload::tests::map_components_all_zero ... ok [INFO] [stdout] test upload::tests::map_components_with_issues ... ok [INFO] [stdout] test upload::tests::component_score_one_issue ... ok [INFO] [stdout] test upload::tests::component_score_capped_at_budget ... ok [INFO] [stdout] test upload::tests::component_score_zero_issues ... ok [INFO] [stdout] test tui_reporter::tests::test_trend_display_green_no_estimate ... ok [INFO] [stdout] test upload::tests::parse_slug_https_no_git ... ok [INFO] [stdout] test tui_reporter::tests::test_history_display_no_history ... ok [INFO] [stdout] test tui_reporter::tests::test_rules_summary_row_count ... ok [INFO] [stdout] test upload::tests::parse_slug_invalid ... ok [INFO] [stdout] test sarif::tests::test_sarif_uribaseid_is_srcroot ... ok [INFO] [stdout] test upload::tests::parse_slug_ssh ... ok [INFO] [stdout] test tui_reporter::tests::test_history_display_with_zero_delta ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 472 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.30s [INFO] [stdout] [INFO] [stderr] Doc-tests kardo_gate [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] running `Command { std: "docker" "inspect" "e68ca57264cc8d703cc76c5db1c0122f2b9226b2feea62d9e6efe6984d82a424", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e68ca57264cc8d703cc76c5db1c0122f2b9226b2feea62d9e6efe6984d82a424", kill_on_drop: false }` [INFO] [stdout] e68ca57264cc8d703cc76c5db1c0122f2b9226b2feea62d9e6efe6984d82a424