[INFO] fetching crate testty 0.9.1...
[INFO] testing testty-0.9.1 against master#ec6f9a5b4413f74386267ef8efc93712c2ce6db6 for pr-155739-1
[INFO] extracting crate testty 0.9.1 into /workspace/builds/worker-2-tc1/source
[INFO] started tweaking crates.io crate testty 0.9.1
[INFO] removed 0 missing examples
[INFO] finished tweaking crates.io crate testty 0.9.1
[INFO] tweaked toml for crates.io crate testty 0.9.1 written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate testty 0.9.1 on toolchain ec6f9a5b4413f74386267ef8efc93712c2ce6db6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate testty 0.9.1 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" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded shared_library v0.1.9
[INFO] [stderr]   Downloaded vt100 v0.16.2
[INFO] [stderr]   Downloaded shell-words v1.1.1
[INFO] [stderr]   Downloaded portable-pty v0.9.0
[INFO] [stderr]   Downloaded serial2 v0.2.34
[INFO] [stderr]   Downloaded vte v0.15.0
[INFO] [stderr]   Downloaded nix v0.28.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 697aac0c50f5aa5d893baa3ded203b9edbab43dc3b78727aa73927ec637c024f
[INFO] running `Command { std: "docker" "start" "-a" "697aac0c50f5aa5d893baa3ded203b9edbab43dc3b78727aa73927ec637c024f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "697aac0c50f5aa5d893baa3ded203b9edbab43dc3b78727aa73927ec637c024f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "697aac0c50f5aa5d893baa3ded203b9edbab43dc3b78727aa73927ec637c024f", kill_on_drop: false }`
[INFO] [stdout] 697aac0c50f5aa5d893baa3ded203b9edbab43dc3b78727aa73927ec637c024f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] f23f35424d5da5cfc6f2e0591eadc177a1417d5be95532b0aea6a990a36e5f74
[INFO] running `Command { std: "docker" "start" "-a" "f23f35424d5da5cfc6f2e0591eadc177a1417d5be95532b0aea6a990a36e5f74", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling simd-adler32 v0.3.8
[INFO] [stderr]    Compiling adler2 v2.0.1
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling arrayvec v0.7.6
[INFO] [stderr]    Compiling weezl v0.1.12
[INFO] [stderr]    Compiling pxfm v0.1.28
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling nix v0.28.0
[INFO] [stderr]    Compiling color_quant v1.1.0
[INFO] [stderr]    Compiling shell-words v1.1.1
[INFO] [stderr]    Compiling byteorder-lite v0.1.0
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling fdeflate v0.3.7
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling gif v0.14.1
[INFO] [stderr]    Compiling vte v0.15.0
[INFO] [stderr]    Compiling vt100 v0.16.2
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling png v0.18.1
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling serial2 v0.2.34
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling filedescriptor v0.8.3
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling moxcms v0.8.1
[INFO] [stderr]    Compiling portable-pty v0.9.0
[INFO] [stderr]    Compiling image v0.25.10
[INFO] [stderr]    Compiling testty v0.9.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 25.52s
[INFO] running `Command { std: "docker" "inspect" "f23f35424d5da5cfc6f2e0591eadc177a1417d5be95532b0aea6a990a36e5f74", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f23f35424d5da5cfc6f2e0591eadc177a1417d5be95532b0aea6a990a36e5f74", kill_on_drop: false }`
[INFO] [stdout] f23f35424d5da5cfc6f2e0591eadc177a1417d5be95532b0aea6a990a36e5f74
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 6471afa0e887ca1f56c45a37001956bcd7005d6657104e9385b90759c0dc133a
[INFO] running `Command { std: "docker" "start" "-a" "6471afa0e887ca1f56c45a37001956bcd7005d6657104e9385b90759c0dc133a", kill_on_drop: false }`
[INFO] [stderr]    Compiling testty v0.9.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 3.94s
[INFO] running `Command { std: "docker" "inspect" "6471afa0e887ca1f56c45a37001956bcd7005d6657104e9385b90759c0dc133a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6471afa0e887ca1f56c45a37001956bcd7005d6657104e9385b90759c0dc133a", kill_on_drop: false }`
[INFO] [stdout] 6471afa0e887ca1f56c45a37001956bcd7005d6657104e9385b90759c0dc133a
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] fcf284c8f6e9ad7d4bad1fa2f536c45d2e689e48e2e21f8f8fbeebcf184d1ef6
[INFO] running `Command { std: "docker" "start" "-a" "fcf284c8f6e9ad7d4bad1fa2f536c45d2e689e48e2e21f8f8fbeebcf184d1ef6", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.09s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/testty-1ca2e35bb3102f13)
[INFO] [stdout] 
[INFO] [stdout] running 275 tests
[INFO] [stdout] test assertion::tests::assert_span_is_not_highlighted_for_plain_text ... ok
[INFO] [stdout] test assertion::tests::assert_not_visible_passes_when_absent ... ok
[INFO] [stdout] test assertion::tests::assert_match_count_passes_with_correct_count ... ok
[INFO] [stdout] test assertion::tests::match_match_count_returns_ok_for_correct_count ... ok
[INFO] [stdout] test assertion::tests::assert_span_is_highlighted_detects_bold ... ok
[INFO] [stdout] test assertion::tests::match_span_is_not_highlighted_returns_failure_when_missing ... ok
[INFO] [stdout] test assertion::tests::assert_text_in_region_passes_when_found ... ok
[INFO] [stdout] test assertion::tests::match_span_is_not_highlighted_returns_failure_for_bold ... ok
[INFO] [stdout] test assertion::tests::match_not_visible_returns_structured_failure_when_present ... ok
[INFO] [stdout] test assertion::tests::match_span_is_highlighted_returns_failure_for_plain_text ... ok
[INFO] [stdout] test assertion::tests::assert_text_has_fg_color_passes ... ok
[INFO] [stdout] test assertion::tests::assertion_failure_display_matches_legacy_panic_message ... ok
[INFO] [stdout] test assertion::tests::match_span_is_highlighted_returns_failure_when_missing ... ok
[INFO] [stdout] test assertion::tests::match_text_has_bg_color_returns_ok_when_match ... ok
[INFO] [stdout] test assertion::tests::match_text_in_region_returns_structured_failure_when_missing ... ok
[INFO] [stdout] test assertion::tests::match_text_has_fg_color_returns_failure_on_mismatch ... ok
[INFO] [stdout] test assertion::tests::match_match_count_returns_failure_for_wrong_count ... ok
[INFO] [stdout] test diff::tests::different_size_frames_mark_extra_cells ... ok
[INFO] [stdout] test assertion::tests::match_text_has_bg_color_returns_failure_when_text_missing ... ok
[INFO] [stdout] test assertion::tests::match_text_has_bg_color_returns_failure_on_mismatch ... ok
[INFO] [stdout] test assertion::tests::match_text_in_region_returns_ok_when_found ... ok
[INFO] [stdout] test assertion::tests::soft_assertions_empty_does_not_panic_on_drop ... ok
[INFO] [stdout] test assertion::tests::match_text_has_fg_color_returns_failure_when_text_missing ... ok
[INFO] [stdout] test assertion::tests::soft_assertions_into_failures_suppresses_drop_panic ... ok
[INFO] [stdout] test assertion::tests::soft_assertions_len_and_is_empty_track_recorded_failures ... ok
[INFO] [stdout] test diff::tests::out_of_bounds_cell_returns_none ... ok
[INFO] [stdout] test assertion::tests::soft_assertions_format_aggregated_message_lists_each_failure_in_order ... ok
[INFO] [stdout] test diff::tests::adjacent_changes_merge_into_region ... ok
[INFO] [stdout] test feature::tests::compute_frame_hash_empty_report ... ok
[INFO] [stdout] test feature::tests::feature_demo_builder_sets_metadata ... ok
[INFO] [stdout] test diff::tests::shrunk_frame_marks_removed_cols_as_changed ... ok
[INFO] [stdout] test diff::tests::shrunk_frame_marks_removed_rows_as_changed ... ok
[INFO] [stdout] test feature::tests::feature_demo_defaults_title_to_name ... ok
[INFO] [stdout] test feature::tests::feature_demo_default_mode_is_generate_if_stale ... ok
[INFO] [stdout] test feature::tests::compute_frame_hash_deterministic ... ok
[INFO] [stdout] test feature::tests::compute_frame_hash_differs_for_different_content ... ok
[INFO] [stdout] test feature::tests::feature_demo_defaults_to_feature_demo_gif_settings ... ok
[INFO] [stdout] test feature::tests::feature_demo_gif_output_dir_configurable ... ok
[INFO] [stdout] test feature::tests::feature_demo_no_gif_dir_means_none ... ok
[INFO] [stdout] test feature::tests::gif_status_cache_hit_returns_path ... ok
[INFO] [stdout] test feature::tests::gif_status_dir_create_failed_is_failure ... ok
[INFO] [stdout] test feature::tests::gif_status_generated_returns_path ... ok
[INFO] [stdout] test feature::tests::gif_status_no_output_dir_is_not_failure ... ok
[INFO] [stdout] test feature::tests::generate_gif_check_only_does_not_create_output_dir ... ok
[INFO] [stdout] test feature::tests::gif_status_fresh_exposes_path_and_is_not_stale ... ok
[INFO] [stdout] test feature::tests::generate_gif_check_only_returns_fresh_when_gif_and_sidecar_match ... ok
[INFO] [stdout] test feature::tests::gif_status_stale_exposes_path_and_is_stale ... ok
[INFO] [stdout] test feature::tests::normalize_tempfile_segments_preserves_non_tempfile_paths ... ok
[INFO] [stdout] test diff::tests::summary_single_col_format ... ok
[INFO] [stdout] test feature::tests::hash_sidecar_path_uses_dot_prefix_next_to_gif ... ok
[INFO] [stdout] test feature::tests::read_committed_hash_parses_trimmed_decimal ... ok
[INFO] [stdout] test feature::tests::gif_status_tape_execution_failed_is_failure ... ok
[INFO] [stdout] test feature::tests::normalized_frame_bytes_for_hash_removes_tempfile_directory_names ... ok
[INFO] [stdout] test feature::tests::gif_status_vhs_not_installed_is_not_failure ... ok
[INFO] [stdout] test feature::tests::read_committed_hash_returns_none_for_garbage ... ok
[INFO] [stdout] test feature::tests::vhs_missing_status_always_generate_is_hard_failure ... ok
[INFO] [stdout] test feature::tests::vhs_missing_status_check_only_is_benign_skip ... ok
[INFO] [stdout] test feature::tests::read_committed_hash_returns_none_for_missing_file ... ok
[INFO] [stdout] test feature::tests::vhs_missing_status_generate_if_stale_is_benign_skip ... ok
[INFO] [stdout] test feature::tests::feature_demo_gif_mode_configurable ... ok
[INFO] [stdout] test assertion::tests::assert_match_count_panics_with_wrong_count - should panic ... ok
[INFO] [stdout] test frame::tests::ansi_color_codes_are_parsed ... ok
[INFO] [stdout] test frame::tests::all_text_joins_rows ... ok
[INFO] [stdout] test diff::tests::summary_formats_human_readable_text ... ok
[INFO] [stdout] test frame::tests::ansi_index_to_rgb_standard_colors ... ok
[INFO] [stdout] test frame::tests::cell_text_returns_character ... ok
[INFO] [stdout] test frame::tests::bold_style_is_detected ... ok
[INFO] [stdout] test frame::tests::cell_text_returns_space_for_empty_cell ... ok
[INFO] [stdout] test frame::tests::find_text_in_region_filters_by_region ... ok
[INFO] [stdout] test assertion::tests::assert_text_has_fg_color_panics_on_mismatch - should panic ... ok
[INFO] [stdout] test diff::tests::single_cell_text_change_detected ... ok
[INFO] [stdout] test frame::tests::find_text_locates_multibyte_utf8_at_correct_column ... ok
[INFO] [stdout] test frame::tests::find_text_with_empty_needle_returns_empty ... ok
[INFO] [stdout] test frame::tests::dim_style_is_detected ... ok
[INFO] [stdout] test frame::tests::contents_formatted_roundtrips_colors ... ok
[INFO] [stdout] test frame::tests::new_frame_captures_plain_text ... ok
[INFO] [stdout] test assertion::tests::assert_not_visible_panics_when_present - should panic ... ok
[INFO] [stdout] test assertion::tests::soft_assertions_with_report_panics_when_no_capture_exists - should panic ... ok
[INFO] [stdout] test assertion::tests::assert_text_in_region_panics_when_not_found - should panic ... ok
[INFO] [stdout] test frame::tests::find_text_returns_all_matches ... ok
[INFO] [stdout] test frame::tests::text_in_region_extracts_substring ... ok
[INFO] [stdout] test journey::tests::journey_new_creates_empty ... ok
[INFO] [stdout] test frame::tests::row_text_trims_trailing_spaces ... ok
[INFO] [stdout] test journey::tests::journey_step_appends ... ok
[INFO] [stdout] test journey::tests::press_and_wait_produces_key_then_sleep ... ok
[INFO] [stdout] test journey::tests::startup_wait_presets_expose_documented_durations ... ok
[INFO] [stdout] test journey::tests::wait_for_startup_preset_uses_preset_durations ... ok
[INFO] [stdout] test journey::tests::wait_for_startup_produces_stable_frame_step ... ok
[INFO] [stdout] test locator::tests::has_bg_matches_exact_color ... ok
[INFO] [stdout] test locator::tests::is_highlighted_detects_background_color ... ok
[INFO] [stdout] test locator::tests::has_fg_matches_exact_color ... ok
[INFO] [stdout] test frame::tests::row_text_trims_trailing_empty_cells ... ok
[INFO] [stdout] test assertion::tests::soft_assertions_single_failure_panics_on_drop_with_message - should panic ... ok
[INFO] [stdout] test locator::tests::not_highlighted_when_plain ... ok
[INFO] [stdout] test proof::backend::tests::stub_backend_returns_error ... ok
[INFO] [stdout] test proof::backend::tests::stub_backend_succeeds ... ok
[INFO] [stdout] test frame::tests::ansi_index_to_rgb_grayscale_ramp ... ok
[INFO] [stdout] test journey::tests::journey_with_description_sets_description ... ok
[INFO] [stdout] test journey::tests::navigate_with_key_produces_press_then_wait ... ok
[INFO] [stdout] test locator::tests::is_highlighted_detects_bold ... ok
[INFO] [stdout] test journey::tests::type_and_confirm_produces_write_then_enter ... ok
[INFO] [stdout] test proof::frame_text::tests::frame_text_backend_produces_same_output_as_to_annotated_text ... ok
[INFO] [stdout] test frame::tests::row_text_skips_wide_character_continuation_cells ... ok
[INFO] [stdout] test journey::tests::capture_labeled_produces_capture_step ... ok
[INFO] [stdout] test proof::frame_text::tests::save_dispatches_through_backend_trait ... ok
[INFO] [stdout] test journey::tests::wait_for_startup_default_matches_default_preset ... ok
[INFO] [stdout] test journey::tests::wait_for_startup_raw_args_route_through_custom_preset ... ok
[INFO] [stdout] test proof::frame_text::tests::frame_text_backend_writes_valid_file ... ok
[INFO] [stdout] test proof::gif::tests::gif_backend_custom_delay_clamped ... ok
[INFO] [stdout] test diff::tests::identical_frames_produce_no_changes ... ok
[INFO] [stdout] test proof::gif::tests::gif_backend_default_delay ... ok
[INFO] [stdout] test proof::html::tests::escape_html_handles_special_chars ... ok
[INFO] [stdout] test proof::gif::tests::gif_backend_errors_on_empty_report ... ok
[INFO] [stdout] test proof::html::tests::html_backend_writes_file ... ok
[INFO] [stdout] test proof::html::tests::html_column_ruler_renders_hundreds_row_past_column_99 ... ok
[INFO] [stdout] test proof::gif::tests::gif_backend_single_frame_succeeds ... ok
[INFO] [stdout] test proof::html::tests::html_highlight_limit_classifies_expected_variants ... ok
[INFO] [stdout] test proof::html::tests::html_format_span_includes_actual_fg_bg_and_style ... ok
[INFO] [stdout] test proof::html::tests::html_column_ruler_uses_terminal_cell_width_for_wide_glyphs ... ok
[INFO] [stdout] test diff::tests::style_change_detected ... ok
[INFO] [stdout] test proof::html::tests::html_escapes_scenario_name_in_header ... ok
[INFO] [stdout] test proof::html::tests::html_column_ruler_omits_hundreds_row_under_column_100 ... ok
[INFO] [stdout] test proof::html::tests::html_format_span_omits_unset_color_and_style_fields ... ok
[INFO] [stdout] test proof::html::tests::html_contains_embedded_images ... ok
[INFO] [stdout] test proof::html::tests::html_highlights_needle_occurrences_in_frame_excerpt ... ok
[INFO] [stdout] test proof::html::tests::html_pads_partially_blank_region_to_full_width ... ok
[INFO] [stdout] test proof::html::tests::html_contains_assertion_results ... ok
[INFO] [stdout] test proof::html::tests::html_renders_all_blank_region_with_full_dimensions ... ok
[INFO] [stdout] test proof::report::tests::add_assertion_attaches_to_labeled_capture ... ok
[INFO] [stdout] test proof::html::tests::html_frame_excerpt_uses_region_offsets_for_row_gutter ... ok
[INFO] [stdout] test proof::report::tests::add_assertion_returns_false_for_unknown_label ... ok
[INFO] [stdout] test proof::html::tests::html_first_match_only_expectation_highlights_only_first_occurrence ... ok
[INFO] [stdout] test proof::html::tests::html_highlights_overlapping_needle_matches ... ok
[INFO] [stdout] test proof::report::tests::annotated_text_contains_scenario_name ... ok
[INFO] [stdout] test proof::report::tests::annotated_text_contains_step_labels_and_descriptions ... ok
[INFO] [stdout] test proof::report::tests::annotated_text_contains_assertion_markers ... ok
[INFO] [stdout] test proof::report::tests::annotated_text_indents_multiline_assertion_descriptions ... ok
[INFO] [stdout] test proof::report::tests::annotated_text_contains_frame_content ... ok
[INFO] [stdout] test proof::html::tests::html_renders_color_expectation_with_rgb ... ok
[INFO] [stdout] test proof::html::tests::html_renders_adjacent_needle_matches_as_separate_spans ... ok
[INFO] [stdout] test proof::html::tests::html_renders_match_count_expectation ... ok
[INFO] [stdout] test proof::html::tests::html_renders_matched_spans_when_present ... ok
[INFO] [stdout] test proof::report::tests::no_diff_for_single_capture ... ok
[INFO] [stdout] test proof::html::tests::html_renders_structured_failure_expected_and_region ... ok
[INFO] [stdout] test proof::report::tests::proof_capture_stores_dimensions ... ok
[INFO] [stdout] test proof::report::tests::record_soft_failure_returns_false_without_captures ... ok
[INFO] [stdout] test proof::strip::tests::empty_report_produces_minimal_strip ... ok
[INFO] [stdout] test proof::report::tests::add_assertion_targets_specific_capture ... ok
[INFO] [stdout] test proof::report::tests::record_soft_failure_keeps_description_single_line_for_multiline_message ... ok
[INFO] [stdout] test proof::report::tests::soft_assertions_attach_each_failure_to_active_capture ... ok
[INFO] [stdout] test recipe::tests::expect_instruction_visible_finds_text ... ok
[INFO] [stdout] test recipe::tests::expect_not_visible_passes_when_absent ... ok
[INFO] [stdout] test proof::html::tests::html_is_self_contained ... ok
[INFO] [stdout] test proof::report::tests::frame_bytes_preserves_style_for_diff ... ok
[INFO] [stdout] test recipe::tests::expect_status_message_finds_anywhere ... ok
[INFO] [stdout] test proof::report::tests::auto_diff_computed_between_consecutive_captures ... ok
[INFO] [stdout] test recipe::tests::expect_selected_tab_passes_for_bold_tab ... ok
[INFO] [stdout] test proof::report::tests::record_soft_failure_attaches_to_latest_capture ... ok
[INFO] [stdout] test recipe::tests::expect_selected_tab_panics_when_not_highlighted - should panic ... ok
[INFO] [stdout] test proof::html::tests::html_legacy_assertions_have_no_failure_detail ... ok
[INFO] [stdout] test proof::html::tests::html_contains_step_cards ... ok
[INFO] [stdout] test recipe::tests::expect_unselected_tab_passes_for_plain_tab ... ok
[INFO] [stdout] test recipe::tests::match_dialog_title_returns_ok_when_in_upper_region ... ok
[INFO] [stdout] test recipe::tests::match_keybinding_hint_returns_ok_when_in_footer ... ok
[INFO] [stdout] test recipe::tests::match_footer_action_returns_failure_when_missing ... ok
[INFO] [stdout] test recipe::tests::match_not_visible_returns_failure_when_present ... ok
[INFO] [stdout] test recipe::tests::match_selected_tab_failure_is_scoped_to_header_region ... ok
[INFO] [stdout] test recipe::tests::match_selected_tab_returns_failure_when_label_missing_from_header ... ok
[INFO] [stdout] test proof::report::tests::proof_report_collects_captures ... ok
[INFO] [stdout] test recipe::tests::match_selected_tab_returns_failure_when_not_highlighted ... ok
[INFO] [stdout] test recipe::tests::match_selected_tab_inspects_header_occurrence_when_label_repeats_in_body ... ok
[INFO] [stdout] test recipe::tests::match_recipes_compose_with_soft_assertions ... ok
[INFO] [stdout] test region::tests::contains_checks_bounds ... ok
[INFO] [stdout] test recipe::tests::match_selected_tab_returns_ok_for_bold_tab ... ok
[INFO] [stdout] test recipe::tests::match_status_message_returns_ok_when_present ... ok
[INFO] [stdout] test region::tests::encloses_checks_full_containment ... ok
[INFO] [stdout] test region::tests::footer_is_last_row ... ok
[INFO] [stdout] test region::tests::full_region_covers_entire_grid ... ok
[INFO] [stdout] test region::tests::top_right_covers_right_half ... ok
[INFO] [stdout] test region::tests::percent_region_computes_correctly ... ok
[INFO] [stdout] test renderer::tests::brighten_component_clamps_at_255 ... ok
[INFO] [stdout] test renderer::tests::color_to_rgba_converts_correctly ... ok
[INFO] [stdout] test renderer::tests::dim_component_handles_zero ... ok
[INFO] [stdout] test renderer::tests::dim_component_reduces_brightness ... ok
[INFO] [stdout] test renderer::tests::lookup_glyph_returns_empty_for_unsupported ... ok
[INFO] [stdout] test renderer::tests::lookup_glyph_returns_known_ascii ... ok
[INFO] [stdout] test recipe::tests::match_unselected_tab_returns_ok_for_plain_tab ... ok
[INFO] [stdout] test recipe::tests::match_unselected_tab_inspects_header_occurrence_when_label_repeats_in_body ... ok
[INFO] [stdout] test recipe::tests::match_unselected_tab_failure_is_scoped_to_header_region ... ok
[INFO] [stdout] test frame::tests::row_text_preserves_blank_columns_between_runs ... ok
[INFO] [stdout] test region::tests::top_row_spans_full_width_one_row ... ok
[INFO] [stdout] test proof::strip::tests::strip_width_matches_widest_frame ... ok
[INFO] [stdout] test renderer::tests::lookup_glyph_returns_box_drawing ... ok
[INFO] [stdout] test recipe::tests::match_instruction_visible_returns_failure_when_absent ... ok
[INFO] [stdout] test renderer::tests::render_bold_brightens_foreground ... ok
[INFO] [stdout] test renderer::tests::render_dim_darkens_foreground ... ok
[INFO] [stdout] test recipe::tests::match_unselected_tab_returns_failure_when_highlighted ... ok
[INFO] [stdout] test renderer::tests::render_inverse_swaps_colors ... ok
[INFO] [stdout] test proof::strip::tests::strip_backend_writes_valid_png ... ok
[INFO] [stdout] test renderer::tests::render_plain_cell_has_correct_background ... ok
[INFO] [stdout] test scenario::tests::eventually_loop_clamps_final_sleep_to_remaining_budget ... ok
[INFO] [stdout] test scenario::tests::scenario_builder_chains_steps ... ok
[INFO] [stdout] test scenario::tests::scenario_capture_labeled_adds_step ... ok
[INFO] [stdout] test scenario::tests::eventually_loop_returns_last_failure_on_timeout ... ok
[INFO] [stdout] test scenario::tests::eventually_loop_returns_ok_after_predicate_succeeds ... ok
[INFO] [stdout] test scenario::tests::scenario_compiles_to_vhs_tape ... ok
[INFO] [stdout] test scenario::tests::scenario_compose_appends_journey_steps ... ok
[INFO] [stdout] test session::tests::key_to_bytes_known_keys ... ok
[INFO] [stdout] test scenario::tests::scenario_compose_preserves_existing_steps ... ok
[INFO] [stdout] test session::tests::key_to_bytes_backtab_sends_csi_z ... ok
[INFO] [stdout] test session::tests::key_to_bytes_returns_ctrl_a ... ok
[INFO] [stdout] test session::tests::key_to_bytes_ctrl_multi_char_falls_through ... ok
[INFO] [stdout] test session::tests::key_to_bytes_ctrl_non_alpha_falls_through ... ok
[INFO] [stdout] test renderer::tests::render_to_image_small_terminal ... ok
[INFO] [stdout] test session::tests::pty_session_builder_args_appends_across_calls ... ok
[INFO] [stdout] test session::tests::pty_session_builder_forwards_args ... ok
[INFO] [stdout] test snapshot::tests::frame_snapshot_matches_identical_content ... ok
[INFO] [stdout] test snapshot::tests::frame_snapshot_writes_baseline_when_update_mode_override_is_active ... ok
[INFO] [stdout] test snapshot::tests::pixel_distance_identical_is_zero ... ok
[INFO] [stdout] test snapshot::tests::pixel_distance_ignores_alpha ... ok
[INFO] [stdout] test snapshot::tests::pixel_distance_opposite_colors ... ok
[INFO] [stdout] test snapshot::tests::frame_snapshot_returns_missing_baseline_error_outside_update_mode ... ok
[INFO] [stdout] test snapshot::tests::assert_snapshot_matches_writes_baseline_when_update_mode_override_is_active ... ok
[INFO] [stdout] test snapshot::tests::frame_snapshot_detects_mismatch ... ok
[INFO] [stdout] test snapshot::tests::snapshot_config_with_custom_thresholds ... ok
[INFO] [stdout] test session::tests::key_to_bytes_unknown_key_returns_raw_bytes ... ok
[INFO] [stdout] test snapshot::tests::snapshot_config_default_update_env_var_is_tui_test_update ... ok
[INFO] [stdout] test snapshot::tests::snapshot_config_default_has_no_update_mode_override ... ok
[INFO] [stdout] test session::tests::key_to_bytes_returns_ctrl_z ... ok
[INFO] [stdout] test snapshot::tests::snapshot_config_with_update_env_var_overrides_default ... ok
[INFO] [stdout] test renderer::tests::render_colored_cell_uses_ansi_color ... ok
[INFO] [stdout] test proof::report::tests::frame_bytes_stores_formatted_output ... ok
[INFO] [stdout] test snapshot::tests::snapshot_config_with_update_mode_sets_override ... ok
[INFO] [stdout] test step::tests::capture_labeled_stores_label_and_description ... ok
[INFO] [stdout] test proof::strip::tests::strip_of_two_captures_is_taller_than_single_frame ... ok
[INFO] [stdout] test step::tests::eventually_debug_redacts_predicate_body ... ok
[INFO] [stdout] test step::tests::sleep_ms_converts_to_duration ... ok
[INFO] [stdout] test step::tests::viewing_pause_stores_duration ... ok
[INFO] [stdout] test step::tests::viewing_pause_ms_converts_to_duration ... ok
[INFO] [stdout] test vhs::tests::compile_step_sleep_uses_milliseconds_when_fractional ... ok
[INFO] [stdout] test vhs::tests::compile_step_sleep_uses_seconds_when_even ... ok
[INFO] [stdout] test vhs::tests::compile_step_viewing_pause_emits_sleep_milliseconds ... ok
[INFO] [stdout] test vhs::tests::compile_step_wait_for_text_formats_fractional_timeout_as_milliseconds ... ok
[INFO] [stdout] test vhs::tests::compile_step_viewing_pause_emits_sleep_seconds ... ok
[INFO] [stdout] test vhs::tests::compile_tape_clears_terminal_and_launches_binary_before_show ... ok
[INFO] [stdout] test vhs::tests::compile_tape_escapes_env_value_with_single_quote ... ok
[INFO] [stdout] test vhs::tests::compile_step_wait_for_text_emits_wait_screen_with_regex ... ok
[INFO] [stdout] test vhs::tests::compile_step_wait_for_text_escapes_regex_metacharacters ... ok
[INFO] [stdout] test vhs::tests::compile_tape_includes_env_vars ... ok
[INFO] [stdout] test step::tests::write_text_stores_content ... ok
[INFO] [stdout] test step::tests::wait_for_text_stores_needle_and_timeout ... ok
[INFO] [stdout] test vhs::tests::compile_tape_includes_header_settings ... ok
[INFO] [stdout] test vhs::tests::compile_step_eventually_emits_sleep_seconds_for_even_timeout ... ok
[INFO] [stdout] test vhs::tests::compile_step_eventually_emits_sleep_milliseconds_for_fractional_timeout ... ok
[INFO] [stdout] test vhs::tests::compile_tape_shell_quotes_binary_path ... ok
[INFO] [stdout] test vhs::tests::default_settings_match_legacy_constants ... ok
[INFO] [stdout] test vhs::tests::escape_shell_single_quote_wraps_internal_quotes ... ok
[INFO] [stdout] test vhs::tests::escape_vhs_regex_escapes_metacharacters ... ok
[INFO] [stdout] test vhs::tests::compile_tape_shell_quotes_binary_path_with_spaces ... ok
[INFO] [stdout] test vhs::tests::feature_demo_settings_have_expected_values ... ok
[INFO] [stdout] test vhs::tests::escape_vhs_double_quote_escapes_quotes_and_backslashes ... ok
[INFO] [stdout] test vhs::tests::format_vhs_duration_uses_milliseconds_for_fractional ... ok
[INFO] [stdout] test vhs::tests::format_vhs_duration_uses_seconds_for_even_multiples ... ok
[INFO] [stdout] test vhs::tests::from_scenario_with_settings_applies_feature_demo ... ok
[INFO] [stdout] test vhs::tests::from_scenario_with_settings_omits_empty_theme ... ok
[INFO] [stdout] test vhs::tests::compile_tape_includes_screenshot ... ok
[INFO] [stdout] test vhs::tests::key_to_vhs_command_maps_common_keys ... ok
[INFO] [stdout] test vhs::tests::from_scenario_with_settings_omits_zero_framerate ... ok
[INFO] [stdout] test step::tests::eventually_stores_timeout_poll_and_callable_predicate ... ok
[INFO] [stdout] test proof::report::tests::identical_captures_produce_identical_diff ... ok
[INFO] [stdout] test proof::html::tests::html_contains_diff_summaries ... ok
[INFO] [stdout] test proof::gif::tests::gif_backend_writes_valid_gif ... ok
[INFO] [stdout] test renderer::tests::render_to_image_produces_correct_dimensions ... ok
[INFO] [stdout] test session::tests::wait_for_stable_frame_returns_after_content_stabilizes ... ok
[INFO] [stdout] test session::tests::wait_for_stable_frame_times_out_when_no_output ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 275 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.98s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests testty
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test src/feature.rs - feature::FeatureDemo (line 174) ... ignored
[INFO] [stdout] test src/lib.rs - (line 9) - compile ... ok
[INFO] [stdout] test src/prelude.rs - prelude (line 3) - compile ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 0.69s; merged doctests compilation took 0.67s
[INFO] running `Command { std: "docker" "inspect" "fcf284c8f6e9ad7d4bad1fa2f536c45d2e689e48e2e21f8f8fbeebcf184d1ef6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "fcf284c8f6e9ad7d4bad1fa2f536c45d2e689e48e2e21f8f8fbeebcf184d1ef6", kill_on_drop: false }`
[INFO] [stdout] fcf284c8f6e9ad7d4bad1fa2f536c45d2e689e48e2e21f8f8fbeebcf184d1ef6
