[INFO] fetching crate oximedia-caption-gen 0.1.3... [INFO] testing oximedia-caption-gen-0.1.3 against try#dec9417b8611e34e787a3e4c37686b5131f9e5c5 for pr-154210-2 [INFO] extracting crate oximedia-caption-gen 0.1.3 into /workspace/builds/worker-6-tc2/source [INFO] started tweaking crates.io crate oximedia-caption-gen 0.1.3 [INFO] finished tweaking crates.io crate oximedia-caption-gen 0.1.3 [INFO] tweaked toml for crates.io crate oximedia-caption-gen 0.1.3 written to /workspace/builds/worker-6-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate oximedia-caption-gen 0.1.3 on toolchain dec9417b8611e34e787a3e4c37686b5131f9e5c5 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate oximedia-caption-gen 0.1.3 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 8d870dbd3cb0f1d2a1a71e98a1e086cb2e8759765c6986106373571463dde941 [INFO] running `Command { std: "docker" "start" "-a" "8d870dbd3cb0f1d2a1a71e98a1e086cb2e8759765c6986106373571463dde941", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "8d870dbd3cb0f1d2a1a71e98a1e086cb2e8759765c6986106373571463dde941", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8d870dbd3cb0f1d2a1a71e98a1e086cb2e8759765c6986106373571463dde941", kill_on_drop: false }` [INFO] [stdout] 8d870dbd3cb0f1d2a1a71e98a1e086cb2e8759765c6986106373571463dde941 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] b906d41226a985673c38d8ecc03190209fa19b2bc3f14a67df778a20e424db76 [INFO] running `Command { std: "docker" "start" "-a" "b906d41226a985673c38d8ecc03190209fa19b2bc3f14a67df778a20e424db76", kill_on_drop: false }` [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling oximedia-caption-gen v0.1.3 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 6.45s [INFO] running `Command { std: "docker" "inspect" "b906d41226a985673c38d8ecc03190209fa19b2bc3f14a67df778a20e424db76", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b906d41226a985673c38d8ecc03190209fa19b2bc3f14a67df778a20e424db76", kill_on_drop: false }` [INFO] [stdout] b906d41226a985673c38d8ecc03190209fa19b2bc3f14a67df778a20e424db76 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e19b773ca3b4aa81ba8d1b1cf2ce574f8929c5ebab1e155be117188b1a728ff4 [INFO] running `Command { std: "docker" "start" "-a" "e19b773ca3b4aa81ba8d1b1cf2ce574f8929c5ebab1e155be117188b1a728ff4", kill_on_drop: false }` [INFO] [stderr] Compiling oximedia-caption-gen v0.1.3 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 4.14s [INFO] running `Command { std: "docker" "inspect" "e19b773ca3b4aa81ba8d1b1cf2ce574f8929c5ebab1e155be117188b1a728ff4", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e19b773ca3b4aa81ba8d1b1cf2ce574f8929c5ebab1e155be117188b1a728ff4", kill_on_drop: false }` [INFO] [stdout] e19b773ca3b4aa81ba8d1b1cf2ce574f8929c5ebab1e155be117188b1a728ff4 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 10c3525365c20f8532f2544acdf8a5e035e76146a61db66479b9d146e616a0e0 [INFO] running `Command { std: "docker" "start" "-a" "10c3525365c20f8532f2544acdf8a5e035e76146a61db66479b9d146e616a0e0", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.03s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/oximedia_caption_gen-d86d7dc79306aec0) [INFO] [stdout] [INFO] [stdout] running 470 tests [INFO] [stdout] test alignment::tests::align_to_frames_rejects_negative_fps ... ok [INFO] [stdout] test alignment::tests::align_to_frames_batch_basic ... ok [INFO] [stdout] test alignment::tests::align_to_frames_batch_rejects_zero_fps ... ok [INFO] [stdout] test alignment::tests::align_to_frames_correct_frame_numbers_at_30fps ... ok [INFO] [stdout] test alignment::tests::align_to_frames_rejects_zero_fps ... ok [INFO] [stdout] test alignment::tests::align_to_frames_segment_level ... ok [INFO] [stdout] test alignment::tests::alignment_error_display_empty_transcript ... ok [INFO] [stdout] test alignment::tests::align_to_frames_word_level ... ok [INFO] [stdout] test alignment::tests::build_caption_blocks_basic ... ok [INFO] [stdout] test alignment::tests::build_caption_blocks_preserves_timestamps ... ok [INFO] [stdout] test alignment::tests::build_caption_blocks_respects_max_lines ... ok [INFO] [stdout] test alignment::tests::build_caption_blocks_with_overlapping_word_timestamps ... ok [INFO] [stdout] test alignment::tests::build_caption_blocks_speaker_id_preserved ... ok [INFO] [stdout] test alignment::tests::caption_block_char_count ... ok [INFO] [stdout] test alignment::tests::merge_short_segments_empty ... ok [INFO] [stdout] test alignment::tests::merge_short_segments_merges_short_prefix ... ok [INFO] [stdout] test alignment::tests::merge_short_segments_no_op_if_all_long_enough ... ok [INFO] [stdout] test alignment::tests::merge_short_segments_merges_short_suffix ... ok [INFO] [stdout] test alignment::tests::merge_short_segments_span_extends ... ok [INFO] [stdout] test alignment::tests::alignment_error_display_invalid_timestamp ... ok [INFO] [stdout] test alignment::tests::split_long_segments_no_op_if_short ... ok [INFO] [stdout] test alignment::tests::split_long_segments_by_duration ... ok [INFO] [stdout] test alignment::tests::split_long_segments_respects_max_chars ... ok [INFO] [stdout] test alignment::tests::split_text_sentence_boundary_preferred ... ok [INFO] [stdout] test alignment::tests::word_timestamp_fields_accessible ... ok [INFO] [stdout] test alignment::tests::word_timestamp_with_word_confidence ... ok [INFO] [stdout] test alignment::tests::align_to_frames_same_start_frame_merges_words ... ok [INFO] [stdout] test alignment::tests::split_long_segments_words_assigned_to_subsegments ... ok [INFO] [stdout] test autopunct::tests::test_capitalises_after_exclamation_space ... ok [INFO] [stdout] test alignment::tests::split_text_word_boundary_fallback ... ok [INFO] [stdout] test autopunct::tests::test_capitalises_after_question_space ... ok [INFO] [stdout] test alignment::tests::transcript_segment_duration ... ok [INFO] [stdout] test autopunct::tests::test_capitalises_first_char ... ok [INFO] [stdout] test autopunct::tests::test_already_capitalised ... ok [INFO] [stdout] test burn_in::tests::default_config_has_bottom_position ... ok [INFO] [stdout] test burn_in::tests::default_config_white_text ... ok [INFO] [stdout] test burn_in::tests::glyph_for_non_ascii_returns_question_mark ... ok [INFO] [stdout] test autopunct::tests::test_multiple_sentences ... ok [INFO] [stdout] test burn_in::tests::glyph_for_space_is_blank ... ok [INFO] [stdout] test autopunct::tests::test_no_double_period ... ok [INFO] [stdout] test alignment::tests::split_long_segments_preserves_total_duration ... ok [INFO] [stdout] test alignment::tests::build_caption_blocks_default_position_bottom ... ok [INFO] [stdout] test autopunct::tests::test_adds_period_at_end ... ok [INFO] [stdout] test autopunct::tests::test_single_word ... ok [INFO] [stdout] test autopunct::tests::test_capitalises_after_period_space ... ok [INFO] [stdout] test autopunct::tests::test_empty_returns_empty ... ok [INFO] [stdout] test autopunct::tests::test_existing_question_mark_no_extra_period ... ok [INFO] [stdout] test autopunct::tests::test_existing_exclamation_no_extra_period ... ok [INFO] [stdout] test burn_in::tests::render_frame_zero_height_no_panic ... ok [INFO] [stdout] test burn_in::tests::render_frame_top_position ... ok [INFO] [stdout] test burn_in::tests::render_frame_undersized_buffer_no_panic ... ok [INFO] [stdout] test burn_in::tests::render_frame_bottom_position ... ok [INFO] [stdout] test burn_in::tests::render_frame_custom_position ... ok [INFO] [stdout] test caption_diff::tests::diff_identical_tracks_all_equal ... ok [INFO] [stdout] test burn_in::tests::render_frame_empty_text_no_change ... ok [INFO] [stdout] test caption_diff::tests::diff_both_empty_returns_empty ... ok [INFO] [stdout] test burn_in::tests::render_frame_zero_width_no_panic ... ok [INFO] [stdout] test caption_diff::tests::diff_extra_block_in_right_is_insert ... ok [INFO] [stdout] test caption_diff::tests::diff_changed_text_is_replace_or_delete_insert ... ok [INFO] [stdout] test caption_diff::tests::diff_missing_block_in_right_is_delete ... ok [INFO] [stdout] test caption_diff::tests::normalise_text_joins_lines ... ok [INFO] [stdout] test caption_diff::tests::diff_same_text_different_timing_reports_shift ... ok [INFO] [stdout] test caption_diff::tests::diff_left_empty_all_inserts ... ok [INFO] [stdout] test caption_diff::tests::text_changes_excludes_equal_and_shifted ... ok [INFO] [stdout] test burn_in::tests::render_frame_middle_position ... ok [INFO] [stdout] test caption_diff::tests::summarise_all_different_similarity_zero ... ok [INFO] [stdout] test caption_diff::tests::timing_shifts_detects_shifted_blocks ... ok [INFO] [stdout] test caption_diff::tests::summarise_identical_similarity_one ... ok [INFO] [stdout] test caption_diff::tests::timing_shifts_ignores_unshifted_blocks ... ok [INFO] [stdout] test caption_diff::tests::diff_op_symbol ... ok [INFO] [stdout] test caption_diff::tests::diff_right_empty_all_deletes ... ok [INFO] [stdout] test caption_format_adapter::tests::invalid_timestamp_zero_zero_is_allowed ... ok [INFO] [stdout] test caption_format_adapter::tests::output_format_variants_are_eq ... ok [INFO] [stdout] test caption_format_adapter::tests::invalid_timestamp_returns_error ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_blocks_separated_by_blank_line ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_empty_track_produces_empty_string ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_timestamp_one_hour ... ok [INFO] [stdout] test caption_format_adapter::tests::custom_position_block_vtt_has_position_setting ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_timestamp_zero ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_timestamp_sub_second ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_unicode_text_preserved ... ok [INFO] [stdout] test burn_in::tests::render_frame_writes_pixels ... ok [INFO] [stdout] test caption_format_adapter::tests::ttml_empty_track_produces_valid_xml_skeleton ... ok [INFO] [stdout] test burn_in::tests::render_frame_multiline_text ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_multiple_blocks ... ok [INFO] [stdout] test caption_format_adapter::tests::ttml_escapes_xml_special_chars ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_output_sequence_numbers_sequential ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_single_block ... ok [INFO] [stdout] test caption_format_adapter::tests::ttml_block_xml_id_uses_block_id ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_timestamp_large_hours ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_timestamp_mixed ... ok [INFO] [stdout] test caption_format_adapter::tests::srt_two_line_block_emits_two_lines ... ok [INFO] [stdout] test caption_format_adapter::tests::ttml_has_p_element_with_timestamps ... ok [INFO] [stdout] test caption_format_adapter::tests::ttml_multi_line_uses_br_element ... ok [INFO] [stdout] test caption_format_adapter::tests::vtt_bottom_position_no_cue_setting ... ok [INFO] [stdout] test burn_in::tests::render_frame_with_outline ... ok [INFO] [stdout] test caption_format_adapter::tests::ttml_has_xml_declaration ... ok [INFO] [stdout] test caption_format_adapter::tests::vtt_empty_track_has_webvtt_header_only ... ok [INFO] [stdout] test caption_format_adapter::tests::vtt_timestamp_sub_second ... ok [INFO] [stdout] test caption_format_adapter::tests::vtt_timestamp_uses_dot_separator ... ok [INFO] [stdout] test caption_format_adapter::tests::vtt_top_position_adds_line_cue_setting ... ok [INFO] [stdout] test caption_format_adapter::tests::vtt_uses_dot_separator_in_timestamps ... ok [INFO] [stdout] test caption_format_adapter::tests::xml_escape_all_specials ... ok [INFO] [stdout] test caption_format_adapter::tests::vtt_starts_with_webvtt_header ... ok [INFO] [stdout] test caption_format_adapter::tests::vtt_timestamp_mixed ... ok [INFO] [stdout] test caption_format_adapter::tests::ttml_has_tt_element ... ok [INFO] [stdout] test caption_format_adapter::tests::vtt_cue_identifier_present ... ok [INFO] [stdout] test caption_format_adapter::tests::xml_escape_plain_text_unchanged ... ok [INFO] [stdout] test caption_style_guide::tests::audience_max_cps_ordering ... ok [INFO] [stdout] test caption_style_guide::tests::compliance_score_perfect ... ok [INFO] [stdout] test caption_style_guide::tests::custom_audience_respected ... ok [INFO] [stdout] test caption_style_guide::tests::duration_too_short_detected ... ok [INFO] [stdout] test caption_style_guide::tests::gap_too_short_detected ... ok [INFO] [stdout] test caption_style_guide::tests::line_too_long_detected ... ok [INFO] [stdout] test caption_style_guide::tests::overlap_detected ... ok [INFO] [stdout] test caption_style_guide::tests::reading_speed_exceeded_for_children ... ok [INFO] [stdout] test caption_style_guide::tests::too_many_lines_detected ... ok [INFO] [stdout] test caption_style_guide::tests::terminal_punctuation_required_by_children_guide ... ok [INFO] [stdout] test caption_style_guide::tests::valid_broadcast_block_no_violations ... ok [INFO] [stdout] test caption_style_guide::tests::compliance_score_partial ... ok [INFO] [stdout] test caption_timing_adjuster::tests::clamp_block_exactly_at_range_start_included ... ok [INFO] [stdout] test caption_style_guide::tests::violation_description_non_empty ... ok [INFO] [stdout] test caption_timing_adjuster::tests::clamp_block_exactly_at_range_end_excluded ... ok [INFO] [stdout] test caption_style_guide::tests::duration_too_long_detected ... ok [INFO] [stdout] test caption_style_guide::tests::missing_capitalisation_detected ... ok [INFO] [stdout] test caption_timing_adjuster::tests::clamp_invalid_range_returns_empty ... ok [INFO] [stdout] test caption_timing_adjuster::tests::clamp_removes_out_of_range_blocks ... ok [INFO] [stdout] test caption_timing_adjuster::tests::edl_remap_block_spans_cut_is_split ... ok [INFO] [stdout] test caption_timing_adjuster::tests::edl_remap_drops_blocks_outside_edl ... ok [INFO] [stdout] test caption_timing_adjuster::tests::edl_remap_invalid_entry_returns_error ... ok [INFO] [stdout] test caption_timing_adjuster::tests::clamp_renumbers_blocks ... ok [INFO] [stdout] test caption_timing_adjuster::tests::clamp_trims_overlapping_blocks ... ok [INFO] [stdout] test caption_timing_adjuster::tests::edl_remap_multiple_blocks_multiple_edl_entries ... ok [INFO] [stdout] test caption_timing_adjuster::tests::edl_remap_reassigns_sequential_ids ... ok [INFO] [stdout] test caption_timing_adjuster::tests::edl_remap_shifts_destination ... ok [INFO] [stdout] test caption_timing_adjuster::tests::edl_remap_simple ... ok [INFO] [stdout] test caption_timing_adjuster::tests::error_display_invalid_edl_range ... ok [INFO] [stdout] test caption_timing_adjuster::tests::error_display_invalid_factor ... ok [INFO] [stdout] test caption_timing_adjuster::tests::shift_clamps_to_zero ... ok [INFO] [stdout] test caption_timing_adjuster::tests::shift_drops_blocks_with_zero_duration_after_shift ... ok [INFO] [stdout] test caption_timing_adjuster::tests::shift_empty_input_returns_empty ... ok [INFO] [stdout] test caption_timing_adjuster::tests::shift_positive_offset_moves_later ... ok [INFO] [stdout] test caption_timing_adjuster::tests::shift_preserves_block_text_and_id ... ok [INFO] [stdout] test caption_timing_adjuster::tests::snap_to_frame_30fps ... ok [INFO] [stdout] test caption_timing_adjuster::tests::snap_to_frame_already_on_frame ... ok [INFO] [stdout] test caption_timing_adjuster::tests::snap_to_frame_invalid_fps_returns_error ... ok [INFO] [stdout] test caption_timing_adjuster::tests::shift_multiple_blocks_all_shifted ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_around_anchor_at_start ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_around_anchor_in_middle ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_around_factor_one_is_noop ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_factor_half_halves_timestamps ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_factor_two_doubles_timestamps ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_preserves_number_of_blocks ... ok [INFO] [stdout] test caption_timing_adjuster::tests::shift_negative_offset_moves_earlier ... ok [INFO] [stdout] test caption_timing_adjuster::tests::error_display_invalid_fps ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_factor_one_is_noop ... ok [INFO] [stdout] test diarization::tests::assign_speakers_assigns_overlapping_speaker ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_zero_factor_returns_error ... ok [INFO] [stdout] test diarization::tests::assign_speakers_with_five_simultaneous_speakers ... ok [INFO] [stdout] test diarization::tests::crosstalk_detector_with_tolerance_filters_small_overlap ... ok [INFO] [stdout] test diarization::tests::assign_speakers_no_overlap_unchanged ... ok [INFO] [stdout] test diarization::tests::crosstalk_detector_with_tolerance_keeps_large_overlap ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_negative_factor_returns_error ... ok [INFO] [stdout] test diarization::tests::diarization_result_total_speech_ms ... ok [INFO] [stdout] test diarization::tests::dominant_speaker_basic ... ok [INFO] [stdout] test diarization::tests::dominant_speaker_empty ... ok [INFO] [stdout] test diarization::tests::find_overlapping_turns_detects_overlap ... ok [INFO] [stdout] test diarization::tests::find_overlapping_turns_multiple_overlaps ... ok [INFO] [stdout] test diarization::tests::find_overlapping_turns_none ... ok [INFO] [stdout] test diarization::tests::format_speaker_label_with_name ... ok [INFO] [stdout] test diarization::tests::format_speaker_label_without_name ... ok [INFO] [stdout] test diarization::tests::merge_consecutive_different_speakers_not_merged ... ok [INFO] [stdout] test diarization::tests::merge_consecutive_empty ... ok [INFO] [stdout] test diarization::tests::merge_consecutive_large_gap_not_merged ... ok [INFO] [stdout] test diarization::tests::merge_consecutive_same_speaker_small_gap ... ok [INFO] [stdout] test diarization::tests::merge_consecutive_sorts_before_merge ... ok [INFO] [stdout] test diarization::tests::merge_with_gap_zero_does_not_merge ... ok [INFO] [stdout] test diarization::tests::merge_with_large_gap_merges_far_turns ... ok [INFO] [stdout] test diarization::tests::speaker_gender_variants_accessible ... ok [INFO] [stdout] test diarization::tests::speaker_stats_avg_turn ... ok [INFO] [stdout] test diarization::tests::speaker_stats_basic ... ok [INFO] [stdout] test diarization::tests::speaker_turn_overlap_false_separate ... ok [INFO] [stdout] test diarization::tests::speaker_turn_overlap_true ... ok [INFO] [stdout] test diarization::tests::voice_activity_ratio_full_coverage ... ok [INFO] [stdout] test diarization::tests::voice_activity_ratio_half_coverage ... ok [INFO] [stdout] test diarization::tests::speaker_turn_overlap_false_adjacent ... ok [INFO] [stdout] test diarization::tests::voice_activity_ratio_overlapping_turns_not_double_counted ... ok [INFO] [stdout] test diarization::tests::voice_activity_ratio_zero_duration ... ok [INFO] [stdout] test forced_narrative::tests::all_lines_bracketed_true ... ok [INFO] [stdout] test diarization::tests::speaker_turn_duration ... ok [INFO] [stdout] test forced_narrative::tests::all_lines_bracketed_partial_false ... ok [INFO] [stdout] test forced_narrative::tests::annotation_fields_accessible ... ok [INFO] [stdout] test forced_narrative::tests::bracketed_normal_text_is_false ... ok [INFO] [stdout] test forced_narrative::tests::bracketed_partial_bracket_is_false ... ok [INFO] [stdout] test forced_narrative::tests::bracketed_round_brackets ... ok [INFO] [stdout] test forced_narrative::tests::bracketed_square_brackets ... ok [INFO] [stdout] test forced_narrative::tests::classifier_filter_non_normal ... ok [INFO] [stdout] test forced_narrative::tests::classifier_confidence_threshold_rejects_low_confidence ... ok [INFO] [stdout] test forced_narrative::tests::classifier_promote_speaker_id ... ok [INFO] [stdout] test forced_narrative::tests::classifier_mark_forced_multiple_blocks ... ok [INFO] [stdout] test forced_narrative::tests::classify_mixed_bracket_lines_not_sound_effect ... ok [INFO] [stdout] test forced_narrative::tests::classify_empty_block_is_normal ... ok [INFO] [stdout] test forced_narrative::tests::classifier_empty_track_returns_empty ... ok [INFO] [stdout] test forced_narrative::tests::classifier_forced_override ... ok [INFO] [stdout] test forced_narrative::tests::classifier_full_track ... ok [INFO] [stdout] test forced_narrative::tests::classify_on_screen_text_with_numbers_and_commas ... ok [INFO] [stdout] test forced_narrative::tests::classifier_filter_non_normal_empty_track ... ok [INFO] [stdout] test forced_narrative::tests::classify_sound_effect_with_keyword ... ok [INFO] [stdout] test forced_narrative::tests::classify_normal_speech ... ok [INFO] [stdout] test forced_narrative::tests::classify_speaker_label ... ok [INFO] [stdout] test forced_narrative::tests::classify_round_bracket_sound_effect ... ok [INFO] [stdout] test forced_narrative::tests::classify_sound_effect_generic_brackets ... ok [INFO] [stdout] test forced_narrative::tests::classify_on_screen_text ... ok [INFO] [stdout] test forced_narrative::tests::track_stats_all_sound_effects ... ok [INFO] [stdout] test forced_narrative::tests::fn_sdh_kind_equality ... ok [INFO] [stdout] test forced_narrative::tests::track_stats_counts_correctly ... ok [INFO] [stdout] test forced_narrative::tests::fn_sdh_classifier_default_min_confidence_is_0_60 ... ok [INFO] [stdout] test forced_narrative::tests::track_stats_empty_ratio_is_zero ... ok [INFO] [stdout] test forced_narrative::tests::on_screen_text_lowercase_is_false ... ok [INFO] [stdout] test forced_narrative::tests::on_screen_text_with_period_is_false ... ok [INFO] [stdout] test forced_narrative::tests::on_screen_text_all_caps_short ... ok [INFO] [stdout] test forced_narrative::tests::speaker_label_detected_simple ... ok [INFO] [stdout] test forced_narrative::tests::track_stats_sdh_ratio ... ok [INFO] [stdout] test language_detect::tests::detect_returns_unknown_for_short_text ... ok [INFO] [stdout] test language_detect::tests::detect_english_text ... ok [INFO] [stdout] test language_detect::tests::detect_german_text ... ok [INFO] [stdout] test language_detect::tests::hints_arabic_rtl ... ok [INFO] [stdout] test language_detect::tests::alternatives_present ... ok [INFO] [stdout] test language_detect::tests::detect_french_text ... ok [INFO] [stdout] test language_detect::tests::detect_from_segments_concatenates ... ok [INFO] [stdout] test language_detect::tests::detect_japanese_text ... ok [INFO] [stdout] test language_detect::tests::detect_arabic_text ... ok [INFO] [stdout] test language_detect::tests::detect_spanish_text ... ok [INFO] [stdout] test language_detect::tests::hints_english_defaults ... ok [INFO] [stdout] test language_detect::tests::hints_german_wider_line ... ok [INFO] [stdout] test language_detect::tests::language_code_display ... ok [INFO] [stdout] test language_detect::tests::hints_japanese_cjk ... ok [INFO] [stdout] test language_detect::tests::language_code_is_cjk ... ok [INFO] [stdout] test language_detect::tests::language_code_is_unknown ... ok [INFO] [stdout] test line_breaking::tests::adjust_duration_respects_min ... ok [INFO] [stdout] test language_detect::tests::language_code_is_rtl_arabic ... ok [INFO] [stdout] test forced_narrative::tests::speaker_label_not_detected_for_normal_colon ... ok [INFO] [stdout] test burn_in::tests::render_frame_large_font_scale ... ok [INFO] [stdout] test language_detect::tests::trigrams_empty_string ... ok [INFO] [stdout] test language_detect::tests::trigrams_basic ... ok [INFO] [stdout] test line_breaking::tests::adjust_duration_extends_for_long_text ... ok [INFO] [stdout] test line_breaking::tests::adjust_duration_zero_max_cps_returns_min ... ok [INFO] [stdout] test line_breaking::tests::balance_factor_empty_lines_is_zero ... ok [INFO] [stdout] test language_detect::tests::detection_result_reliability ... ok [INFO] [stdout] test caption_timing_adjuster::tests::snap_to_frame_25fps ... ok [INFO] [stdout] test caption_timing_adjuster::tests::shift_zero_offset_is_noop ... ok [INFO] [stdout] test forced_narrative::tests::speaker_label_detected_bracketed ... ok [INFO] [stdout] test language_detect::tests::trigrams_counts_repeats ... ok [INFO] [stdout] test line_breaking::tests::audience_profile_children_have_lower_cps ... ok [INFO] [stdout] test line_breaking::tests::audience_profile_children_have_longer_min_display ... ok [INFO] [stdout] test line_breaking::tests::balance_factor_single_line_is_zero ... ok [INFO] [stdout] test line_breaking::tests::balance_factor_equal_lines_is_zero ... ok [INFO] [stdout] test line_breaking::tests::balance_factor_unequal_lines_nonzero ... ok [INFO] [stdout] test line_breaking::tests::cjk_break_long_text_splits_at_char_boundary ... ok [INFO] [stdout] test line_breaking::tests::compute_cps_basic ... ok [INFO] [stdout] test line_breaking::tests::cjk_break_short_text_unchanged ... ok [INFO] [stdout] test line_breaking::tests::compute_cps_empty_text ... ok [INFO] [stdout] test line_breaking::tests::compute_cps_zero_duration_returns_zero ... ok [INFO] [stdout] test line_breaking::tests::cps_cache_returns_same_value_twice ... ok [INFO] [stdout] test line_breaking::tests::cps_cache_clear_removes_all_entries ... ok [INFO] [stdout] test line_breaking::tests::cps_cache_stores_entry ... ok [INFO] [stdout] test line_breaking::tests::greedy_and_optimal_produce_identical_single_line ... ok [INFO] [stdout] test line_breaking::tests::greedy_and_optimal_identical_for_single_word_per_line ... ok [INFO] [stdout] test line_breaking::tests::greedy_break_empty_string ... ok [INFO] [stdout] test line_breaking::tests::greedy_break_long_word_gets_own_line ... ok [INFO] [stdout] test line_breaking::tests::greedy_break_multiple_lines ... ok [INFO] [stdout] test line_breaking::tests::greedy_break_single_word_fits ... ok [INFO] [stdout] test line_breaking::tests::greedy_break_preserves_all_words ... ok [INFO] [stdout] test line_breaking::tests::greedy_break_two_words_fit_on_one_line ... ok [INFO] [stdout] test line_breaking::tests::greedy_break_wraps_at_limit ... ok [INFO] [stdout] test line_breaking::tests::language_aware_break_latin_uses_greedy ... ok [INFO] [stdout] test line_breaking::tests::line_break_config_hard_max_chars_constrains_effective ... ok [INFO] [stdout] test line_breaking::tests::line_break_config_default_broadcast_values ... ok [INFO] [stdout] test line_breaking::tests::optimal_break_empty_string ... ok [INFO] [stdout] test line_breaking::tests::optimal_break_more_balanced_than_greedy ... ok [INFO] [stdout] test line_breaking::tests::optimal_break_reference_output_known_case ... ok [INFO] [stdout] test line_breaking::tests::optimal_break_no_line_exceeds_max_width ... ok [INFO] [stdout] test line_breaking::tests::reading_speed_ok_slow_enough ... ok [INFO] [stdout] test line_breaking::tests::optimal_break_preserves_all_words ... ok [INFO] [stdout] test line_breaking::tests::optimal_break_single_line ... ok [INFO] [stdout] test line_breaking::tests::language_aware_break_cjk_detected ... ok [INFO] [stdout] test line_breaking::tests::reading_speed_ok_for_audience_children ... ok [INFO] [stdout] test line_breaking::tests::reading_speed_ok_too_fast ... ok [INFO] [stdout] test line_breaking::tests::rebalance_lines_preserves_all_words ... ok [INFO] [stdout] test line_breaking::tests::reading_speed_too_fast_for_children ... ok [INFO] [stdout] test line_breaking::tests::rebalance_lines_produces_at_most_same_balance_factor ... ok [INFO] [stdout] test line_breaking::tests::rebalance_lines_single_line_unchanged ... ok [INFO] [stdout] test multi_language::tests::bilingual_block_duration ... ok [INFO] [stdout] test multi_language::tests::merge_empty_primary_returns_empty ... ok [INFO] [stdout] test multi_language::tests::merge_empty_secondary_when_no_overlap ... ok [INFO] [stdout] test multi_language::tests::merge_pairs_overlapping_blocks ... ok [INFO] [stdout] test multi_language::tests::merge_picks_best_overlapping_secondary ... ok [INFO] [stdout] test multi_language::tests::merge_preserves_timestamps ... ok [INFO] [stdout] test multi_language::tests::render_interleaved ... ok [INFO] [stdout] test multi_language::tests::render_primary_bottom_secondary_on_top ... ok [INFO] [stdout] test multi_language::tests::render_primary_top ... ok [INFO] [stdout] test multi_language::tests::render_side_by_side ... ok [INFO] [stdout] test multi_language::tests::split_omits_blocks_with_empty_side ... ok [INFO] [stdout] test multi_language::tests::split_primary_side ... ok [INFO] [stdout] test multi_language::tests::split_secondary_side ... ok [INFO] [stdout] test multi_language::tests::sync_no_warnings_for_balanced_blocks ... ok [INFO] [stdout] test multi_language::tests::sync_warn_empty_secondary ... ok [INFO] [stdout] test multi_language::tests::sync_warn_secondary_too_long ... ok [INFO] [stdout] test multi_language::tests::to_caption_block_preserves_id_and_timestamps ... ok [INFO] [stdout] test multi_language_sync::tests::active_at_outside_returns_empty ... ok [INFO] [stdout] test multi_language_sync::tests::anchors_sorted_on_input ... ok [INFO] [stdout] test multi_language_sync::tests::average_timing_offset_none_for_different_lengths ... ok [INFO] [stdout] test multi_language_sync::tests::average_timing_offset_same_tracks_is_zero ... ok [INFO] [stdout] test multi_language_sync::tests::empty_tracks_returns_error ... ok [INFO] [stdout] test multi_language_sync::tests::active_at_returns_correct_blocks ... ok [INFO] [stdout] test multi_language_sync::tests::interleave_tracks_sorted_by_start ... ok [INFO] [stdout] test multi_language_sync::tests::lang_track_total_chars ... ok [INFO] [stdout] test multi_language_sync::tests::requires_at_least_two_anchors ... ok [INFO] [stdout] test multi_language_sync::tests::sync_single_segment_identity ... ok [INFO] [stdout] test multi_language_sync::tests::two_language_tracks_synced ... ok [INFO] [stdout] test multilang::tests::builder_add_track ... ok [INFO] [stdout] test multilang::tests::builder_add_track_replaces_existing ... ok [INFO] [stdout] test multilang::tests::builder_add_two_tracks ... ok [INFO] [stdout] test multilang::tests::builder_creates_empty_multilang ... ok [INFO] [stdout] test multilang::tests::caption_entry_duration ... ok [INFO] [stdout] test multilang::tests::caption_entry_duration_zero_on_equal_timestamps ... ok [INFO] [stdout] test multilang::tests::lang_code_display ... ok [INFO] [stdout] test multilang::tests::lang_code_invalid_digit ... ok [INFO] [stdout] test multilang::tests::lang_code_invalid_empty ... ok [INFO] [stdout] test multilang::tests::lang_code_invalid_one_letter ... ok [INFO] [stdout] test multilang::tests::lang_code_invalid_three_letters ... ok [INFO] [stdout] test multilang::tests::lang_code_invalid_uppercase ... ok [INFO] [stdout] test multilang::tests::lang_code_try_from_str ... ok [INFO] [stdout] test multilang::tests::lang_code_valid_en ... ok [INFO] [stdout] test multilang::tests::lang_code_valid_ja ... ok [INFO] [stdout] test multilang::tests::lang_code_valid_zh ... ok [INFO] [stdout] test multilang::tests::merge_timing_basic_overlap ... ok [INFO] [stdout] test multilang::tests::merge_timing_ids_renumbered ... ok [INFO] [stdout] test multilang::tests::merge_timing_missing_primary_returns_error ... ok [INFO] [stdout] test multilang::tests::merge_timing_missing_secondary_returns_error ... ok [INFO] [stdout] test multilang::tests::merge_timing_no_overlap_excluded ... ok [INFO] [stdout] test multilang::tests::merge_timing_picks_best_overlap ... ok [INFO] [stdout] test multilang::tests::to_srt_basic ... ok [INFO] [stdout] test multilang::tests::to_srt_empty_track_returns_empty_string ... ok [INFO] [stdout] test multilang::tests::to_srt_missing_language_returns_error ... ok [INFO] [stdout] test multilang::tests::to_srt_timestamp_format ... ok [INFO] [stdout] test phoneme_timing::tests::align_hello_produces_phonemes ... ok [INFO] [stdout] test phoneme_timing::tests::align_words_batch_skips_invalid ... ok [INFO] [stdout] test phoneme_timing::tests::average_phoneme_duration_nonzero ... ok [INFO] [stdout] test phoneme_timing::tests::count_syllables_hello ... ok [INFO] [stdout] test phoneme_timing::tests::grapheme_heuristic_unknown_word ... ok [INFO] [stdout] test phoneme_timing::tests::invalid_timestamp_returns_error ... ok [INFO] [stdout] test phoneme_timing::tests::lexicon_word_phonemes_correct_category ... ok [INFO] [stdout] test phoneme_timing::tests::no_stop_closure_when_disabled ... ok [INFO] [stdout] test phoneme_timing::tests::phonemes_cover_full_word_duration ... ok [INFO] [stdout] test phoneme_timing::tests::stop_closure_splits_stop_phoneme ... ok [INFO] [stdout] test phoneme_timing::tests::vowel_phonemes_returns_only_vowels ... ok [INFO] [stdout] test profanity::tests::test_add_word ... ok [INFO] [stdout] test profanity::tests::test_censored_length_matches_word_length ... ok [INFO] [stdout] test profanity::tests::test_contains_profanity_false ... ok [INFO] [stdout] test profanity::tests::test_filter_empty_text ... ok [INFO] [stdout] test profanity::tests::test_filter_empty_wordlist ... ok [INFO] [stdout] test profanity::tests::test_filter_no_partial_match ... ok [INFO] [stdout] test profanity::tests::test_filter_preserves_non_blocked_text ... ok [INFO] [stdout] test profanity::tests::test_filter_replaces_blocked_word ... ok [INFO] [stdout] test profanity::tests::test_filter_word_at_boundary ... ok [INFO] [stdout] test punctuation_restoration::tests::adds_period_at_end ... ok [INFO] [stdout] test punctuation_restoration::tests::capitalise_first_already_upper ... ok [INFO] [stdout] test punctuation_restoration::tests::capitalise_first_basic ... ok [INFO] [stdout] test punctuation_restoration::tests::capitalise_first_empty ... ok [INFO] [stdout] test punctuation_restoration::tests::config_default_values ... ok [INFO] [stdout] test punctuation_restoration::tests::empty_text_returns_empty ... ok [INFO] [stdout] test punctuation_restoration::tests::how_question_gets_question_mark ... ok [INFO] [stdout] test profanity::tests::test_contains_profanity_true ... ok [INFO] [stdout] test profanity::tests::test_filter_case_insensitive ... ok [INFO] [stdout] test punctuation_restoration::tests::inserts_comma_after_however ... ok [INFO] [stdout] test punctuation_restoration::tests::inserts_comma_after_well ... ok [INFO] [stdout] test punctuation_restoration::tests::no_capitalisation_when_disabled ... ok [INFO] [stdout] test punctuation_restoration::tests::question_starter_gets_question_mark ... ok [INFO] [stdout] test punctuation_restoration::tests::restores_capitalisation_of_first_word ... ok [INFO] [stdout] test punctuation_restoration::tests::segment_no_gap_no_mid_boundary ... ok [INFO] [stdout] test punctuation_restoration::tests::segment_preserves_timestamps ... ok [INFO] [stdout] test punctuation_restoration::tests::segment_with_long_gap_adds_boundary ... ok [INFO] [stdout] test punctuation_restoration::tests::exclamatory_word_gets_exclamation_mark ... ok [INFO] [stdout] test punctuation_restoration::tests::segment_without_words_falls_back_to_text_restoration ... ok [INFO] [stdout] test punctuation_restoration::tests::track_each_segment_gets_period ... ok [INFO] [stdout] test punctuation_restoration::tests::track_empty_input_returns_empty ... ok [INFO] [stdout] test reading_speed::tests::test_adult_preset_wps ... ok [INFO] [stdout] test reading_speed::tests::test_bbc_preset_wps ... ok [INFO] [stdout] test reading_speed::tests::test_children_limit_stricter ... ok [INFO] [stdout] test reading_speed::tests::test_children_preset_wps ... ok [INFO] [stdout] test reading_speed::tests::test_compute_wps_basic ... ok [INFO] [stdout] test reading_speed::tests::test_compute_wps_empty_returns_none ... ok [INFO] [stdout] test reading_speed::tests::test_compute_wps_zero_duration_returns_none ... ok [INFO] [stdout] test reading_speed::tests::test_empty_text_ok ... ok [INFO] [stdout] test punctuation_restoration::tests::no_comma_insertion_when_disabled ... ok [INFO] [stdout] test reading_speed::tests::test_exactly_at_limit ... ok [INFO] [stdout] test reading_speed::tests::test_exceeds_limit ... ok [INFO] [stdout] test reading_speed::tests::test_min_duration_ms ... ok [INFO] [stdout] test reading_speed::tests::test_min_duration_ms_empty ... ok [INFO] [stdout] test reading_speed::tests::test_validator_check_method ... ok [INFO] [stdout] test reading_speed::tests::test_within_limit ... ok [INFO] [stdout] test reading_speed::tests::test_zero_duration_ok ... ok [INFO] [stdout] test style_generator::tests::complex_frame_increases_font_size ... ok [INFO] [stdout] test style_generator::tests::font_size_scales_with_frame_height ... ok [INFO] [stdout] test style_generator::tests::frame_analysis_is_bright_threshold ... ok [INFO] [stdout] test style_generator::tests::frame_analysis_is_complex_threshold ... ok [INFO] [stdout] test style_generator::tests::font_size_clamped_to_minimum ... ok [INFO] [stdout] test style_generator::tests::black_has_zero_luminance ... ok [INFO] [stdout] test style_generator::tests::complex_frame_uses_solid_box ... ok [INFO] [stdout] test style_generator::tests::dark_frame_uses_white_text ... ok [INFO] [stdout] test style_generator::tests::contrast_ratio_is_symmetric ... ok [INFO] [stdout] test style_generator::tests::low_contrast_pair_fails_aa ... ok [INFO] [stdout] test style_generator::tests::complex_frame_enables_text_outline ... ok [INFO] [stdout] test style_generator::tests::identical_colours_minimum_contrast ... ok [INFO] [stdout] test style_generator::tests::bright_frame_uses_dark_text ... ok [INFO] [stdout] test style_generator::tests::centre_zone_is_avoided_when_alternatives_exist ... ok [INFO] [stdout] test style_generator::tests::meets_wcag_aaa_for_black_and_white_pair ... ok [INFO] [stdout] test style_generator::tests::preferred_zone_falls_back_to_bottom_third ... ok [INFO] [stdout] test style_generator::tests::reason_string_is_non_empty ... ok [INFO] [stdout] test style_generator::tests::red_has_expected_luminance ... ok [INFO] [stdout] test style_generator::tests::white_on_black_maximum_contrast ... ok [INFO] [stdout] test alignment::tests::round_trip_split_then_merge_preserves_text ... ok [INFO] [stdout] test caption_timing_adjuster::tests::stretch_factor_quarter_compresses_timestamps ... ok [INFO] [stdout] test style_presets::tests::test_all_presets_have_names ... ok [INFO] [stdout] test style_presets::tests::test_bbc_text_color_white ... ok [INFO] [stdout] test style_presets::tests::test_bbc_max_chars_per_line ... ok [INFO] [stdout] test style_presets::tests::test_contrast_ratio_positive ... ok [INFO] [stdout] test style_generator::tests::suggestion_contrast_ratio_at_least_one ... ok [INFO] [stdout] test style_generator::tests::white_on_black_meets_both_aa_and_aaa ... ok [INFO] [stdout] test style_presets::tests::test_netflix_preset_max_lines ... ok [INFO] [stdout] test translate::tests::test_language_name_known ... ok [INFO] [stdout] test style_presets::tests::test_netflix_preset_font_size ... ok [INFO] [stdout] test translate::tests::test_language_name_unknown ... ok [INFO] [stdout] test style_presets::tests::test_wcag_contrast_ratio_aaaa ... ok [INFO] [stdout] test style_presets::tests::test_wcag_fully_opaque_background ... ok [INFO] [stdout] test translate::tests::test_translate_stub_unknown_lang ... ok [INFO] [stdout] test style_generator::tests::suggestion_always_meets_wcag_aa ... ok [INFO] [stdout] test translate::tests::test_translate_track_preserves_timing ... ok [INFO] [stdout] test wcag::tests::compliance_score_one_a_violation ... ok [INFO] [stdout] test wcag::tests::compliance_score_no_violations ... ok [INFO] [stdout] test wcag::tests::compliance_score_one_aa_violation ... ok [INFO] [stdout] test wcag::tests::coverage_fails_large_leading_gap ... ok [INFO] [stdout] test wcag::tests::coverage_fails_on_large_interior_gap ... ok [INFO] [stdout] test wcag::tests::coverage_passes_with_no_gaps ... ok [INFO] [stdout] test wcag::tests::coverage_passes_small_trailing_gap ... ok [INFO] [stdout] test wcag::tests::cps_fails_fast_text ... ok [INFO] [stdout] test wcag::tests::gap_duration_multiple_violations ... ok [INFO] [stdout] test wcag::tests::gap_duration_detects_violation ... ok [INFO] [stdout] test wcag::tests::live_latency_fails_over_limit ... ok [INFO] [stdout] test wcag::tests::cps_passes_slow_text ... ok [INFO] [stdout] test wcag::tests::gap_duration_no_violations_when_close ... ok [INFO] [stdout] test wcag::tests::compliance_score_never_below_zero ... ok [INFO] [stdout] test wcag::tests::coverage_fails_on_empty_blocks_with_long_content ... ok [INFO] [stdout] test wcag::tests::cps_zero_duration_passes ... ok [INFO] [stdout] test translate::tests::test_translate_stub_format ... ok [INFO] [stdout] test translate::tests::test_translate_stub_empty_text ... ok [INFO] [stdout] test translate::tests::test_translate_stub_uppercase_lang_normalised ... ok [INFO] [stdout] test style_presets::tests::test_all_presets_bottom_centred ... ok [INFO] [stdout] test wcag::tests::live_latency_passes_at_limit ... ok [INFO] [stdout] test wcag::tests::min_duration_passes_at_exactly_min ... ok [INFO] [stdout] test wcag::tests::live_latency_passes_under_limit ... ok [INFO] [stdout] test wcag::tests::run_all_checks_clean_content ... ok [INFO] [stdout] test wcag::tests::min_duration_fails_short_block ... ok [INFO] [stdout] test wcag::tests::wcag_level_ordering ... ok [INFO] [stdout] test wcag::tests::sign_language_always_none ... ok [INFO] [stdout] test wcag::tests::min_duration_passes ... ok [INFO] [stdout] test wcag::tests::wcag_violation_display ... ok [INFO] [stdout] test wcag::tests::run_all_checks_detects_short_block ... ok [INFO] [stdout] test style_generator::tests::white_has_unit_luminance ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 470 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s [INFO] [stdout] [INFO] [stderr] Doc-tests oximedia_caption_gen [INFO] [stdout] [INFO] [stdout] running 13 tests [INFO] [stdout] test src/multilang.rs - multilang::MultiLangCaptionBuilder (line 226) - compile ... ok [INFO] [stdout] test src/reading_speed.rs - reading_speed (line 17) ... ok [INFO] [stdout] test src/translate.rs - translate (line 10) ... ok [INFO] [stdout] test src/caption_diff.rs - caption_diff (line 11) ... ok [INFO] [stdout] test src/autopunct.rs - autopunct (line 15) ... ok [INFO] [stdout] test src/burn_in.rs - burn_in (line 9) ... ok [INFO] [stdout] test src/style_generator.rs - style_generator (line 14) ... ok [INFO] [stdout] test src/caption_style_guide.rs - caption_style_guide (line 16) ... ok [INFO] [stdout] test src/phoneme_timing.rs - phoneme_timing (line 11) ... ok [INFO] [stdout] test src/multi_language_sync.rs - multi_language_sync (line 20) ... ok [INFO] [stdout] test src/style_presets.rs - style_presets (line 14) ... ok [INFO] [stdout] test src/profanity.rs - profanity (line 9) ... ok [INFO] [stdout] test src/caption_format_adapter.rs - caption_format_adapter (line 14) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.78s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "10c3525365c20f8532f2544acdf8a5e035e76146a61db66479b9d146e616a0e0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "10c3525365c20f8532f2544acdf8a5e035e76146a61db66479b9d146e616a0e0", kill_on_drop: false }` [INFO] [stdout] 10c3525365c20f8532f2544acdf8a5e035e76146a61db66479b9d146e616a0e0