[INFO] cloning repository https://github.com/Loop-Suite/Code-Review-Loop [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Loop-Suite/Code-Review-Loop" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLoop-Suite%2FCode-Review-Loop", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLoop-Suite%2FCode-Review-Loop'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] e3d24588d98153afa42784a46003f77502fe4b69 [INFO] testing Loop-Suite/Code-Review-Loop against 1.98.0-beta.8+cargoflags=--release for beta-release-1.99-2 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLoop-Suite%2FCode-Review-Loop" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Loop-Suite/Code-Review-Loop [INFO] finished tweaking git repo https://github.com/Loop-Suite/Code-Review-Loop [INFO] tweaked toml for git repo https://github.com/Loop-Suite/Code-Review-Loop written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Loop-Suite/Code-Review-Loop on toolchain 1.98.0-beta.8 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/Loop-Suite/Code-Review-Loop already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }` [INFO] [stdout] f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0 [INFO] running `Command { std: "docker" "start" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.8" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.107 [INFO] [stderr] Compiling serde_core v1.0.229 [INFO] [stderr] Compiling quote v1.0.47 [INFO] [stderr] Compiling libc v0.2.189 [INFO] [stderr] Compiling httparse v1.10.1 [INFO] [stderr] Compiling cc v1.4.0 [INFO] [stderr] Compiling rustls-pki-types v1.15.1 [INFO] [stderr] Compiling rustls v0.23.42 [INFO] [stderr] Compiling serde v1.0.229 [INFO] [stderr] Compiling bytes v1.12.1 [INFO] [stderr] Compiling serde_json v1.0.151 [INFO] [stderr] Compiling memchr v2.8.3 [INFO] [stderr] Compiling winnow v1.0.4 [INFO] [stderr] Compiling once_cell v1.21.4 [INFO] [stderr] Compiling anyhow v1.0.104 [INFO] [stderr] Compiling clap_builder v4.6.6 [INFO] [stderr] Compiling toml_writer v1.1.2+spec-1.1.0 [INFO] [stderr] Compiling utf8-zero v0.8.1 [INFO] [stderr] Compiling webpki-roots v1.0.9 [INFO] [stderr] Compiling toml_parser v1.1.3+spec-1.1.0 [INFO] [stderr] Compiling http v1.5.0 [INFO] [stderr] Compiling syn v3.0.3 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling ureq-proto v0.6.0 [INFO] [stderr] Compiling serde_spanned v1.1.1 [INFO] [stderr] Compiling toml_datetime v1.1.1+spec-1.1.0 [INFO] [stderr] Compiling serde_derive v1.0.229 [INFO] [stderr] Compiling clap_derive v4.6.4 [INFO] [stderr] Compiling toml v1.1.4+spec-1.1.0 [INFO] [stderr] Compiling clap v4.6.6 [INFO] [stderr] Compiling rustls-webpki v0.103.13 [INFO] [stderr] Compiling ureq v3.3.0 [INFO] [stderr] Compiling codereview-loop v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `release` profile [optimized] target(s) in 1m 18s [INFO] running `Command { std: "docker" "inspect" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }` [INFO] [stderr] Compiling codereview-loop v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `release` profile [optimized] target(s) in 25.81s [INFO] running `Command { std: "docker" "inspect" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.8" "test" "--frozen" "--release", kill_on_drop: false }` [INFO] [stderr] Finished `release` profile [optimized] target(s) in 0.12s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/release/deps/codereview-2a4892761323fc19) [INFO] [stdout] [INFO] [stdout] running 360 tests [INFO] [stdout] test backend_factory::tests::build_llm_leaves_max_provider_calls_uncapped_by_default ... ok [INFO] [stdout] test backend_factory::tests::build_llm_defaults_max_output_tokens_to_8192 ... ok [INFO] [stdout] test atomic_write::tests::atomic_write_creates_a_new_file_with_the_given_contents ... ok [INFO] [stdout] test backend_factory::tests::build_llm_wires_a_configured_temperature_into_both_models ... ok [INFO] [stdout] test backend_factory::tests::build_llm_leaves_temperature_unset_by_default ... ok [INFO] [stdout] test backend_factory::tests::build_llm_custom_backend_uses_cheap_model_when_given ... ok [INFO] [stdout] test atomic_write::tests::atomic_write_leaves_no_leftover_temp_file_behind ... ok [INFO] [stdout] test backend_factory::tests::is_loopback_host_recognizes_common_local_forms ... ok [INFO] [stdout] test backend_factory::tests::build_llm_wires_max_provider_calls_and_max_output_tokens_into_both_models ... ok [INFO] [stdout] test backend_factory::tests::url_host_extracts_the_host_ignoring_scheme_port_and_path ... ok [INFO] [stdout] test backend_factory::tests::build_llm_refuses_a_custom_backend_with_plain_http_to_a_public_host ... ok [INFO] [stdout] test backend_factory::tests::build_llm_rejects_custom_backend_without_model ... ok [INFO] [stdout] test backend_factory::tests::validate_base_url_scheme_accepts_plain_http_to_a_loopback_host_without_the_flag ... ok [INFO] [stdout] test backend_factory::tests::validate_base_url_scheme_allows_plain_http_to_a_non_loopback_host_with_the_flag ... ok [INFO] [stdout] test backend_factory::tests::build_llm_rejects_custom_backend_without_base_url ... ok [INFO] [stdout] test backend_factory::tests::validate_base_url_scheme_refuses_plain_http_to_a_non_loopback_host_by_default ... ok [INFO] [stdout] test atomic_write::tests::atomic_write_fully_replaces_existing_content_not_just_the_overlapping_prefix ... ok [INFO] [stdout] test backend_factory::tests::validate_base_url_scheme_rejects_a_url_with_neither_http_nor_https_scheme ... ok [INFO] [stdout] test cargo_audit::tests::build_deterministic_result_reports_fail_when_vulnerabilities_are_found ... ok [INFO] [stdout] test cli::tests::fail_on_comment_triggers_on_comment_and_worse ... ok [INFO] [stdout] test cargo_audit::tests::build_deterministic_result_reports_pass_when_no_vulnerabilities_found ... ok [INFO] [stdout] test cli::tests::fail_on_never_does_not_even_check_an_unrecognized_verdict ... ok [INFO] [stdout] test cli::tests::fail_on_never_does_not_trigger_even_on_request_changes ... ok [INFO] [stdout] test cargo_audit::tests::build_deterministic_result_falls_back_to_the_count_when_found_is_missing ... ok [INFO] [stdout] test describe::tests::todo_sections_finds_todo_even_when_content_collides_with_a_file_header ... ok [INFO] [stdout] test describe::tests::todo_sections_keeps_a_leading_plus_that_belongs_to_the_code_itself ... ok [INFO] [stdout] test cli::tests::fail_on_request_changes_only_triggers_on_request_changes_itself ... ok [INFO] [stdout] test cli::tests::fail_on_default_is_never ... ok [INFO] [stdout] test cargo_audit::tests::build_deterministic_result_returns_none_when_the_shape_is_unrecognized ... ok [INFO] [stdout] test deterministic::tests::try_run_bails_without_spawning_when_changed_files_are_required_but_none_exist ... ok [INFO] [stdout] test cli::tests::fail_on_needs_context_does_not_trigger_on_a_mere_comment ... ok [INFO] [stdout] test cli::tests::fail_on_errors_instead_of_silently_passing_an_unrecognized_verdict ... ok [INFO] [stdout] test discourse::schema::tests::discourse_round_survives_resolution_missing_status ... ok [INFO] [stdout] test discourse::prompt::tests::findings_catalog_keeps_full_detail_for_an_unresolved_finding_with_no_prior_verdict ... ok [INFO] [stdout] test discourse::schema::tests::normalize_move_kind_is_case_insensitive ... ok [INFO] [stdout] test discourse::prompt::tests::findings_catalog_keeps_full_detail_for_an_uncertain_finding ... ok [INFO] [stdout] test discourse::schema::tests::normalize_challenge_axis_passes_through_valid_values_case_insensitively ... ok [INFO] [stdout] test discourse::schema::tests::normalize_move_kind_passes_through_valid_values ... ok [INFO] [stdout] test discourse::schema::tests::normalize_confidence_lowercases_case_variants ... ok [INFO] [stdout] test discourse::prompt::tests::build_round_prompt_fences_findings_catalog_so_embedded_backticks_cannot_break_out ... ok [INFO] [stdout] test discourse::schema::tests::normalize_challenge_axis_falls_back_to_severity_on_unknown_or_empty_value ... ok [INFO] [stdout] test discourse::schema::tests::move_deserializes_when_detail_is_missing ... ok [INFO] [stdout] test discourse::schema::tests::normalize_status_passes_through_valid_values ... ok [INFO] [stdout] test discourse::schema::tests::normalize_status_is_case_insensitive ... ok [INFO] [stdout] test discourse::schema::tests::normalize_move_kind_falls_back_to_surface_on_unknown_or_empty_value ... ok [INFO] [stdout] test discourse::schema::tests::surface_id_differs_across_outer_prior_rounds_for_the_same_position ... ok [INFO] [stdout] test discourse::schema::tests::move_deserializes_when_only_kind_is_present ... ok [INFO] [stdout] test discourse::tests::claims_undefined_or_compile_error_matches_the_documented_phrasings ... ok [INFO] [stdout] test discourse::schema::tests::surface_id_differs_across_inner_rounds_and_positions ... ok [INFO] [stdout] test discourse::tests::run_confirms_off_a_same_round_merge_even_when_the_confirm_is_listed_before_the_merge ... ok [INFO] [stdout] test discourse::tests::run_honors_a_spec_configured_vote_threshold_stricter_than_the_default ... ok [INFO] [stdout] test discourse::tests::run_reverts_a_merged_resolution_that_merges_a_finding_into_itself ... ok [INFO] [stdout] test discourse::tests::run_confirms_finding_despite_severity_only_challenge ... ok [INFO] [stdout] test discourse::tests::run_reverts_an_llm_authored_confirmed_whose_claim_needs_whole_file_context ... ok [INFO] [stdout] test discourse::tests::run_confirms_merge_survivor_even_with_zero_direct_votes ... ok [INFO] [stdout] test discourse::prompt::tests::findings_catalog_compacts_a_confirmed_finding_instead_of_resending_its_full_detail ... ok [INFO] [stdout] test discourse::tests::run_confirms_when_both_the_vote_and_evidence_check_out ... ok [INFO] [stdout] test discourse::tests::run_does_not_launder_a_disputed_finding_via_merge ... ok [INFO] [stdout] test discourse::tests::run_does_not_let_a_later_round_overwrite_an_already_confirmed_finding ... ok [INFO] [stdout] test discourse::tests::run_notes_a_severity_dispute_on_a_confirmed_finding_without_changing_its_status ... ok [INFO] [stdout] test discourse::tests::run_reverts_a_merged_resolution_whose_merged_into_does_not_name_a_real_finding ... ok [INFO] [stdout] test discourse::tests::run_reverts_an_llm_authored_confirmed_whose_evidence_is_unverified ... ok [INFO] [stdout] test discourse::votes::tests::direct_vote_net_counts_a_repeated_agree_from_the_same_lens_in_the_same_round_only_once ... ok [INFO] [stdout] test discourse::tests::run_still_lets_existence_challenge_suppress_confirmation ... ok [INFO] [stdout] test discourse::votes::tests::direct_vote_net_counts_an_agree_with_new_evidence ... ok [INFO] [stdout] test discourse::votes::tests::direct_vote_net_counts_the_same_lens_again_in_a_later_round ... ok [INFO] [stdout] test discourse::votes::tests::direct_vote_net_counts_two_different_lenses_in_the_same_round ... ok [INFO] [stdout] test discourse::tests::claims_undefined_or_compile_error_does_not_match_an_ordinary_claim ... ok [INFO] [stdout] test discourse::votes::tests::direct_vote_net_does_not_let_a_leading_noop_move_consume_the_dedup_slot ... ok [INFO] [stdout] test evidence::tests::verify_accepts_a_citation_on_an_added_line ... ok [INFO] [stdout] test discourse::tests::run_reverts_an_llm_authored_confirmed_with_no_backing_vote ... ok [INFO] [stdout] test evidence::tests::verify_does_not_mistake_an_added_line_starting_with_plus_plus_plus_for_a_file_header ... ok [INFO] [stdout] test deterministic::tests::try_run_is_skipped_not_failed_when_the_binary_is_not_on_path ... ok [INFO] [stdout] test evidence::tests::verify_extracts_the_leading_number_from_a_decorated_line_field ... ok [INFO] [stdout] test discourse::votes::tests::merge_vote_weight_counts_only_merges_targeting_this_id ... ok [INFO] [stdout] test discourse::votes::tests::merge_vote_weight_does_not_credit_a_disputed_source ... ok [INFO] [stdout] test discourse::votes::tests::merge_vote_weight_ignores_cycles ... ok [INFO] [stdout] test discourse::votes::tests::merge_vote_weight_still_credits_an_undisputed_source ... ok [INFO] [stdout] test discourse::votes::tests::merge_vote_weight_propagates_through_a_merge_chain ... ok [INFO] [stdout] test discourse::votes::tests::direct_vote_net_ignores_an_agree_with_no_new_evidence ... ok [INFO] [stdout] test evidence::tests::verify_accepts_a_citation_on_a_context_line ... ok [INFO] [stdout] test discourse::votes::tests::direct_vote_net_treats_miscased_challenge_and_confidence_like_canonical_ones ... ok [INFO] [stdout] test evidence::tests::verify_flags_a_file_that_is_not_in_the_diff_at_all ... ok [INFO] [stdout] test evidence::tests::verify_flags_a_line_number_that_does_not_exist_in_the_diff ... ok [INFO] [stdout] test evidence::tests::verify_flags_a_non_numeric_line ... ok [INFO] [stdout] test fixcheck::tests::build_task_fences_this_round_summary_and_mentions_superseded ... ok [INFO] [stdout] test fixcheck::tests::build_task_uses_placeholder_when_this_round_is_empty ... ok [INFO] [stdout] test fixcheck::tests::corroborate_downgrades_fixed_to_unknown_when_the_file_is_not_in_this_rounds_diff ... ok [INFO] [stdout] test fixcheck::tests::corroborate_downgrades_fixed_to_unknown_when_evidence_still_present ... ok [INFO] [stdout] test fixcheck::tests::corroborate_leaves_non_fixed_statuses_untouched ... ok [INFO] [stdout] test fixcheck::tests::fill_missing_as_still_open_synthesizes_entry_for_omitted_finding_id ... ok [INFO] [stdout] test fixcheck::tests::fill_missing_as_still_open_leaves_fully_covered_results_untouched ... ok [INFO] [stdout] test fixcheck::tests::fix_check_output_survives_result_missing_status ... ok [INFO] [stdout] test fixcheck::tests::corroborate_leaves_fixed_alone_when_evidence_is_gone ... ok [INFO] [stdout] test fixcheck::tests::locally_resolvable_returns_none_when_the_file_changed_and_evidence_is_gone ... ok [INFO] [stdout] test fixcheck::tests::locally_resolvable_returns_unknown_when_evidence_is_still_present_verbatim ... ok [INFO] [stdout] test fixcheck::tests::locally_resolvable_returns_unknown_when_the_file_is_not_in_this_rounds_diff ... ok [INFO] [stdout] test evidence::tests::verify_rejects_an_old_side_only_line_number ... ok [INFO] [stdout] test fixcheck::tests::normalize_status_is_case_insensitive ... ok [INFO] [stdout] test fixcheck::tests::verify_supersedes_rejects_unknown_superseded_by ... ok [INFO] [stdout] test fixcheck::tests::normalize_status_falls_back_to_unknown_on_unknown_or_empty_value ... ok [INFO] [stdout] test fixcheck::tests::build_task_fences_list_so_embedded_backticks_cannot_break_out ... ok [INFO] [stdout] test fixcheck::tests::run_never_calls_the_llm_when_every_prior_finding_resolves_locally ... ok [INFO] [stdout] test input::tests::estimate_tokens_rounds_up_to_the_nearest_whole_token ... ok [INFO] [stdout] test fixcheck::tests::verify_supersedes_accepts_valid_same_or_higher_severity_replacement ... ok [INFO] [stdout] test fixcheck::tests::verify_supersedes_rejects_lower_severity_replacement ... ok [INFO] [stdout] test fixcheck::tests::normalize_status_accepts_superseded ... ok [INFO] [stdout] test input::tests::is_noisy_path_flags_generated_and_vendor_paths ... ok [INFO] [stdout] test fixcheck::tests::verify_supersedes_leaves_non_superseded_statuses_untouched ... ok [INFO] [stdout] test fixcheck::tests::corroborate_still_checks_evidence_when_the_file_is_in_this_rounds_diff ... ok [INFO] [stdout] test humanvoice::tests::build_task_fences_findings_text_so_embedded_backticks_cannot_break_out ... ok [INFO] [stdout] test humanvoice::tests::format_good_things_includes_why_not_just_practice ... ok [INFO] [stdout] test input::tests::is_noisy_path_flags_known_lockfiles ... ok [INFO] [stdout] test input::tests::is_noisy_path_leaves_ordinary_source_files_alone ... ok [INFO] [stdout] test input::tests::parse_diff_stats_captures_binary_file_with_no_hunks ... ok [INFO] [stdout] test input::tests::parse_diff_stats_captures_delete_only_files_via_old_path ... ok [INFO] [stdout] test input::tests::parse_diff_stats_captures_new_empty_file_with_no_hunks ... ok [INFO] [stdout] test input::tests::parse_diff_stats_captures_pure_rename_with_no_hunks ... ok [INFO] [stdout] test input::tests::parse_diff_stats_handles_mixed_delete_and_modify ... ok [INFO] [stdout] test input::tests::parse_diff_stats_strips_normal_b_prefix ... ok [INFO] [stdout] test input::tests::parse_diff_stats_does_not_confuse_added_line_content_with_a_file_header ... ok [INFO] [stdout] test input::tests::parse_diff_stats_preserves_real_path_starting_with_b_slash ... ok [INFO] [stdout] test input::tests::split_into_file_blocks_splits_at_each_diff_git_header ... ok [INFO] [stdout] test input::tests::strip_denied_paths_is_a_no_op_when_no_patterns_are_configured ... ok [INFO] [stdout] test input::tests::strip_denied_paths_leaves_a_non_matching_diff_untouched ... ok [INFO] [stdout] test input::tests::strip_denied_paths_matches_a_directory_style_pattern_at_a_real_segment_boundary_only ... ok [INFO] [stdout] test input::tests::strip_denied_paths_removes_a_matching_file_block_and_its_content ... ok [INFO] [stdout] test input::tests::strip_denied_paths_still_succeeds_on_a_no_prefix_diff_when_no_patterns_are_configured ... ok [INFO] [stdout] test input::tests::strip_denied_paths_fails_closed_on_a_no_prefix_diff_when_patterns_are_configured ... ok [INFO] [stdout] test input::tests::truncate_at_hunk_boundary_cuts_before_the_first_hunk_that_no_longer_fully_fits ... ok [INFO] [stdout] test input::tests::truncate_at_hunk_boundary_falls_back_to_byte_cut_when_there_are_no_hunks_at_all ... ok [INFO] [stdout] test input::tests::truncate_at_hunk_boundary_falls_back_to_byte_cut_when_even_the_first_hunk_does_not_fit ... ok [INFO] [stdout] test input::tests::prioritize_and_cap_diff_moves_noisy_files_after_normal_ones_without_dropping_anything ... ok [INFO] [stdout] test lens::tests::finding_id_differs_across_positions_within_a_round ... ok [INFO] [stdout] test lens::tests::finding_line_accepts_json_integer_like_live_every_line_response ... ok [INFO] [stdout] test lens::tests::finding_line_accepts_json_integer_like_live_functionality_response ... ok [INFO] [stdout] test input::tests::prioritize_and_cap_diff_is_a_no_op_on_a_single_file_diff ... ok [INFO] [stdout] test lens::tests::finding_line_defaults_when_absent ... ok [INFO] [stdout] test lens::tests::finding_line_still_accepts_string ... ok [INFO] [stdout] test lens::tests::finding_severity_and_label_default_to_safe_values_when_absent ... ok [INFO] [stdout] test lens::tests::is_degenerate_false_when_findings_are_present_even_without_a_summary ... ok [INFO] [stdout] test input::tests::prioritize_and_cap_diff_preserves_relative_order_within_the_same_priority_group ... ok [INFO] [stdout] test input::tests::estimate_tokens_counts_unicode_scalars_not_bytes ... ok [INFO] [stdout] test lens::tests::is_degenerate_false_when_unverified_is_present ... ok [INFO] [stdout] test backend_factory::tests::validate_base_url_scheme_accepts_https_regardless_of_host ... ok [INFO] [stdout] test lens::tests::is_degenerate_true_for_a_completely_empty_response ... ok [INFO] [stdout] test lens::tests::lens_output_survives_one_finding_missing_a_required_field ... ok [INFO] [stdout] test lens::tests::normalize_severity_falls_back_to_most_severe_on_unknown_value ... ok [INFO] [stdout] test lens::tests::normalize_severity_passes_through_valid_values ... ok [INFO] [stdout] test lens::tests::finding_id_differs_across_rounds_for_the_same_position ... ok [INFO] [stdout] test lens::tests::normalize_severity_trims_and_uppercases ... ok [INFO] [stdout] test lens::tests::select_lenses_caps_count_and_dedupes_even_if_llm_ignores_the_instruction ... ok [INFO] [stdout] test lens::tests::select_lenses_rejects_an_always_lens_id_even_if_the_llm_returns_it ... ok [INFO] [stdout] test llm::tests::backoff_delay_grows_with_attempt_number ... ok [INFO] [stdout] test llm::tests::backoff_delay_growth_is_capped_so_high_retry_counts_stay_bounded ... ok [INFO] [stdout] test llm::tests::build_repair_task_includes_the_prior_response_and_the_validation_error ... ok [INFO] [stdout] test lens::tests::is_degenerate_false_when_summary_is_present_even_with_no_findings ... ok [INFO] [stdout] test llm::tests::calls_is_empty_when_no_log_is_attached ... ok [INFO] [stdout] test llm::tests::calls_recorded_via_a_shared_log_are_attributed_to_the_right_model ... ok [INFO] [stdout] test llm::tests::deadline_aware_sleep_does_not_block_past_a_deadline_that_has_already_passed ... ok [INFO] [stdout] test llm::tests::deadline_passed_is_false_before_the_deadline ... ok [INFO] [stdout] test llm::tests::deadline_passed_is_false_when_no_deadline_is_set ... ok [INFO] [stdout] test llm::tests::deadline_passed_is_true_once_the_deadline_is_behind_now ... ok [INFO] [stdout] test llm::tests::effective_timeout_does_not_shrink_the_base_when_deadline_is_further_away ... ok [INFO] [stdout] test llm::tests::effective_timeout_floors_at_one_second_when_the_deadline_already_passed ... ok [INFO] [stdout] test input::tests::truncate_at_hunk_boundary_is_a_no_op_when_already_within_budget ... ok [INFO] [stdout] test input::tests::prioritize_and_cap_diff_drops_lowest_priority_tail_past_the_hard_cap_and_reports_it ... ok [INFO] [stdout] test llm::tests::call_once_counts_a_failed_attempt_against_max_calls_not_just_successes ... ok [INFO] [stdout] test input::tests::prioritize_and_cap_diff_never_drops_everything_even_if_the_first_block_alone_exceeds_the_cap ... ok [INFO] [stdout] test llm::tests::effective_timeout_returns_base_when_no_deadline_is_set ... ok [INFO] [stdout] test llm::tests::effective_timeout_shrinks_to_the_remaining_deadline_when_it_is_less_than_the_base ... ok [INFO] [stdout] test llm::tests::is_retryable_treats_other_4xx_as_permanent ... ok [INFO] [stdout] test input::tests::prioritize_and_cap_diff_truncates_a_lone_oversized_block_instead_of_returning_it_whole ... ok [INFO] [stdout] test llm::tests::is_retryable_treats_429_and_5xx_as_retryable ... ok [INFO] [stdout] test llm::tests::retry_delay_falls_back_to_backoff_for_a_non_http_error ... ok [INFO] [stdout] test llm::tests::is_retryable_defaults_unclassified_errors_to_retryable ... ok [INFO] [stdout] test llm::tests::json_ctx_typed_recovers_after_one_schema_failure_when_a_retry_is_available ... ok [INFO] [stdout] test llm::tests::is_retryable_treats_call_budget_exceeded_as_permanent ... ok [INFO] [stdout] test llm::tests::retry_delay_falls_back_to_backoff_when_no_retry_after_is_present ... ok [INFO] [stdout] test llm::tests::retry_delay_prefers_an_explicit_retry_after_over_the_generic_backoff ... ok [INFO] [stdout] test llm::tests::text_ctx_is_uncapped_when_max_calls_is_none ... ok [INFO] [stdout] test input::tests::prioritize_and_cap_diff_still_reports_a_drop_when_the_dropped_blocks_path_is_unresolved ... ok [INFO] [stdout] test llm::tests::json_ctx_typed_does_not_spend_a_repair_attempt_when_retries_is_zero ... ok [INFO] [stdout] test llm::tests::text_ctx_records_one_call_with_attempts_1_on_first_try_success ... ok [INFO] [stdout] test llm::tests::with_gate_none_leaves_calls_uncapped_same_as_before_the_field_existed ... ok [INFO] [stdout] test llm::tests::text_ctx_records_a_failed_call_with_success_false ... ok [INFO] [stdout] test llm::tests::text_ctx_refuses_once_max_calls_is_reached_without_touching_the_provider ... ok [INFO] [stdout] test llm::tests::call_once_never_lets_concurrent_callers_exceed_max_calls_even_under_a_race ... ok [INFO] [stdout] test pipeline::par_map_tests::par_map_converts_a_genuine_worker_panic_into_an_err_instead_of_propagating_it ... ok [INFO] [stdout] test pipeline::par_map_tests::par_map_keeps_successful_results_when_one_item_fails ... ok [INFO] [stdout] test manifest::tests::build_and_write_roundtrips_through_json ... ok [INFO] [stdout] test pipeline::par_map_tests::par_map_preserves_all_successes_when_nothing_fails ... ok [INFO] [stdout] test pipeline::par_map_tests::par_map_returns_empty_immediately_for_an_empty_input ... ok [INFO] [stdout] test backend_factory::tests::build_llm_accepts_custom_backend_with_base_url_and_model ... ok [INFO] [stdout] test discourse::schema::tests::normalize_status_falls_back_to_uncertain_on_unknown_or_empty_value ... ok [INFO] [stdout] test llm::tests::calls_log_is_shared_across_clones_via_with_calls_log ... ok [INFO] [stdout] test manifest::tests::hash_file_is_stable_for_the_same_content_and_differs_for_different_content ... ok [INFO] [stdout] test pipeline::review::e2e_tests::lens_specific_llm_returns_none_for_a_lens_with_no_model_field ... ok [INFO] [stdout] test pipeline::review::e2e_tests::lens_specific_llm_returns_an_overridden_clone_when_the_lens_names_a_different_model ... ok [INFO] [stdout] test pipeline::review::e2e_tests::lens_specific_llm_returns_none_when_the_override_matches_the_shared_model ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_does_not_confirm_off_an_llm_stated_resolution_alone ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_flags_a_discourse_surfaced_finding_whose_file_line_does_not_exist_in_the_diff ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_marks_the_report_failed_when_every_selected_lens_errors_out ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_rejects_always_lens_in_manual_lenses_arg ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_skips_discourse_once_deadline_minutes_is_exceeded ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_still_carries_a_prior_confirmed_finding_downgraded_to_unknown ... ok [INFO] [stdout] test pipeline::par_map_tests::par_map_returns_results_in_input_order_regardless_of_completion_order ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_still_carries_a_prior_confirmed_finding_when_fixcheck_itself_fails ... ok [INFO] [stdout] test policy::tests::docs_updated_ignores_a_file_matching_ignored_path_patterns ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_still_carries_a_prior_confirmed_finding_when_the_deadline_is_already_exceeded ... ok [INFO] [stdout] test policy::tests::matches_one_keeps_plain_substring_behavior_for_non_slash_patterns ... ok [INFO] [stdout] test policy::tests::matches_one_rejects_empty_pattern ... ok [INFO] [stdout] test policy::tests::matches_one_rejects_mid_word_substring_for_bare_word_patterns_without_trailing_slash ... ok [INFO] [stdout] test policy::tests::matches_one_rejects_mid_word_substring_for_directory_style_patterns ... ok [INFO] [stdout] test policy::tests::matches_one_accepts_real_directory_segment_for_directory_style_patterns ... ok [INFO] [stdout] test policy::tests::matches_one_still_matches_bare_word_pattern_at_a_real_boundary ... ok [INFO] [stdout] test policy::tests::tests_included_still_fails_on_a_real_behavior_file_with_no_test ... ok [INFO] [stdout] test policy::tests::tests_included_ignores_a_file_matching_ignored_path_patterns ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_does_not_count_a_degenerate_empty_lens_response_as_successful ... ok [INFO] [stdout] test procutil::tests::find_executable_accepts_executable_file ... ok [INFO] [stdout] test procutil::tests::find_executable_rejects_non_executable_file ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_survives_a_discourse_failure_instead_of_aborting_the_whole_run ... ok [INFO] [stdout] test promptctx::tests::fenced_defaults_to_triple_backtick_when_content_has_none ... ok [INFO] [stdout] test promptctx::tests::fenced_fence_exceeds_longest_backtick_run_in_content ... ok [INFO] [stdout] test promptctx::tests::rewrite_context_includes_language_instruction_when_set ... ok [INFO] [stdout] test promptctx::tests::rewrite_context_omits_the_diff_and_changed_files ... ok [INFO] [stdout] test promptctx::tests::selection_context_fences_the_changed_file_list_like_shared_context_does ... ok [INFO] [stdout] test promptctx::tests::selection_context_omits_the_diff_but_keeps_the_changed_file_list ... ok [INFO] [stdout] test promptctx::tests::shared_context_fences_changed_files_like_diff ... ok [INFO] [stdout] test promptctx::tests::shared_context_fences_conventions_and_requirements_like_diff ... ok [INFO] [stdout] test promptctx::tests::shared_context_includes_language_instruction_when_set ... ok [INFO] [stdout] test promptctx::tests::shared_context_omits_language_section_when_unset ... ok [INFO] [stdout] test promptctx::tests::shared_context_untrusted_warning_mentions_changed_files ... ok [INFO] [stdout] test quantify::tests::score_clamps_at_100_even_with_a_scoring_config_that_bypassed_spec_load_validation ... ok [INFO] [stdout] test llm::tests::call_gate_never_lets_more_than_max_permits_be_held_at_once ... ok [INFO] [stdout] test quantify::tests::score_deducts_only_confirmed_findings_by_severity ... ok [INFO] [stdout] test quantify::tests::score_clamps_at_zero_instead_of_going_negative ... ok [INFO] [stdout] test quantify::tests::score_uses_custom_scoring_config_instead_of_the_hardcoded_defaults ... ok [INFO] [stdout] test quantify::tests::summarize_defaults_completeness_to_complete ... ok [INFO] [stdout] test quantify::tests::verdict_a_confirmed_p0_still_wins_over_a_policy_failure_when_both_are_present ... ok [INFO] [stdout] test quantify::tests::verdict_approve_when_nothing_confirmed_and_no_other_signal ... ok [INFO] [stdout] test quantify::tests::verdict_comment_on_confirmed_p1_without_p0 ... ok [INFO] [stdout] test quantify::tests::verdict_comment_on_confirmed_p2_only ... ok [INFO] [stdout] test quantify::tests::verdict_comment_on_policy_failure_alone_with_no_findings ... ok [INFO] [stdout] test quantify::tests::verdict_ignores_a_merged_p0_since_merged_means_folded_not_unresolved ... ok [INFO] [stdout] test quantify::tests::verdict_ignores_an_uncertain_p2_since_it_is_not_high_severity ... ok [INFO] [stdout] test quantify::tests::verdict_needs_context_on_a_deterministic_check_error_with_no_fail ... ok [INFO] [stdout] test quantify::tests::verdict_needs_context_on_ambiguous_requirement ... ok [INFO] [stdout] test quantify::tests::verdict_needs_context_on_an_uncertain_p0_even_with_nothing_else_confirmed ... ok [INFO] [stdout] test quantify::tests::verdict_needs_context_on_an_uncertain_p1 ... ok [INFO] [stdout] test quantify::tests::verdict_needs_context_on_missing_requirement ... ok [INFO] [stdout] test quantify::tests::verdict_reason_distinguishes_a_deterministic_fail_from_a_deterministic_error ... ok [INFO] [stdout] test quantify::tests::verdict_reason_distinguishes_a_policy_failure_from_a_confirmed_p0_defect ... ok [INFO] [stdout] test llm::tests::deadline_aware_sleep_caps_at_the_remaining_budget_instead_of_the_full_backoff ... ok [INFO] [stdout] test quantify::tests::verdict_request_changes_from_deterministic_fail_wins_over_needs_context_from_uncertain ... ok [INFO] [stdout] test quantify::tests::verdict_reason_is_no_confirmed_findings_on_a_genuinely_clean_diff ... ok [INFO] [stdout] test quantify::tests::verdict_request_changes_on_a_deterministic_check_fail_even_with_nothing_confirmed ... ok [INFO] [stdout] test quantify::tests::verdict_request_changes_on_confirmed_p0 ... ok [INFO] [stdout] test quantify::tests::verdict_request_changes_still_wins_over_an_unrelated_uncertain_p1 ... ok [INFO] [stdout] test report::tests::escape_table_cell_converts_newlines_to_br ... ok [INFO] [stdout] test quantify::tests::verdict_unaffected_by_a_deterministic_check_that_passes ... ok [INFO] [stdout] test report::tests::escape_table_cell_escapes_pipe ... ok [INFO] [stdout] test report::tests::escape_table_cell_handles_both_at_once ... ok [INFO] [stdout] test report::tests::escape_table_cell_leaves_plain_text_untouched ... ok [INFO] [stdout] test quantify::tests::score_treats_unresolved_findings_as_not_deducted ... ok [INFO] [stdout] test report::tests::write_leaves_the_verdict_line_unmarked_when_no_stage_failed ... ok [INFO] [stdout] test report::tests::write_marks_the_verdict_line_failed_not_partial_when_completeness_is_failed ... ok [INFO] [stdout] test report::tests::write_does_not_render_a_confidence_caveat_when_the_audit_has_no_confidence_bearing_move ... ok [INFO] [stdout] test report::tests::write_marks_the_verdict_line_partial_when_a_stage_failed ... ok [INFO] [stdout] test report::tests::write_renders_the_verdict_reason_slug_on_the_verdict_line ... ok [INFO] [stdout] test report::tests::write_renders_a_confidence_reliability_caveat_when_the_audit_has_a_confidence_bearing_move ... ok [INFO] [stdout] test report::tests::write_renders_a_moves_confidence_in_the_discourse_audit_table ... ok [INFO] [stdout] test report::tests::write_shows_uncertain_and_merged_findings_that_score_ignores ... ok [INFO] [stdout] test requirements::tests::build_task_skips_fencing_when_no_findings ... ok [INFO] [stdout] test pipeline::par_map_tests::par_map_lets_a_freed_worker_pick_up_the_next_item_instead_of_waiting_on_a_slow_chunk_mate ... ok [INFO] [stdout] test requirements::tests::normalize_status_passes_through_valid_values ... ok [INFO] [stdout] test requirements::tests::normalize_status_falls_back_to_ambiguous_on_unknown_value ... ok [INFO] [stdout] test requirements::tests::normalize_status_trims_and_uppercases ... ok [INFO] [stdout] test requirements::tests::requirements_output_survives_check_missing_status ... ok [INFO] [stdout] test requirements::tests::split_requirement_lines_skips_blank_lines ... ok [INFO] [stdout] test requirements::tests::split_requirement_lines_strips_bullets_and_numbering ... ok [INFO] [stdout] test requirements::tests::verify_does_not_duplicate_a_requirement_the_response_already_addressed ... ok [INFO] [stdout] test requirements::tests::verify_synthesizes_ambiguous_for_a_requirement_the_response_never_mentioned ... ok [INFO] [stdout] test requirements::tests::verify_synthesizes_ambiguous_for_every_requirement_on_a_totally_empty_response ... ok [INFO] [stdout] test secretscan::tests::contains_marker_word_accepts_a_real_word_boundary_match ... ok [INFO] [stdout] test secretscan::tests::contains_marker_word_rejects_a_mid_word_match ... ok [INFO] [stdout] test secretscan::tests::redact_does_not_panic_on_multi_byte_utf8_secrets ... ok [INFO] [stdout] test secretscan::tests::redact_masks_the_middle_and_keeps_first_and_last_four_chars ... ok [INFO] [stdout] test secretscan::tests::scan_detects_a_secret_on_a_context_line ... ok [INFO] [stdout] test secretscan::tests::scan_detects_a_secret_on_a_removed_line ... ok [INFO] [stdout] test secretscan::tests::scan_detects_a_secret_on_an_added_line_whose_own_content_starts_with_plus ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_a_bare_identifier_with_no_digits_assigned_to_a_key_named_field ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_a_bare_increment_expression_assigned_to_a_token_named_variable ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_a_code_expression_captured_after_a_token_named_variable ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_a_comparison_against_null_as_a_secret_assignment ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_an_arbitrary_16_digit_number_that_fails_luhn ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_a_dotted_property_reference_as_a_secret_value ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_an_ordinary_max_tokens_api_parameter ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_an_ordinary_short_number_even_if_it_would_pass_luhn ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_code_that_processes_pem_marker_strings_as_text ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_flag_other_benign_token_count_identifiers ... ok [INFO] [stdout] test secretscan::tests::scan_does_not_mistake_an_added_line_starting_with_plus_plus_plus_for_a_file_header ... ok [INFO] [stdout] test secretscan::tests::scan_finds_a_pem_key_folded_onto_one_line_via_escaped_newlines ... ok [INFO] [stdout] test secretscan::tests::scan_finds_and_redacts_a_non_ascii_env_style_secret_without_panicking ... ok [INFO] [stdout] test secretscan::tests::scan_finds_aws_access_key_in_an_added_line ... ok [INFO] [stdout] test secretscan::tests::scan_finds_env_style_secret_but_skips_placeholders_and_interpolation ... ok [INFO] [stdout] test secretscan::tests::scan_finds_github_token ... ok [INFO] [stdout] test secretscan::tests::scan_finds_jwt_shaped_token ... ok [INFO] [stdout] test secretscan::tests::scan_finds_pem_private_key_header ... ok [INFO] [stdout] test secretscan::tests::scan_flags_a_luhn_valid_card_number ... ok [INFO] [stdout] test secretscan::tests::scan_flags_a_luhn_valid_card_number_written_with_spaces ... ok [INFO] [stdout] test requirements::tests::build_task_fences_findings_summary_so_embedded_backticks_cannot_break_out ... ok [INFO] [stdout] test requirements::tests::build_task_references_requirements_by_id_not_full_text_duplication_in_the_schema ... ok [INFO] [stdout] test secretscan::tests::scan_returns_no_hits_on_an_ordinary_diff ... ok [INFO] [stdout] test secretscan::tests::scan_still_flags_a_real_looking_api_key_value_assigned_to_a_key_named_variable ... ok [INFO] [stdout] test secretscan::tests::scan_still_flags_a_real_secret_that_ends_with_a_quoted_semicolon ... ok [INFO] [stdout] test secretscan::tests::scan_still_flags_a_real_token_credential ... ok [INFO] [stdout] test secretscan::tests::scan_text_finds_a_secret_in_plain_text_and_labels_it_with_the_given_source ... ok [INFO] [stdout] test secretscan::tests::scan_text_ignores_lines_with_no_secret_shape ... ok [INFO] [stdout] test semgrep::build_args_tests::build_args_starts_with_explicit_scan_subcommand ... ok [INFO] [stdout] test semgrep::build_args_tests::build_args_keeps_flag_like_filename_as_positional ... ok [INFO] [stdout] test semgrep::build_args_tests::build_args_places_separator_before_file_list ... ok [INFO] [stdout] test semgrep::tests::build_deterministic_results_ignores_an_empty_errors_array ... ok [INFO] [stdout] test semgrep::tests::build_deterministic_results_reports_error_not_pass_on_a_nonzero_exit_with_empty_results ... ok [INFO] [stdout] test semgrep::tests::build_deterministic_results_reports_error_when_the_errors_array_is_non_empty_even_on_a_zero_exit ... ok [INFO] [stdout] test semgrep::tests::build_deterministic_results_reports_fail_when_results_are_present ... ok [INFO] [stdout] test semgrep::tests::build_deterministic_results_reports_pass_on_a_clean_successful_run ... ok [INFO] [stdout] test secretscan::tests::scan_still_flags_a_bare_value_that_contains_a_digit ... ok [INFO] [stdout] test spec::tests::load_accepts_the_shipped_high_recall_and_low_noise_presets ... ok [INFO] [stdout] test spec::tests::load_defaults_denied_path_patterns_to_empty_when_security_table_is_absent ... ok [INFO] [stdout] test input::tests::prioritize_and_cap_diff_truncation_never_splits_a_hunk_in_half ... ok [INFO] [stdout] test spec::tests::load_defaults_ignored_path_patterns_to_empty_when_absent ... ok [INFO] [stdout] test spec::tests::load_defaults_scoring_when_table_is_absent ... ok [INFO] [stdout] test spec::tests::load_honors_a_configured_denied_path_pattern ... ok [INFO] [stdout] test spec::tests::load_defaults_vote_threshold_to_zero_point_six_when_discourse_table_is_absent ... ok [INFO] [stdout] test spec::tests::load_partial_scoring_table_only_overrides_given_fields ... ok [INFO] [stdout] test spec::tests::load_rejects_a_negative_scoring_penalty ... ok [INFO] [stdout] test spec::tests::load_rejects_a_zero_or_negative_vote_threshold ... ok [INFO] [stdout] test spec::tests::load_honors_a_custom_vote_threshold ... ok [INFO] [stdout] test spec::tests::load_rejects_a_scoring_penalty_over_100 ... ok [INFO] [stdout] test spec::tests::load_rejects_empty_ignored_path_pattern ... ok [INFO] [stdout] test spec::tests::load_accepts_valid_unique_lens_ids ... ok [INFO] [stdout] test spec::tests::load_rejects_empty_test_path_pattern ... ok [INFO] [stdout] test spec::tests::load_rejects_empty_lens_id ... ok [INFO] [stdout] test spec::tests::load_rejects_empty_doc_path_pattern ... ok [INFO] [stdout] test spec::tests::load_rejects_empty_denied_path_pattern ... ok [INFO] [stdout] test state::tests::load_accepts_state_json_with_current_schema_version ... ok [INFO] [stdout] test pipeline::review::e2e_tests::run_review_end_to_end_with_fixture_llm_produces_expected_report ... ok [INFO] [stdout] test spec::tests::load_rejects_duplicate_lens_ids ... ok [INFO] [stdout] test deterministic::tests::try_run_runs_regardless_of_changed_files_when_not_required ... ok [INFO] [stdout] test state::tests::load_rejects_state_json_with_stale_or_missing_schema_version ... ok [INFO] [stdout] test llm::tests::wait_with_timeout_returns_output_when_process_finishes_in_time ... ok [INFO] [stdout] test llm::tests::write_stdin_and_wait_returns_output_for_a_process_that_echoes_stdin ... ok [INFO] [stdout] test deterministic::tests::try_run_fails_distinctly_from_skipped_when_parse_returns_none ... ok [INFO] [stdout] test procutil::tests::spawn_and_wait_runs_a_real_binary_and_returns_its_output ... ok [INFO] [stdout] test procutil::tests::wait_with_timeout_returns_output_when_process_finishes_in_time ... ok [INFO] [stdout] test procutil::tests::wait_with_timeout_kills_and_returns_none_when_the_process_hangs ... ok [INFO] [stdout] test llm::tests::text_ctx_records_attempts_greater_than_1_after_a_retryable_failure_then_success ... ok [INFO] [stdout] test llm::tests::wait_with_timeout_kills_and_errors_when_process_hangs ... ok [INFO] [stdout] test llm::tests::write_stdin_and_wait_times_out_promptly_instead_of_blocking_on_a_large_write ... ok [INFO] [stderr] Running tests/fail_on_total_failure.rs (/opt/rustwide/target/release/deps/fail_on_total_failure-166a5d6932701063) [INFO] [stdout] [INFO] [stdout] test result: ok. 360 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.07s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 2 tests [INFO] [stdout] test review_exits_non_zero_under_fail_on_when_every_lens_fails ... ok [INFO] [stdout] test review_still_exits_zero_under_fail_on_never_when_every_lens_fails ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.13s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0", kill_on_drop: false }` [INFO] [stdout] f7b8390d32089b1360e9e72315e7d36f93c3afd4890f1b9670d722551f3240f0