[INFO] fetching crate skylode-tui 0.2.0...
[INFO] testing skylode-tui-0.2.0 against 1.100.0-beta.1 for beta-1.100-2
[INFO] extracting crate skylode-tui 0.2.0 into /workspace/builds/worker-7-tc2/source
[INFO] started tweaking crates.io crate skylode-tui 0.2.0
[INFO] finished tweaking crates.io crate skylode-tui 0.2.0
[INFO] tweaked toml for crates.io crate skylode-tui 0.2.0 written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate skylode-tui 0.2.0 on toolchain 1.100.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate skylode-tui 0.2.0 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04
[INFO] running `Command { std: "docker" "start" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04", 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" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04", 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" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling quote v1.0.46
[INFO] [stderr]    Compiling unicode-segmentation v1.13.3
[INFO] [stderr]    Compiling bitflags v2.13.1
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling either v1.16.0
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling static_assertions v1.1.0
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling unicode-width v0.2.2
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling lru v0.18.1
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling zerocopy v0.8.54
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling compact_str v0.9.1
[INFO] [stderr]    Compiling critical-section v1.2.0
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling mio v1.2.2
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling thread_local v1.1.10
[INFO] [stderr]    Compiling object v0.37.3
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]    Compiling owo-colors v4.3.0
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling num_threads v0.1.7
[INFO] [stderr]    Compiling line-clipping v0.3.7
[INFO] [stderr]    Compiling syn v2.0.118
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling time v0.3.53
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling color-spantrace v0.3.0
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling gimli v0.32.3
[INFO] [stderr]    Compiling eyre v0.6.12
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]    Compiling indenter v0.3.4
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling rustc-demangle v0.1.28
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling rand v0.10.2
[INFO] [stderr]    Compiling directories v6.0.0
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling tracing-error v0.2.1
[INFO] [stderr]    Compiling addr2line v0.25.1
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling backtrace v0.3.76
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling color-eyre v0.6.5
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling strum_macros v0.28.0
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling strum v0.28.0
[INFO] [stderr]    Compiling ratatui-core v0.1.2
[INFO] [stderr]    Compiling rand_chacha v0.10.0
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling skylode-core v0.2.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling ratatui-widgets v0.3.2
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.2
[INFO] [stderr]    Compiling ratatui-macros v0.7.2
[INFO] [stderr]    Compiling ratatui v0.30.2
[INFO] [stderr]    Compiling skylode-tui v0.2.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 32.75s
[INFO] running `Command { std: "docker" "inspect" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04", 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" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling skylode-tui v0.2.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 9.89s
[INFO] running `Command { std: "docker" "inspect" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04", 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" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.33s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/build/skylode-tui/e2bd7bf1502b1ada/out/skylode-e2bd7bf1502b1ada)
[INFO] [stdout] 
[INFO] [stdout] running 666 tests
[INFO] [stdout] test announce::tests::a_big_blast_groups_its_thousands_like_every_other_number ... ok
[INFO] [stdout] test announce::tests::a_lapsed_boost_says_so_without_alarm ... ok
[INFO] [stdout] test announce::tests::a_level_that_pays_nothing_is_still_announced ... ok
[INFO] [stdout] test announce::tests::a_level_up_names_the_level_and_where_to_claim_it ... ok
[INFO] [stdout] test announce::tests::a_blast_counts_the_blocks_it_broke_and_not_the_cells_it_covered ... ok
[INFO] [stdout] test announce::tests::a_refill_does_not_name_the_mine_the_player_is_standing_in ... ok
[INFO] [stdout] test announce::tests::a_level_up_is_the_only_major_and_its_tone_does_not_say_so ... ok
[INFO] [stdout] test announce::tests::a_world_level_says_what_opened_instead_of_a_bundle ... ok
[INFO] [stdout] test announce::tests::an_excavator_names_the_denomination_it_substituted ... ok
[INFO] [stdout] test announce::tests::only_the_news_the_screen_is_not_already_showing_reaches_the_slot ... ok
[INFO] [stdout] test app::dev_tests::a_menu_stacked_without_a_state_closes_itself ... ok
[INFO] [stdout] test app::dev_tests::free_upgrades_buy_a_rung_the_purse_could_never_afford ... ok
[INFO] [stdout] test app::dev_tests::giving_everything_credits_all_fifteen_piles ... ok
[INFO] [stdout] test app::dev_tests::granting_charges_fills_the_reserve ... ok
[INFO] [stdout] test app::dev_tests::a_plain_session_has_no_menu_and_an_asked_for_one_does ... ok
[INFO] [stdout] test app::dev_tests::the_gestures_walk_the_rows_and_turn_the_value_under_the_cursor ... ok
[INFO] [stdout] test app::dev_tests::the_dialled_values_survive_the_box_being_closed ... ok
[INFO] [stdout] test app::dev_tests::the_left_gesture_turns_the_value_down ... ok
[INFO] [stdout] test app::dev_tests::the_menu_opens_stacks_and_closes ... ok
[INFO] [stdout] test app::dev_tests::a_free_purchase_is_still_refused_on_a_mine_the_run_never_entered ... ok
[INFO] [stdout] test app::dev_tests::setting_the_rank_moves_it_without_wiping_the_run ... ok
[INFO] [stdout] test app::dev_tests::a_skip_with_nothing_behind_it_says_so ... ok
[INFO] [stdout] test app::tests::a_boost_gesture_does_nothing_on_another_screen ... ok
[INFO] [stdout] test app::dev_tests::giving_a_material_credits_the_pile_the_row_names ... ok
[INFO] [stdout] test app::dev_tests::skipping_time_credits_the_absence_through_the_shipped_accrual ... ok
[INFO] [stdout] test app::tests::a_chain_that_costs_power_asks_before_it_buys ... ok
[INFO] [stdout] test app::tests::a_confirm_the_run_cannot_pay_refuses_at_the_till ... ok
[INFO] [stdout] test app::dev_tests::the_open_menu_is_drawn_over_the_screen_behind_it ... ok
[INFO] [stdout] test app::tests::a_fresh_session_points_at_the_mine_it_is_standing_in ... ok
[INFO] [stdout] test app::tests::a_chain_that_stops_at_the_end_of_the_ladder_remembers_nothing ... ok
[INFO] [stdout] test app::tests::a_held_key_with_auto_repeat_toggles_the_latch_exactly_once ... ok
[INFO] [stdout] test app::tests::a_blast_does_not_follow_the_player_into_the_next_mine ... ok
[INFO] [stdout] test app::dev_tests::the_value_only_rows_report_themselves_on_confirm ... ok
[INFO] [stdout] test app::tests::a_latched_swing_pauses_off_the_mine_screen_and_resumes_on_return ... ok
[INFO] [stdout] test app::tests::a_bought_enchant_level_is_announced_by_its_new_roman_numeral ... ok
[INFO] [stdout] test app::tests::a_charge_no_redstone_covers_is_refused_without_spending ... ok
[INFO] [stdout] test app::dev_tests::free_upgrades_climb_an_enchant_to_the_worlds_cap ... ok
[INFO] [stdout] test app::tests::a_locked_mine_is_refused_with_its_reason_and_does_not_move_the_player ... ok
[INFO] [stdout] test app::dev_tests::aiming_a_free_purchase_at_where_you_already_stand_is_not_a_refusal ... ok
[INFO] [stdout] test app::tests::a_list_gesture_reaches_exactly_the_cursor_of_the_open_screen ... ok
[INFO] [stdout] test app::dev_tests::free_upgrades_stop_at_the_cap_and_not_at_the_purse ... ok
[INFO] [stdout] test app::tests::a_new_session_opens_on_the_mine_tab_with_nothing_stacked ... ok
[INFO] [stdout] test app::dev_tests::setting_the_level_moves_the_run_to_it ... ok
[INFO] [stdout] test app::dev_tests::giving_experience_announces_the_levels_it_crosses ... ok
[INFO] [stdout] test app::tests::a_healthy_session_draws_no_banner_and_keeps_the_row ... ok
[INFO] [stdout] test app::dev_tests::flipping_the_free_toggle_announces_it ... ok
[INFO] [stdout] test app::dev_tests::free_upgrades_climb_both_tracks_of_a_visited_mine ... ok
[INFO] [stdout] test app::dev_tests::the_tab_row_carries_the_marker_only_when_the_menu_exists ... ok
[INFO] [stdout] test app::tests::a_refused_enchant_is_remembered_by_the_level_it_was_refused_at ... ok
[INFO] [stdout] test app::tests::a_release_cuts_the_window_early_rather_than_taking_a_second_path ... ok
[INFO] [stdout] test app::tests::a_reported_release_makes_the_next_tap_immediate ... ok
[INFO] [stdout] test app::tests::a_refused_mine_track_is_remembered_by_the_level_it_was_refused_at ... ok
[INFO] [stdout] test app::tests::a_session_opens_on_the_run_it_was_handed ... ok
[INFO] [stdout] test app::tests::a_purchase_short_of_the_denomination_asks_for_a_conversion ... ok
[INFO] [stdout] test app::tests::a_crossed_level_shows_up_on_the_roadmap_rather_than_in_the_bag ... ok
[INFO] [stdout] test app::tests::a_pile_with_nothing_to_convert_toasts_instead_of_opening_a_dialog ... ok
[INFO] [stdout] test app::tests::a_refusal_of_the_denomination_is_remembered_for_the_inventory_screen ... ok
[INFO] [stdout] test app::tests::a_refill_reaches_the_history_and_never_the_slot ... ok
[INFO] [stdout] test app::tests::a_mine_track_is_bought_for_the_mine_under_the_cursor ... ok
[INFO] [stdout] test app::tests::a_step_falls_due_once_every_twentieth_of_a_second ... ok
[INFO] [stdout] test app::tests::a_sub_tab_gesture_does_nothing_off_the_upgrades_screen ... ok
[INFO] [stdout] test app::tests::a_suspended_session_resynchronises_instead_of_replaying_the_arrears ... ok
[INFO] [stdout] test app::tests::a_stacked_dialog_takes_the_gesture_before_the_screen_below_does ... ok
[INFO] [stdout] test app::tests::a_fresh_runs_mines_screen_lists_all_twelve_and_shuts_the_right_ones ... ok
[INFO] [stdout] test app::tests::a_shortage_the_inventory_cannot_fix_is_not_remembered ... ok
[INFO] [stdout] test app::tests::a_stacked_dialog_is_drawn_over_the_screen_it_was_opened_from ... ok
[INFO] [stdout] test app::tests::a_step_with_the_key_up_still_pays_the_auto_miner ... ok
[INFO] [stdout] test app::tests::a_spatial_proc_paints_a_blast_on_the_next_frame ... ok
[INFO] [stdout] test app::tests::a_standing_save_failure_yields_the_slot_to_a_toast_and_takes_it_back ... ok
[INFO] [stdout] test app::tests::a_late_wake_up_runs_every_step_it_owes ... ok
[INFO] [stdout] test app::tests::a_tap_starts_the_swing_and_the_next_tap_stops_it ... ok
[INFO] [stdout] test app::tests::adjusting_a_settings_row_changes_the_config_the_game_is_reading ... ok
[INFO] [stdout] test app::tests::a_wrong_word_neither_prestiges_nor_says_anything ... ok
[INFO] [stdout] test app::tests::a_typed_character_outside_the_confirm_changes_nothing ... ok
[INFO] [stdout] test app::tests::a_latched_swing_gives_up_once_the_player_has_clearly_left ... ok
[INFO] [stdout] test app::tests::an_affordable_preview_opens_the_confirm_on_an_empty_field ... ok
[INFO] [stdout] test app::tests::a_sweep_of_one_names_it_and_a_sweep_of_none_says_so ... ok
[INFO] [stdout] test app::tests::a_pass_with_nothing_due_asks_the_terminal_for_no_frame ... ok
[INFO] [stdout] test app::tests::an_ordinary_efficiency_step_is_bought_without_a_question ... ok
[INFO] [stdout] test app::tests::a_toast_is_drawn_over_the_screen_underneath ... ok
[INFO] [stdout] test app::tests::a_price_is_refused_in_the_denomination_the_pane_quotes_it_in ... ok
[INFO] [stdout] test app::tests::buy_max_on_an_unaffordable_enchant_track_stops_at_once ... ok
[INFO] [stdout] test app::tests::a_refusal_carrying_no_shortfall_still_says_which_loop_to_run ... ok
[INFO] [stdout] test app::tests::a_second_charge_extends_the_running_boost_and_is_worded_as_such ... ok
[INFO] [stdout] test app::tests::buy_max_on_a_penniless_run_names_the_ore_it_is_short_of ... ok
[INFO] [stdout] test app::tests::between_the_minimum_and_the_caps_the_interface_takes_the_whole_terminal ... ok
[INFO] [stdout] test app::tests::a_locked_run_may_read_the_preview_and_is_refused_at_the_gate ... ok
[INFO] [stdout] test app::tests::a_terminal_past_the_caps_is_a_centred_band_with_bare_margins ... ok
[INFO] [stdout] test app::tests::at_the_counted_size_the_band_is_the_whole_terminal ... ok
[INFO] [stdout] test app::tests::any_key_at_all_postpones_the_cutoff ... ok
[INFO] [stdout] test app::tests::buy_max_on_a_mine_track_spends_what_it_can_and_stops ... ok
[INFO] [stdout] test app::tests::a_toast_leaves_the_screen_once_its_moment_has_passed_and_stays_in_the_log ... ok
[INFO] [stdout] test app::tests::confirm_does_nothing_on_a_screen_that_owns_no_selection ... ok
[INFO] [stdout] test app::tests::compressing_by_hand_and_coming_back_completes_the_loop ... ok
[INFO] [stdout] test app::tests::an_unaffordable_enchant_is_refused_in_the_cores_own_words ... ok
[INFO] [stdout] test app::tests::declining_the_dip_closes_the_box_and_buys_nothing ... ok
[INFO] [stdout] test app::tests::converting_by_hand_moves_the_denominations_and_announces_it ... ok
[INFO] [stdout] test app::tests::declining_the_dip_goes_through_the_close_every_modal_shares ... ok
[INFO] [stdout] test app::tests::each_sub_tab_walks_only_its_own_list ... ok
[INFO] [stdout] test app::tests::entering_an_open_mine_switches_the_run_and_jumps_to_the_mine_screen ... ok
[INFO] [stdout] test app::tests::c_opens_the_dialog_on_the_row_under_the_cursor_at_one_unit ... ok
[INFO] [stdout] test app::tests::escaping_either_box_trades_nothing ... ok
[INFO] [stdout] test app::tests::esc_walks_back_to_the_mine_screen_from_every_tab ... ok
[INFO] [stdout] test app::tests::confirming_a_conversion_the_pile_can_no_longer_cover_refuses_and_closes ... ok
[INFO] [stdout] test app::tests::confirming_the_dip_buys_the_chain_and_announces_it_like_any_other ... ok
[INFO] [stdout] test app::tests::home_moves_only_the_cursor_of_the_screen_that_is_open ... ok
[INFO] [stdout] test app::tests::buy_max_takes_every_charge_the_redstone_covers ... ok
[INFO] [stdout] test app::tests::home_returns_the_history_to_its_newest_entry ... ok
[INFO] [stdout] test app::tests::c_walks_from_the_refused_preview_to_the_pile_it_named ... ok
[INFO] [stdout] test app::tests::enter_buys_the_chain_up_to_the_cursor_and_names_where_it_landed ... ok
[INFO] [stdout] test app::tests::enter_on_a_row_with_nothing_waiting_says_so ... ok
[INFO] [stdout] test app::tests::buying_a_charge_debits_the_redstone_and_banks_it ... ok
[INFO] [stdout] test app::tests::opening_and_closing_help_stacks_then_clears_the_modal ... ok
[INFO] [stdout] test app::tests::opening_settings_stacks_it_at_the_top_of_the_list ... ok
[INFO] [stdout] test app::tests::leaving_a_screen_with_esc_keeps_its_cursor ... ok
[INFO] [stdout] test app::tests::quit_raises_the_flag_the_loop_watches ... ok
[INFO] [stdout] test app::tests::escaping_the_dialog_converts_nothing ... ok
[INFO] [stdout] test app::tests::claim_all_empties_the_ladder_in_one_announcement ... ok
[INFO] [stdout] test app::tests::firing_a_charge_spends_it_and_starts_a_boost ... ok
[INFO] [stdout] test app::tests::r_restores_the_row_under_the_settings_caret ... ok
[INFO] [stdout] test app::tests::selecting_a_tab_jumps_straight_to_it ... ok
[INFO] [stdout] test app::tests::enter_claims_the_row_under_the_cursor_and_says_what_it_paid ... ok
[INFO] [stdout] test app::tests::r_outside_the_settings_screen_restores_nothing ... ok
[INFO] [stdout] test app::tests::next_and_prev_walk_the_ring ... ok
[INFO] [stdout] test app::tests::scrolling_a_history_that_has_announced_nothing_is_harmless ... ok
[INFO] [stdout] test app::tests::opening_the_confirm_forgets_a_refusal_the_run_has_outgrown ... ok
[INFO] [stdout] test app::tests::p_opens_the_preview_on_stats_and_nowhere_else ... ok
[INFO] [stdout] test app::tests::the_boost_list_has_no_cursor_to_move ... ok
[INFO] [stdout] test app::tests::enter_on_a_rung_already_owned_says_there_is_nothing_to_buy ... ok
[INFO] [stdout] test app::tests::selecting_a_tab_that_does_not_exist_leaves_the_screen_alone ... ok
[INFO] [stdout] test app::tests::the_confirm_captures_the_letters_the_ring_would_otherwise_claim ... ok
[INFO] [stdout] test app::tests::the_dial_does_not_move_past_a_ceiling_nobody_has_bought ... ok
[INFO] [stdout] test app::tests::firing_with_an_empty_reserve_refuses_and_starts_nothing ... ok
[INFO] [stdout] test app::tests::the_dial_leaves_the_run_where_it_found_it ... ok
[INFO] [stdout] test app::tests::the_field_takes_letters_erases_them_and_stops_at_the_words_length ... ok
[INFO] [stdout] test app::tests::help_draws_over_the_screen_it_was_opened_on ... ok
[INFO] [stdout] test app::tests::the_dip_caret_clamps_at_both_ends ... ok
[INFO] [stdout] test app::tests::the_history_cursor_only_moves_on_the_screen_that_owns_it ... ok
[INFO] [stdout] test app::tests::the_history_cursor_wraps_at_both_ends ... ok
[INFO] [stdout] test app::tests::the_first_esc_closes_the_box_and_the_second_leaves_the_screen ... ok
[INFO] [stdout] test app::tests::raw_redstone_that_was_never_compressed_arms_the_conversion_loop ... ok
[INFO] [stdout] test app::tests::the_hold_mode_reads_the_key_and_never_the_latch ... ok
[INFO] [stdout] test app::tests::the_mine_key_stays_held_until_its_window_closes ... ok
[INFO] [stdout] test app::tests::the_material_cursor_walks_the_table_and_wraps_at_both_ends ... ok
[INFO] [stdout] test app::tests::the_mine_key_records_an_edge_and_nothing_else ... ok
[INFO] [stdout] test app::tests::every_purchase_door_refuses_in_the_same_sentence ... ok
[INFO] [stdout] test app::tests::no_toast_means_nothing_is_overlaid ... ok
[INFO] [stdout] test app::tests::the_ring_wraps_in_both_directions ... ok
[INFO] [stdout] test app::tests::the_mines_cursor_walks_the_list_and_wraps_at_both_ends ... ok
[INFO] [stdout] test app::tests::the_settings_caret_wraps_past_either_end ... ok
[INFO] [stdout] test app::tests::the_roadmap_cursor_wraps_at_both_ends_and_home_returns_to_the_player ... ok
[INFO] [stdout] test app::tests::the_sub_tabs_and_the_rows_inside_them_are_both_rings ... ok
[INFO] [stdout] test app::tests::the_spinner_walks_and_clamps_between_one_and_the_pile ... ok
[INFO] [stdout] test app::tests::the_inventory_panel_names_the_refusal_on_its_own_row_and_no_other ... ok
[INFO] [stdout] test app::tests::the_selected_screen_is_the_one_drawn ... ok
[INFO] [stdout] test app::tests::the_box_and_the_panel_behind_it_quote_one_price ... ok
[INFO] [stdout] test app::tests::the_walk_with_nothing_refused_travels_and_moves_no_cursor ... ok
[INFO] [stdout] test app::tests::the_mine_tab_paints_coloured_cells ... ok
[INFO] [stdout] test app::tests::the_dip_box_draws_the_numbers_the_pane_behind_it_drew ... ok
[INFO] [stdout] test app::tests::the_tab_bar_fits_the_eighty_column_reference_width ... ok
[INFO] [stdout] test capability::tests::a_terminal_that_declares_a_palette_has_it_quoted_back ... ok
[INFO] [stdout] test capability::tests::a_terminal_that_declares_nothing_is_not_given_a_number_on_its_behalf ... ok
[INFO] [stdout] test app::tests::the_tab_bar_shows_all_six_tabs_with_their_digits ... ok
[INFO] [stdout] test app::tests::each_beat_of_the_flash_is_drawn_on_two_frames ... ok
[INFO] [stdout] test app::tests::the_claim_gestures_do_nothing_off_the_levels_screen ... ok
[INFO] [stdout] test capability::tests::detection_answers_something_the_screen_can_print ... ok
[INFO] [stdout] test config::tests::a_fresh_config_is_the_game_as_it_played_before_settings_existed ... ok
[INFO] [stdout] test config::tests::the_colour_rows_print_their_palette_size ... ok
[INFO] [stdout] test app::tests::the_confirm_is_drawn_over_the_screen_it_was_opened_from ... ok
[INFO] [stdout] test config::tests::every_toast_rung_says_how_long_it_actually_lasts ... ok
[INFO] [stdout] test config::tests::each_choice_prints_its_own_keys ... ok
[INFO] [stdout] test config::tests::the_default_binding_is_the_shift_arrows_the_footer_advertises ... ok
[INFO] [stdout] test app::tests::the_typed_word_trades_the_run_in_and_resets_the_front_end_with_it ... ok
[INFO] [stdout] test cursor::tests::a_list_wraps_at_both_ends_rather_than_stopping ... ok
[INFO] [stdout] test app::tests::upgrading_an_unvisited_mine_sends_the_player_there_instead ... ok
[INFO] [stdout] test config::tests::the_number_format_rows_read_as_the_number_they_produce ... ok
[INFO] [stdout] test config::tests::the_mining_rows_name_the_gesture_rather_than_the_mechanism ... ok
[INFO] [stdout] test config::tests::the_written_config_is_pinned ... ok
[INFO] [stdout] test cursor::tests::a_step_moves_one_row_in_either_direction ... ok
[INFO] [stdout] test cursor::tests::the_material_cursor_opens_on_the_first_row_of_the_table ... ok
[INFO] [stdout] test cursor::tests::a_session_opens_pointing_at_the_mine_it_is_standing_in ... ok
[INFO] [stdout] test config::tests::an_older_document_loads_with_the_new_preferences_defaulted ... ok
[INFO] [stdout] test config::tests::the_preferences_survive_a_round_trip_through_the_core ... ok
[INFO] [stdout] test cursor::tests::stepping_an_index_wraps_and_survives_an_empty_list ... ok
[INFO] [stdout] test cursor::tests::stepping_is_total_on_an_empty_list_and_an_unlisted_value ... ok
[INFO] [stdout] test cursor::tests::the_enchant_rows_are_the_six_the_shop_prices ... ok
[INFO] [stdout] test cursor::tests::the_mine_rows_are_every_mine_twice_in_a_row ... ok
[INFO] [stdout] test event::tests::a_producer_that_has_gone_does_not_close_the_channel ... ok
[INFO] [stdout] test event::tests::the_trait_and_the_inherent_method_answer_alike ... ok
[INFO] [stdout] test app::tests::the_wrong_denomination_is_refused_without_opening_the_confirm ... ok
[INFO] [stdout] test flash::tests::a_blast_in_a_new_mine_clears_what_the_old_one_left ... ok
[INFO] [stdout] test flash::tests::a_flash_does_not_paint_a_mine_it_did_not_happen_in ... ok
[INFO] [stdout] test flash::tests::a_blast_paints_every_cell_of_its_shape_holes_included ... ok
[INFO] [stdout] test flash::tests::a_fresh_buffer_is_about_no_mine_at_all ... ok
[INFO] [stdout] test event::tests::next_hands_back_what_the_thread_sent_in_order ... ok
[INFO] [stdout] test format::tests::a_mixed_total_names_both_denominations_in_the_order_they_are_paid ... ok
[INFO] [stdout] test cursor::tests::the_sub_tabs_wrap_in_both_directions ... ok
[INFO] [stdout] test format::tests::a_line_too_long_for_its_box_ends_on_an_ellipsis ... ok
[INFO] [stdout] test flash::tests::an_expired_cell_leaves_the_frame_and_stays_in_the_buffer ... ok
[INFO] [stdout] test format::tests::a_multiplier_is_printed_to_two_decimals ... ok
[INFO] [stdout] test format::tests::a_number_below_a_thousand_is_left_untouched ... ok
[INFO] [stdout] test format::tests::a_span_of_ticks_drops_its_seconds ... ok
[INFO] [stdout] test format::tests::a_span_of_ticks_reads_as_hours_and_minutes ... ok
[INFO] [stdout] test flash::tests::an_instant_from_before_the_blast_does_not_panic ... ok
[INFO] [stdout] test flash::tests::the_first_beat_outlasts_two_redraws ... ok
[INFO] [stdout] test format::tests::a_prestige_rank_is_roman_but_starts_at_zero ... ok
[INFO] [stdout] test app::tests::the_walk_lands_on_the_pile_the_refusal_named ... ok
[INFO] [stdout] test flash::tests::the_two_beats_meet_at_the_bright_boundary ... ok
[INFO] [stdout] test format::tests::a_rank_past_the_numerals_is_named_in_digits_rather_than_refused ... ok
[INFO] [stdout] test flash::tests::the_last_blast_owns_a_shared_cell_and_the_others_keep_their_own_beat ... ok
[INFO] [stdout] test format::tests::a_thousand_gets_one_separator ... ok
[INFO] [stdout] test format::tests::a_rung_is_shown_counting_from_one ... ok
[INFO] [stdout] test format::tests::an_age_reads_in_the_largest_unit_that_fits_and_only_that_one ... ok
[INFO] [stdout] test format::tests::an_absence_reads_in_its_two_largest_units ... ok
[INFO] [stdout] test app::tests::the_configured_rung_is_how_long_an_announcement_is_drawn ... ok
[INFO] [stdout] test format::tests::a_total_below_a_compressed_unit_is_quoted_bare ... ok
[INFO] [stdout] test app::tests::the_conversion_gestures_do_nothing_off_their_screen_and_off_their_modal ... ok
[INFO] [stdout] test app::tests::settings_draws_over_the_screen_it_was_opened_on ... ok
[INFO] [stdout] test app::tests::turning_the_number_format_row_repunctuates_the_screen ... ok
[INFO] [stdout] test format::tests::a_whole_number_of_units_drops_the_raw_half ... ok
[INFO] [stdout] test format::tests::separators_repeat_every_three_digits ... ok
[INFO] [stdout] test format::tests::truncating_counts_columns_and_not_bytes ... ok
[INFO] [stdout] test format::tests::the_compressed_count_is_grouped_like_every_other_number ... ok
[INFO] [stdout] test format::tests::justified_overflows_rather_than_panicking_when_too_narrow ... ok
[INFO] [stdout] test format::tests::every_format_punctuates_the_same_digits_and_drops_none ... ok
[INFO] [stdout] test format::tests::justified_measures_multibyte_marks_as_one_column ... ok
[INFO] [stdout] test format::tests::the_wide_reading_agrees_with_the_narrow_one ... ok
[INFO] [stdout] test format::tests::xp_at_the_cap_reads_as_maxed_on_a_full_bar ... ok
[INFO] [stdout] test format::tests::xp_below_the_cap_reads_as_a_grouped_fraction ... ok
[INFO] [stdout] test keymap::dev_tests::the_dev_key_is_unbound_until_the_session_asks_for_it ... ok
[INFO] [stdout] test keymap::tests::a_release_of_any_other_key_means_nothing_at_all ... ok
[INFO] [stdout] test format::tests::the_boundary_at_exactly_a_thousand_groups_correctly ... ok
[INFO] [stdout] test keymap::tests::a_menu_screen_understands_the_lateral_pair ... ok
[INFO] [stdout] test keymap::tests::a_release_outranks_an_open_modal ... ok
[INFO] [stdout] test keymap::tests::each_configured_binding_is_the_one_that_answers ... ok
[INFO] [stdout] test keymap::tests::an_auto_repeat_of_space_reads_exactly_like_a_fresh_press ... ok
[INFO] [stdout] test keymap::tests::a_menu_tells_the_quit_key_from_the_terminal_interrupt ... ok
[INFO] [stdout] test format::tests::justified_puts_the_value_flush_right_and_fills_the_gap ... ok
[INFO] [stdout] test keymap::tests::esc_returns_to_the_mine_screen_from_every_tab ... ok
[INFO] [stdout] test keymap::dev_tests::the_dev_menu_captures_the_list_gestures_and_closes_on_its_own_key ... ok
[INFO] [stdout] test keymap::tests::tab_advances_the_ring_and_backtab_reverses_it ... ok
[INFO] [stdout] test keymap::tests::space_swings_the_pickaxe_only_on_the_mine_screen ... ok
[INFO] [stdout] test keymap::dev_tests::the_dev_key_opens_from_any_screen ... ok
[INFO] [stdout] test keymap::tests::releasing_space_stops_the_swing ... ok
[INFO] [stdout] test keymap::tests::esc_closes_a_modal_before_it_leaves_the_screen ... ok
[INFO] [stdout] test keymap::tests::the_arrows_scroll_the_history_on_the_stats_screen ... ok
[INFO] [stdout] test keymap::tests::q_leaves_for_the_title_and_ctrl_c_leaves_the_program ... ok
[INFO] [stdout] test keymap::tests::the_compression_dialog_captures_the_keyboard_and_answers_its_five_keys ... ok
[INFO] [stdout] test keymap::tests::home_answers_on_both_screens_that_have_somewhere_to_return_to ... ok
[INFO] [stdout] test keymap::tests::an_unbound_key_is_declined_rather_than_swallowed ... ok
[INFO] [stdout] test keymap::tests::the_default_sub_tab_binding_is_the_shifted_arrows_and_only_those ... ok
[INFO] [stdout] test keymap::tests::the_digit_keys_are_zero_based_tab_indices ... ok
[INFO] [stdout] test keymap::tests::question_mark_opens_help_from_a_screen ... ok
[INFO] [stdout] test keymap::tests::a_seventh_digit_is_not_bound ... ok
[INFO] [stdout] test keymap::tests::the_restore_key_is_bound_on_both_doors_of_the_settings_screen ... ok
[INFO] [stdout] test keymap::tests::the_dip_box_takes_the_arrows_enter_and_its_own_printed_key ... ok
[INFO] [stdout] test keymap::tests::the_history_arrows_are_not_claimed_on_a_screen_with_no_list ... ok
[INFO] [stdout] test keymap::tests::every_tab_digit_resolves_to_a_real_screen ... ok
[INFO] [stdout] test keymap::tests::the_demo_toast_key_is_gone_now_that_the_tick_speaks ... ok
[INFO] [stdout] test keymap::tests::while_settings_is_up_it_captures_the_keys_and_closes_on_s_or_esc ... ok
[INFO] [stdout] test app::tests::turning_the_colour_row_repaints_the_mine_grid ... ok
[INFO] [stdout] test app::tests::every_tab_draws_itself_and_stays_selected ... ok
[INFO] [stdout] test keymap::tests::s_opens_settings_from_every_tab ... ok
[INFO] [stdout] test overlay::compression::tests::the_ceiling_floors_one_way_and_counts_the_other ... ok
[INFO] [stdout] test keymap::tests::the_sub_tab_keys_are_not_claimed_on_other_screens ... ok
[INFO] [stdout] test overlay::compression::tests::the_decompress_frame_is_the_same_one_read_backwards ... ok
[INFO] [stdout] test overlay::compression::tests::the_compress_frame_matches_the_counted_one ... ok
[INFO] [stdout] test overlay::dev::tests::dialling_an_empty_span_answers_its_floor_instead_of_panicking ... ok
[INFO] [stdout] test keymap::tests::while_help_is_up_it_captures_the_keys_and_closes_on_question_or_esc ... ok
[INFO] [stdout] test overlay::dev::tests::either_arrow_flips_the_free_upgrades_row ... ok
[INFO] [stdout] test overlay::dev::tests::the_amount_ladder_climbs_in_powers_of_ten_and_wraps ... ok
[INFO] [stdout] test overlay::dev::tests::the_cursor_wraps_at_both_ends_of_the_list ... ok
[INFO] [stdout] test overlay::compression::tests::the_dialog_is_titled_with_the_pile_it_converts ... ok
[INFO] [stdout] test overlay::dev::tests::the_level_dial_wraps_around_the_ladder_the_game_has ... ok
[INFO] [stdout] test overlay::dev::tests::the_material_row_walks_all_fifteen_piles_and_comes_back ... ok
[INFO] [stdout] test overlay::dev::tests::the_menu_opens_with_nothing_switched_on ... ok
[INFO] [stdout] test overlay::dev::tests::the_derived_rows_print_the_amount_they_would_spend ... ok
[INFO] [stdout] test overlay::dev::tests::the_skip_ladder_wraps_around_its_six_absences ... ok
[INFO] [stdout] test overlay::dev::tests::the_two_derived_rows_have_no_value_to_turn ... ok
[INFO] [stdout] test overlay::dev::tests::the_two_other_counters_wrap_around_their_own_floors ... ok
[INFO] [stdout] test overlay::dev::tests::the_frame_names_every_row_and_marks_the_one_under_the_cursor ... ok
[INFO] [stdout] test overlay::dip::tests::a_chain_of_one_is_the_jump_itself ... ok
[INFO] [stdout] test overlay::dip::tests::a_dip_with_nothing_past_it_says_so ... ok
[INFO] [stdout] test overlay::dip::tests::a_pickaxe_with_no_dip_draws_no_box ... ok
[INFO] [stdout] test overlay::dip::tests::a_longer_chain_counts_its_rungs_instead_of_naming_them ... ok
[INFO] [stdout] test overlay::dip::tests::a_dip_repaid_on_the_very_next_rung_says_purchase_in_the_singular ... ok
[INFO] [stdout] test overlay::dip::tests::it_states_the_trade_in_ticks_and_offers_the_deal ... ok
[INFO] [stdout] test overlay::help::tests::it_names_the_screen_it_was_opened_from ... ok
[INFO] [stdout] test overlay::offline::tests::a_total_worth_compressing_is_shown_both_ways ... ok
[INFO] [stdout] test overlay::dip::tests::the_caret_opens_on_the_safe_option_and_moves_to_the_other ... ok
[INFO] [stdout] test overlay::help::tests::the_mine_screen_lists_the_boost_key_and_keeps_mining_findable ... ok
[INFO] [stdout] test overlay::offline::tests::a_capped_absence_says_how_much_of_it_was_paid_for ... ok
[INFO] [stdout] test overlay::offline::tests::it_shows_the_span_the_gains_and_the_multiplication ... ok
[INFO] [stdout] test overlay::help::tests::it_shows_the_globals_and_the_legend_whatever_the_screen ... ok
[INFO] [stdout] test overlay::help::tests::the_legend_fits_the_pane_at_the_reference_size ... ok
[INFO] [stdout] test overlay::help::tests::each_screen_gets_its_own_contextual_bindings ... ok
[INFO] [stdout] test overlay::prestige::tests::a_run_that_has_never_prestiged_reads_rank_zero ... ok
[INFO] [stdout] test overlay::prestige::tests::the_field_shows_the_letters_as_they_are_typed ... ok
[INFO] [stdout] test overlay::prestige::tests::the_confirm_asks_for_the_typed_word ... ok
[INFO] [stdout] test overlay::prestige::tests::an_affordable_preview_is_marked_and_says_so ... ok
[INFO] [stdout] test overlay::save_recovery::tests::a_choice_outweighs_its_consequence_and_the_caret_outranks_both ... ok
[INFO] [stdout] test overlay::prestige::tests::the_confirm_quotes_the_same_price_as_the_preview ... ok
[INFO] [stdout] test overlay::prestige::tests::the_price_is_quoted_in_both_denominations ... ok
[INFO] [stdout] test overlay::save_recovery::tests::the_backup_screen_offers_to_restore_and_refuses_to_load ... ok
[INFO] [stdout] test overlay::prestige::tests::the_preview_is_a_two_column_trade_drawn_unaffordable ... ok
[INFO] [stdout] test overlay::save_recovery::tests::starting_over_warns_that_the_backup_goes_too ... ok
[INFO] [stdout] test overlay::settings::tests::adjusting_a_row_touches_no_other_preference ... ok
[INFO] [stdout] test overlay::save_recovery::tests::a_backup_of_unknown_age_still_gets_offered ... ok
[INFO] [stdout] test overlay::save_recovery::tests::an_unreadable_save_is_not_described_as_a_checksum_failure ... ok
[INFO] [stdout] test overlay::save_recovery::tests::the_both_failed_screen_changes_nothing_and_offers_no_restore ... ok
[INFO] [stdout] test overlay::save_recovery::tests::a_save_from_the_future_names_both_versions_and_offers_only_quitting ... ok
[INFO] [stdout] test overlay::prestige::tests::an_open_lock_hands_the_closing_line_to_the_price ... ok
[INFO] [stdout] test overlay::settings::tests::every_row_wraps_rather_than_stopping_at_either_end ... ok
[INFO] [stdout] test overlay::prestige::tests::a_purse_of_raw_ore_is_not_reported_as_compressed_units ... ok
[INFO] [stdout] test overlay::settings::tests::r_restores_one_row_and_leaves_the_other_four_alone ... ok
[INFO] [stdout] test overlay::settings::tests::every_row_of_the_enum_reaches_the_screen ... ok
[INFO] [stdout] test overlay::settings::tests::restoring_an_untouched_row_is_not_a_change ... ok
[INFO] [stdout] test overlay::help::tests::the_sub_tab_line_is_rendered_from_config_not_the_default ... ok
[INFO] [stdout] test overlay::settings::tests::it_lists_only_preferences_with_the_colour_detail ... ok
[INFO] [stdout] test overlay::settings::tests::the_caret_marks_the_selected_row_and_only_that_row ... ok
[INFO] [stdout] test overlay::settings::tests::the_row_cursor_wraps_at_both_ends ... ok
[INFO] [stdout] test overlay::settings::tests::the_colour_pane_quotes_what_the_terminal_declared ... ok
[INFO] [stdout] test overlay::settings::tests::the_value_column_reads_the_config_it_was_handed ... ok
[INFO] [stdout] test overlay::settings::tests::the_detail_pane_describes_whichever_row_is_selected ... ok
[INFO] [stdout] test overlay::settings::tests::the_footnote_is_muted_and_the_choices_above_it_are_not ... ok
[INFO] [stdout] test overlay::splash::tests::a_fresh_install_offers_no_continue_and_says_nothing_about_a_save ... ok
[INFO] [stdout] test overlay::settings::tests::the_footer_advertises_the_restore_key ... ok
[INFO] [stdout] test overlay::splash::tests::a_title_over_a_save_shows_its_level_its_pickaxe_its_rank_and_how_long_it_sat ... ok
[INFO] [stdout] test overlay::splash::tests::a_run_before_its_first_prestige_keeps_the_rank_off_the_headline ... ok
[INFO] [stdout] test overlay::splash::tests::a_rank_past_the_roman_table_prints_as_a_number_on_the_title_too ... ok
[INFO] [stdout] test overlay::splash::tests::a_tall_window_lifts_the_block_off_the_top_and_leaves_the_corners_pinned ... ok
[INFO] [stdout] test overlay::settings::tests::the_detail_pane_is_titled_with_the_row_it_describes ... ok
[INFO] [stdout] test overlay::tests::centring_respects_a_non_zero_origin ... ok
[INFO] [stdout] test overlay::tests::a_box_larger_than_its_area_is_clamped_rather_than_overflowing ... ok
[INFO] [stdout] test overlay::too_small::tests::a_short_height_underlines_the_height_and_not_the_width ... ok
[INFO] [stdout] test overlay::tests::a_box_is_centred_within_its_area ... ok
[INFO] [stdout] test overlay::tests::a_modal_hint_is_muted_and_the_body_above_it_is_not ... ok
[INFO] [stdout] test overlay::tests::a_modal_with_no_hint_draws_what_it_always_drew ... ok
[INFO] [stdout] test overlay::settings::tests::every_rows_pane_still_ends_inside_the_frame ... ok
[INFO] [stdout] test palette::tests::each_constructor_pairs_its_swatch_with_the_ink_its_name_promises ... ok
[INFO] [stdout] test overlay::too_small::tests::both_axes_short_underlines_across_the_whole_reading ... ok
[INFO] [stdout] test overlay::too_small::tests::the_box_states_the_target_the_actual_size_and_the_quit_hint ... ok
[INFO] [stdout] test overlay::too_small::tests::below_the_box_footprint_only_the_bare_target_remains ... ok
[INFO] [stdout] test overlay::too_small::tests::the_exact_budget_fits_but_one_short_of_either_axis_does_not ... ok
[INFO] [stdout] test palette::tests::no_swatch_is_dark_enough_to_read_as_a_hole ... ok
[INFO] [stdout] test palette::tests::the_blast_separates_from_every_material ... ok
[INFO] [stdout] test palette::tests::the_sixteen_colour_blast_is_a_colour_no_mine_claims ... ok
[INFO] [stdout] test palette::tests::the_table_order_matches_the_lookup ... ok
[INFO] [stdout] test palette::tests::every_swatch_can_be_written_on ... ok
[INFO] [stdout] test palette::tests::the_two_hundred_and_fifty_six_colour_mode_separates_the_roles ... ok
[INFO] [stdout] test palette::tests::the_default_mode_is_the_richer_one ... ok
[INFO] [stdout] test palette::tests::the_sixteen_colour_mode_gives_a_mine_one_colour ... ok
[INFO] [stdout] test persist::envelope::tests::a_sealed_payload_opens_to_exactly_what_went_in ... ok
[INFO] [stdout] test persist::envelope::tests::one_flipped_byte_in_the_payload_breaks_the_seal ... ok
[INFO] [stdout] test persist::envelope::tests::a_mac_that_is_not_lowercase_hexadecimal_is_damaged ... ok
[INFO] [stdout] test persist::envelope::tests::anything_that_is_not_an_envelope_is_damaged ... ok
[INFO] [stdout] test persist::key::tests::the_key_is_sixty_four_bytes_of_something ... ok
[INFO] [stdout] test persist::envelope::tests::the_key_is_the_one_the_vector_was_signed_with ... ok
[INFO] [stdout] test persist::envelope::tests::one_flipped_byte_in_the_mac_breaks_the_seal ... ok
[INFO] [stdout] test persist::envelope::tests::the_payload_is_a_string_and_not_a_nested_object ... ok
[INFO] [stdout] test persist::key::tests::the_stored_constant_is_not_the_key ... ok
[INFO] [stdout] test persist::key::tests::the_mask_is_derived_and_is_not_the_stored_constant ... ok
[INFO] [stdout] test overlay::splash::tests::the_confirmation_names_the_run_it_would_cost_and_opens_on_keeping_it ... ok
[INFO] [stdout] test persist::tests::a_location_that_cannot_be_reached_fails_both_ways ... ok
[INFO] [stdout] test persist::envelope::tests::every_byte_survives_the_hexadecimal ... ok
[INFO] [stdout] test persist::tests::a_correctly_signed_but_impossible_run_is_still_refused ... ok
[INFO] [stdout] test overlay::splash::tests::the_caret_marks_the_row_it_is_on_and_only_that_row ... ok
[INFO] [stdout] test overlay::splash::tests::it_draws_the_wordmark_and_the_build_it_is ... ok
[INFO] [stdout] test palette::tests::each_mode_gets_its_own_blast_colour ... ok
[INFO] [stdout] test overlay::splash::tests::the_longest_menu_keeps_its_last_row_and_its_own_bottom_border ... ok
[INFO] [stdout] test palette::tests::every_pair_clears_the_contrast_gate ... ok
[INFO] [stdout] test overlay::splash::tests::the_nowhere_to_save_warning_carries_its_meaning_in_words_and_not_in_a_colour ... ok
[INFO] [stdout] test overlay::splash::tests::a_very_wide_window_keeps_the_corners_within_the_band_rather_than_at_its_edges ... ok
[INFO] [stdout] test persist::tests::a_signed_payload_that_is_not_a_run_is_refused_by_the_core ... ok
[INFO] [stdout] test persist::tests::every_refusal_says_something ... ok
[INFO] [stdout] test persist::tests::a_failed_write_leaves_the_previous_save_intact ... ok
[INFO] [stdout] test persist::tests::the_slots_are_the_save_and_its_backup_side_by_side ... ok
[INFO] [stdout] test persist::tests::a_run_survives_the_disk ... ok
[INFO] [stdout] test persist::tests::one_flipped_byte_in_the_mac_is_refused ... ok
[INFO] [stdout] test persist::tests::a_written_file_can_say_how_old_it_is_and_a_missing_one_says_nothing ... ok
[INFO] [stdout] test persist::tests::the_directory_is_made_when_it_is_not_there_yet ... ok
[INFO] [stdout] test screen::inventory::tests::a_cursor_on_no_row_at_all_empties_the_panel_instead_of_panicking ... ok
[INFO] [stdout] test persist::tests::a_write_stamps_the_run_with_the_moment_it_was_written ... ok
[INFO] [stdout] test persist::tests::a_save_from_a_newer_build_is_named_rather_than_called_damaged ... ok
[INFO] [stdout] test screen::inventory::tests::the_case_of_the_key_chooses_the_direction ... ok
[INFO] [stdout] test persist::tests::a_file_cut_in_half_is_refused_and_the_backup_survives ... ok
[INFO] [stdout] test overlay::splash::tests::a_session_that_cannot_write_says_so_where_the_summary_goes ... ok
[INFO] [stdout] test screen::inventory::tests::the_table_walks_on_the_arrows ... ok
[INFO] [stdout] test screen::inventory::tests::a_run_with_nothing_refused_draws_no_compress_first_sentence ... ok
[INFO] [stdout] test screen::inventory::tests::the_compress_panel_details_the_selected_material ... ok
[INFO] [stdout] test screen::levels::tests::a_waiting_reward_marks_its_own_column_and_changes_no_other ... ok
[INFO] [stdout] test persist::tests::a_slot_with_no_file_is_not_a_failure ... ok
[INFO] [stdout] test persist::tests::a_write_leaves_the_directory_holding_exactly_two_things ... ok
[INFO] [stdout] test overlay::splash::tests::the_title_takes_the_same_chrome_colours_as_every_other_screen ... ok
[INFO] [stdout] test screen::inventory::tests::the_panel_names_the_missing_denomination_not_a_shortfall ... ok
[INFO] [stdout] test persist::tests::the_second_write_pushes_the_first_into_the_backup ... ok
[INFO] [stdout] test screen::levels::tests::the_adjacent_cursor_and_position_marks_do_not_share_a_colour ... ok
[INFO] [stdout] test persist::tests::both_files_broken_is_two_refusals_and_no_repair ... ok
[INFO] [stdout] test screen::inventory::tests::a_run_that_holds_nothing_still_lists_all_fifteen_materials ... ok
[INFO] [stdout] test screen::inventory::tests::the_footer_names_select_and_both_conversions ... ok
[INFO] [stdout] test screen::inventory::tests::the_table_has_its_header_and_the_fifteen_materials ... ok
[INFO] [stdout] test screen::inventory::tests::the_cursor_marks_the_selected_row ... ok
[INFO] [stdout] test persist::tests::one_flipped_byte_in_the_payload_is_refused_and_the_backup_survives ... ok
[INFO] [stdout] test screen::levels::tests::the_position_column_tells_the_four_states_and_their_overlap ... ok
[INFO] [stdout] test screen::levels::tests::every_row_shows_its_grants_and_per_level_xp ... ok
[INFO] [stdout] test screen::levels::tests::the_level_the_player_is_on_shows_a_reward_that_is_still_waiting ... ok
[INFO] [stdout] test screen::levels::tests::the_title_carries_the_distance_to_the_next_level ... ok
[INFO] [stdout] test screen::mine::tests::a_ratio_out_of_range_or_non_finite_never_reaches_the_gauge_panic ... ok
[INFO] [stdout] test screen::levels::tests::the_scrollbar_draws_a_thumb_over_a_track ... ok
[INFO] [stdout] test screen::levels::tests::the_current_level_carries_both_marks_and_earlier_ones_are_ticked ... ok
[INFO] [stdout] test screen::mine::tests::a_two_material_mine_prints_both_segments_and_no_total ... ok
[INFO] [stdout] test screen::levels::tests::the_footer_drops_the_claim_keys_once_the_ladder_is_empty ... ok
[INFO] [stdout] test screen::levels::tests::a_capped_player_gets_a_title_with_no_next_level_in_it ... ok
[INFO] [stdout] test screen::levels::tests::the_footer_offers_the_claim_keys_while_something_is_waiting ... ok
[INFO] [stdout] test screen::levels::tests::the_waiting_column_does_not_move_with_the_width_of_the_level_number ... ok
[INFO] [stdout] test screen::mine::tests::all_three_gauges_are_drawn_in_the_accent_and_muted_pair ... ok
[INFO] [stdout] test screen::mine::tests::the_composite_value_counts_a_compressed_unit_as_a_hundred_raw ... ok
[INFO] [stdout] test screen::levels::tests::a_taller_terminal_shows_more_of_the_roadmap ... ok
[INFO] [stdout] test screen::mine::tests::every_mines_haul_line_fits_the_strip_at_the_stated_budget ... ok
[INFO] [stdout] test screen::mine::tests::a_taller_terminal_grows_the_panel_but_never_the_mine ... ok
[INFO] [stdout] test screen::mine::tests::a_capped_player_reads_maxed_on_a_filled_xp_bar ... ok
[INFO] [stdout] test screen::mine::tests::a_blast_over_the_whole_grid_leaves_the_panel_where_it_was ... ok
[INFO] [stdout] test screen::levels::tests::the_counted_window_still_opens_on_level_thirteen ... ok
[INFO] [stdout] test screen::inventory::tests::the_cursor_keeps_its_glyph_and_takes_the_accent ... ok
[INFO] [stdout] test screen::mine::tests::a_panel_title_is_bold_as_well_as_coloured ... ok
[INFO] [stdout] test screen::mine::tests::a_target_that_names_no_block_still_draws_its_percentage ... ok
[INFO] [stdout] test screen::mine::tests::the_counted_band_is_twelve_rows_at_the_reference_size ... ok
[INFO] [stdout] test screen::mine::tests::the_mine_screen_claims_space_and_b_and_declines_the_rest ... ok
[INFO] [stdout] test screen::mine::tests::an_unboosted_pickaxe_prints_no_multiplication_and_no_countdown ... ok
[INFO] [stdout] test screen::mines::tests::a_mine_never_entered_counts_no_blocks ... ok
[INFO] [stdout] test screen::mine::tests::the_haul_strip_names_the_mine_and_sums_its_value ... ok
[INFO] [stdout] test screen::mines::tests::a_same_material_mine_gets_the_same_slider_and_a_split_that_names_both_blocks ... ok
[INFO] [stdout] test screen::mine::tests::the_footer_advertises_the_screen_local_keys_only ... ok
[INFO] [stdout] test screen::mine::tests::a_run_that_has_not_swung_shows_a_dash_and_no_break_percentage ... ok
[INFO] [stdout] test screen::mine::tests::the_boost_gauge_states_the_countdown_and_the_reserve_separately ... ok
[INFO] [stdout] test screen::mine::tests::the_grid_panel_is_forty_two_columns_wide ... ok
[INFO] [stdout] test screen::mine::tests::the_longest_boost_label_is_not_clipped_by_the_bar ... ok
[INFO] [stdout] test screen::mines::tests::the_detail_pane_describes_the_selected_mine ... ok
[INFO] [stdout] test screen::mine::tests::the_mine_panel_counts_blocks_from_the_grid ... ok
[INFO] [stdout] test screen::mine::tests::the_pickaxe_panel_shows_the_boosted_power_product ... ok
[INFO] [stdout] test screen::mines::tests::the_dial_is_drawn_in_the_same_pair_as_every_other_progress_bar ... ok
[INFO] [stdout] test screen::mines::tests::the_dial_is_drawn_for_a_two_material_mine ... ok
[INFO] [stdout] test screen::mines::tests::a_mine_shut_on_both_axes_marks_both_gate_rows ... ok
[INFO] [stdout] test screen::mine::tests::an_empty_reserve_is_named_rather_than_dashed ... ok
[INFO] [stdout] test screen::mine::tests::the_break_label_is_read_off_the_cell_the_target_points_at ... ok
[INFO] [stdout] test screen::mine::tests::the_three_status_gauges_are_drawn_with_bars ... ok
[INFO] [stdout] test screen::mines::tests::the_locked_end_mine_shows_its_reason ... ok
[INFO] [stdout] test screen::mines::tests::the_size_and_the_rung_keep_their_columns_whatever_the_numbers_are ... ok
[INFO] [stdout] test screen::mines::tests::the_dial_prints_its_rung_against_the_runs_ten_rungs ... ok
[INFO] [stdout] test screen::stats::tests::history_prints_the_announcement_behind_its_age ... ok
[INFO] [stdout] test screen::mines::tests::the_detail_pane_prints_each_block_with_its_hardness_and_tick_cost ... ok
[INFO] [stdout] test screen::mines::tests::the_cursor_marks_the_selected_mine ... ok
[INFO] [stdout] test screen::mines::tests::a_block_the_pickaxe_may_not_break_shows_no_tick_count ... ok
[INFO] [stdout] test screen::mines::tests::the_dial_track_separates_where_it_sits_from_what_is_bought ... ok
[INFO] [stdout] test screen::mines::tests::the_block_rows_fit_the_pane_at_the_reference_size ... ok
[INFO] [stdout] test screen::mines::tests::every_locked_row_starts_its_reason_in_the_same_column ... ok
[INFO] [stdout] test screen::mines::tests::the_footer_names_select_mine_and_the_dial ... ok
[INFO] [stdout] test screen::mines::tests::the_list_groups_mines_under_their_three_worlds ... ok
[INFO] [stdout] test screen::stats::tests::a_sentence_too_long_for_the_box_is_cut_and_says_so ... ok
[INFO] [stdout] test screen::stats::tests::progression_shows_level_xp_and_prestige_figures ... ok
[INFO] [stdout] test screen::mines::tests::the_split_under_the_dial_names_both_materials_and_sums_to_a_hundred ... ok
[INFO] [stdout] test overlay::splash::tests::the_wordmark_sits_centred_rather_than_hung_off_its_widest_row ... ok
[INFO] [stdout] test screen::tests::a_list_that_fits_is_never_windowed ... ok
[INFO] [stdout] test screen::tests::a_list_that_fits_draws_no_bar_at_all ... ok
[INFO] [stdout] test screen::tests::a_stored_offset_survives_a_redraw_that_did_not_need_to_move_it ... ok
[INFO] [stdout] test screen::tests::an_index_past_the_last_tab_is_refused ... ok
[INFO] [stdout] test screen::tests::index_and_from_index_are_inverses ... ok
[INFO] [stdout] test screen::tests::next_wraps_from_the_last_screen_to_the_first ... ok
[INFO] [stdout] test screen::tests::only_the_screens_with_bindings_claim_a_key ... ok
[INFO] [stdout] test screen::tests::a_taller_viewport_scrolls_back_rather_than_running_off_the_end ... ok
[INFO] [stdout] test screen::tests::a_full_lap_of_the_ring_returns_to_the_start ... ok
[INFO] [stdout] test screen::tests::the_thumb_is_the_visible_share_of_the_list ... ok
[INFO] [stdout] test screen::tests::the_ring_holds_every_screen_once ... ok
[INFO] [stdout] test screen::tests::the_window_follows_the_cursor_off_either_edge_by_the_minimum ... ok
[INFO] [stdout] test screen::mines::tests::the_marks_keep_their_glyph_and_take_their_colour ... ok
[INFO] [stdout] test screen::tests::the_thumb_reaches_both_ends_of_the_track ... ok
[INFO] [stdout] test screen::stats::tests::a_history_that_fits_its_box_draws_no_bar_at_all ... ok
[INFO] [stdout] test screen::tests::a_position_past_the_last_offset_pins_the_thumb_rather_than_overflowing ... ok
[INFO] [stdout] test screen::stats::tests::this_run_marks_done_current_and_pending_goals ... ok
[INFO] [stdout] test screen::stats::tests::the_history_draws_a_scrollbar_when_the_log_outgrows_the_box ... ok
[INFO] [stdout] test screen::stats::tests::the_worlds_are_ticked_against_the_mining_level_not_a_stored_flag ... ok
[INFO] [stdout] test screen::stats::tests::the_marks_keep_their_glyph_and_take_their_colour ... ok
[INFO] [stdout] test screen::upgrades::tests::a_blocks_label_is_muted_and_its_value_is_not ... ok
[INFO] [stdout] test screen::stats::tests::the_three_panels_are_all_titled ... ok
[INFO] [stdout] test screen::upgrades::tests::a_chain_of_one_is_a_rung_and_not_rungs ... ok
[INFO] [stdout] test screen::upgrades::tests::a_size_track_prints_the_grid_the_next_level_would_grow_to ... ok
[INFO] [stdout] test screen::upgrades::tests::a_price_is_drawn_in_the_hue_of_its_own_verdict ... ok
[INFO] [stdout] test screen::stats::tests::the_selected_history_row_is_the_one_that_takes_the_accent ... ok
[INFO] [stdout] test screen::upgrades::tests::a_maxed_track_quotes_no_price_and_promises_no_next_level ... ok
[INFO] [stdout] test screen::tests::prev_wraps_from_the_first_screen_to_the_last ... ok
[INFO] [stdout] test screen::tests::the_degenerate_inputs_yield_an_empty_range_rather_than_a_panic ... ok
[INFO] [stdout] test screen::upgrades::tests::an_empty_reserve_is_drawn_as_nothing_held_rather_than_as_a_count ... ok
[INFO] [stdout] test screen::upgrades::tests::a_wrapped_sentence_never_overruns_the_value_column ... ok
[INFO] [stdout] test screen::upgrades::tests::a_capped_enchant_pane_says_there_is_nothing_left_to_buy ... ok
[INFO] [stdout] test screen::stats::tests::scrolling_the_history_slides_the_window_off_its_newest_entry ... ok
[INFO] [stdout] test screen::stats::tests::the_footer_names_the_history_scroll_and_prestige ... ok
[INFO] [stdout] test screen::upgrades::tests::a_locked_mine_says_what_it_is_waiting_for_rather_than_what_it_costs ... ok
[INFO] [stdout] test screen::upgrades::tests::a_wider_terminal_widens_both_panes_and_moves_the_divider_with_them ... ok
[INFO] [stdout] test screen::upgrades::tests::the_active_sub_tab_keeps_its_accent_over_the_bars_own_style ... ok
[INFO] [stdout] test screen::upgrades::tests::the_boost_pane_prices_the_charge_and_says_how_to_fire_it ... ok
[INFO] [stdout] test screen::upgrades::tests::a_taller_terminal_shows_more_of_the_ladder ... ok
[INFO] [stdout] test screen::upgrades::tests::one_banked_charge_reads_in_the_singular ... ok
[INFO] [stdout] test screen::upgrades::tests::each_sub_tab_names_its_own_purchase_in_the_footer ... ok
[INFO] [stdout] test screen::upgrades::tests::an_owned_rung_states_what_it_is_worth_instead_of_stopping_at_the_sentence ... ok
[INFO] [stdout] test screen::upgrades::tests::the_box_is_split_by_a_single_divider_at_column_thirty_six ... ok
[INFO] [stdout] test screen::upgrades::tests::the_bar_shows_every_sub_tab_with_the_active_one_bracketed ... ok
[INFO] [stdout] test screen::upgrades::tests::each_material_of_a_price_is_verdicted_on_its_own ... ok
[INFO] [stdout] test screen::upgrades::tests::a_chain_too_long_to_price_in_full_keeps_what_sits_under_it ... ok
[INFO] [stdout] test screen::upgrades::tests::the_reachability_marks_form_a_contiguous_tick_prefix ... ok
[INFO] [stdout] test screen::upgrades::tests::an_unopened_mine_is_sent_to_the_mines_screen_rather_than_priced ... ok
[INFO] [stdout] test screen::upgrades::tests::the_cap_names_the_world_that_sets_it_and_the_one_the_game_stops_at ... ok
[INFO] [stdout] test screen::upgrades::tests::the_enchants_sub_tab_lists_its_tracks_and_needs_no_scrollbar ... ok
[INFO] [stdout] test screen::upgrades::tests::an_owned_rung_that_opened_nothing_prints_no_unlocks_row ... ok
[INFO] [stdout] test screen::upgrades::tests::the_hand_patched_divider_matches_the_border_it_joins ... ok
[INFO] [stdout] test session::tests::a_cramped_terminal_shows_the_filter_over_every_state ... ok
[INFO] [stdout] test screen::stats::tests::the_thumb_travels_as_the_history_is_scrolled ... ok
[INFO] [stdout] test screen::upgrades::tests::the_boost_sub_tab_shows_one_row_and_leaves_the_rest_to_its_pane ... ok
[INFO] [stdout] test screen::upgrades::tests::a_tall_enough_terminal_shows_the_whole_ladder_and_drops_the_scrollbar ... ok
[INFO] [stdout] test session::tests::a_fresh_install_is_not_asked_a_question_with_one_answer ... ok
[INFO] [stdout] test screen::upgrades::tests::a_rung_that_costs_no_power_still_says_what_it_buys ... ok
[INFO] [stdout] test session::tests::a_key_the_cramped_screen_does_not_print_does_nothing ... ok
[INFO] [stdout] test screen::upgrades::tests::the_pickaxe_ladder_carries_both_mark_channels_and_its_detail ... ok
[INFO] [stdout] test screen::upgrades::tests::both_mark_channels_keep_their_glyph_and_take_their_colour ... ok
[INFO] [stdout] test session::tests::a_backup_that_cannot_be_read_leaves_nothing_to_restore ... ok
[INFO] [stdout] test screen::upgrades::tests::the_mark_column_keeps_one_blank_column_before_the_scrollbar ... ok
[INFO] [stdout] test session::tests::a_failing_write_is_announced_once_and_so_is_its_recovery ... ok
[INFO] [stdout] test screen::upgrades::tests::the_mines_sub_tab_repeats_each_mine_and_scrolls ... ok
[INFO] [stdout] test session::tests::a_session_with_nowhere_to_write_never_pretends_to_have_written ... ok
[INFO] [stdout] test screen::upgrades::tests::the_mark_column_stays_put_on_a_sub_tab_that_does_not_scroll ... ok
[INFO] [stdout] test screen::upgrades::tests::the_bar_names_the_configured_pair_and_not_the_default_one ... ok
[INFO] [stdout] test session::tests::a_key_nothing_is_bound_to_leaves_the_session_alone ... ok
[INFO] [stdout] test session::tests::a_launch_with_nothing_on_disk_opens_the_title_without_continue ... ok
[INFO] [stdout] test session::tests::a_key_nothing_is_bound_to_on_the_title_changes_nothing ... ok
[INFO] [stdout] test session::tests::a_missing_save_with_a_live_backup_is_not_a_fresh_install ... ok
[INFO] [stdout] test session::tests::a_dead_event_source_stops_the_loop_instead_of_spinning ... ok
[INFO] [stdout] test session::tests::a_save_from_the_future_offers_nothing_but_quitting ... ok
[INFO] [stdout] test session::tests::a_key_is_decoded_and_applied_before_the_next_frame ... ok
[INFO] [stdout] test session::tests::a_launch_over_a_save_offers_to_continue_it_and_says_what_it_is ... ok
[INFO] [stdout] test session::tests::a_file_that_breaks_between_the_title_and_continue_lands_in_recovery ... ok
[INFO] [stdout] test session::tests::ctrl_c_still_ends_the_process_from_the_title_settings ... ok
[INFO] [stdout] test session::tests::answering_yes_starts_the_run_the_box_warned_about ... ok
[INFO] [stdout] test session::tests::an_edited_save_opens_the_recovery_screen_and_offers_the_backup ... ok
[INFO] [stdout] test session::tests::a_write_that_fails_on_the_way_in_is_announced_and_does_not_end_the_session ... ok
[INFO] [stdout] test session::tests::escaping_the_box_leaves_the_menu_exactly_as_it_was ... ok
[INFO] [stdout] test session::tests::a_preference_set_on_the_title_is_the_one_the_new_run_plays_on ... ok
[INFO] [stdout] test session::tests::nothing_is_written_from_a_screen_that_has_no_run ... ok
[INFO] [stdout] test session::tests::q_is_swallowed_by_the_settings_screen_the_title_opens ... ok
[INFO] [stdout] test session::tests::esc_closes_the_title_settings_and_gives_the_menu_back ... ok
[INFO] [stdout] test session::tests::leaving_for_the_title_writes_the_run_before_re_reading_it ... ok
[INFO] [stdout] test session::tests::a_session_that_cannot_save_says_so_on_the_title_and_again_in_the_game ... ok
[INFO] [stdout] test session::tests::a_tick_and_a_resize_both_go_round_the_loop_without_changing_the_screen ... ok
[INFO] [stdout] test session::tests::r_restores_a_row_of_the_title_settings ... ok
[INFO] [stdout] test session::tests::new_game_over_a_save_asks_before_it_writes_over_anything ... ok
[INFO] [stdout] test session::tests::taking_the_boxs_first_row_keeps_the_save_exactly_as_esc_does ... ok
[INFO] [stdout] test session::tests::a_new_run_is_on_the_disk_before_the_player_presses_anything ... ok
[INFO] [stdout] test session::tests::both_files_broken_leaves_nothing_to_restore ... ok
[INFO] [stdout] test session::tests::the_offline_credit_is_on_the_disk_before_the_player_reads_it ... ok
[INFO] [stdout] test session::tests::the_summary_has_no_caret_to_walk ... ok
[INFO] [stdout] test tests::a_flag_is_found_past_an_argument_that_means_nothing ... ok
[INFO] [stdout] test tests::an_argument_that_is_not_utf8_is_simply_not_a_flag ... ok
[INFO] [stdout] test tests::a_lowercase_v_is_not_the_version_flag ... ok
[INFO] [stdout] test tests::an_empty_command_line_starts_the_game ... ok
[INFO] [stdout] test tests::both_spellings_of_the_help_flag_ask_for_usage ... ok
[INFO] [stdout] test tests::an_option_this_program_never_had_starts_the_game ... ok
[INFO] [stdout] test tests::both_spellings_of_the_version_flag_ask_for_the_version ... ok
[INFO] [stdout] test session::tests::quitting_from_a_recovery_frame_ends_the_session ... ok
[INFO] [stdout] test session::tests::the_caret_walks_the_menu_and_wraps_at_both_ends ... ok
[INFO] [stdout] test tests::the_binary_answers_with_the_name_a_player_types ... ok
[INFO] [stdout] test tests::the_usage_text_lists_both_flags_and_defers_to_the_game_for_keys ... ok
[INFO] [stdout] test tests::the_first_flag_met_is_the_one_answered ... ok
[INFO] [stdout] test theme::tests::a_glyph_answers_with_the_same_hue_the_scan_would_give_it ... ok
[INFO] [stdout] test session::tests::restoring_the_backup_returns_to_the_title_over_the_run_it_holds ... ok
[INFO] [stdout] test session::tests::the_summary_pauses_the_tick_and_holds_no_live_flash ... ok
[INFO] [stdout] test theme::tests::a_line_with_no_mark_is_left_unstyled ... ok
[INFO] [stdout] test session::tests::continue_re_reads_the_file_and_lands_in_the_run_it_holds ... ok
[INFO] [stdout] test session::tests::continuing_from_the_backup_says_so_on_the_way_in ... ok
[INFO] [stdout] test session::tests::enter_dismisses_the_summary_and_leaves_the_run_running ... ok
[INFO] [stdout] test theme::tests::a_row_with_neither_a_label_nor_a_tint_is_what_marked_already_drew ... ok
[INFO] [stdout] test theme::tests::every_role_is_a_named_colour_the_terminal_can_remap ... ok
[INFO] [stdout] test theme::tests::a_tint_colours_the_text_and_never_the_mark_on_it ... ok
[INFO] [stdout] test session::tests::the_loop_draws_before_it_waits ... ok
[INFO] [stdout] test theme::tests::a_label_is_muted_and_the_value_after_it_is_not ... ok
[INFO] [stdout] test theme::tests::each_mark_takes_its_own_role ... ok
[INFO] [stdout] test theme::tests::marking_a_line_changes_its_style_and_never_its_text ... ok
[INFO] [stdout] test session::tests::an_absence_too_short_to_pay_for_a_block_shows_no_screen_at_all ... ok
[INFO] [stdout] test theme::tests::no_two_marks_share_a_colour ... ok
[INFO] [stdout] test session::tests::a_dead_event_source_still_banks_the_run ... ok
[INFO] [stdout] test theme::tests::the_em_dash_stays_prose_on_both_of_the_lines_it_appears_on ... ok
[INFO] [stdout] test theme::tests::the_glyphs_with_no_verdict_to_state_have_no_hue ... ok
[INFO] [stdout] test theme::tests::the_tilde_is_only_ever_the_mark ... ok
[INFO] [stdout] test theme::tests::the_title_style_is_bold_as_well_as_coloured ... ok
[INFO] [stdout] test theme::tests::two_marks_on_one_row_are_styled_apart ... ok
[INFO] [stdout] test theme::tests::an_empty_line_produces_no_spans ... ok
[INFO] [stdout] test toast::tests::a_major_holds_the_slot_against_everything_raised_after_it ... ok
[INFO] [stdout] test toast::tests::a_fresh_queue_is_empty ... ok
[INFO] [stdout] test toast::tests::a_silent_announcement_is_never_drawn_and_is_still_logged ... ok
[INFO] [stdout] test toast::tests::the_log_reads_newest_first_and_carries_each_age ... ok
[INFO] [stdout] test toast::tests::an_expired_announcement_leaves_the_screen_and_stays_in_the_log ... ok
[INFO] [stdout] test toast::tests::an_expired_major_stops_holding_the_slot ... ok
[INFO] [stdout] test toast::tests::every_tone_takes_a_colour_from_the_theme_and_no_two_verdicts_share_one ... ok
[INFO] [stdout] test toast::tests::a_toast_is_drawn_in_its_own_tone_border_and_text_alike ... ok
[INFO] [stdout] test toast::tests::the_cap_drops_the_oldest_and_keeps_the_newest ... ok
[INFO] [stdout] test session::tests::an_absence_that_paid_something_opens_the_summary_before_the_game ... ok
[INFO] [stdout] test view::tests::a_capped_enchant_is_priceless_rather_than_unaffordable ... ok
[INFO] [stdout] test toast::tests::the_newest_announcement_still_inside_its_window_is_the_one_drawn ... ok
[INFO] [stdout] test toast::tests::silent_news_does_not_claim_the_slot_the_save_banner_wants ... ok
[INFO] [stdout] test toast::tests::an_empty_queue_draws_nothing_at_all ... ok
[INFO] [stdout] test toast::tests::the_newest_major_wins_among_majors ... ok
[INFO] [stdout] test view::tests::a_capped_track_moves_no_stat_at_all ... ok
[INFO] [stdout] test view::tests::a_line_the_pile_behind_it_covers_invites_a_conversion_rather_than_a_mine ... ok
[INFO] [stdout] test view::tests::a_fresh_runs_ladder_opens_on_the_rung_the_player_stands_on ... ok
[INFO] [stdout] test view::tests::a_maxed_track_has_no_next_level_to_quote ... ok
[INFO] [stdout] test view::tests::a_locked_mine_prints_its_level_gate_and_an_unvisited_one_prints_a_size ... ok
[INFO] [stdout] test view::tests::a_mines_two_blocks_are_costed_against_the_pickaxe_that_would_dig_them ... ok
[INFO] [stdout] test view::tests::a_price_is_verdicted_one_material_at_a_time ... ok
[INFO] [stdout] test view::tests::a_roman_numeral_is_total_over_every_level_a_cap_allows ... ok
[INFO] [stdout] test view::tests::a_summed_chain_never_re_splits_into_a_compressed_unit ... ok
[INFO] [stdout] test view::tests::a_stacked_boost_measures_against_its_own_granted_time ... ok
[INFO] [stdout] test view::tests::an_unenchanted_pickaxe_says_so_by_omission ... ok
[INFO] [stdout] test view::tests::an_enchanted_pickaxe_reads_as_the_wireframe_drew_it ... ok
[INFO] [stdout] test view::tests::efficiency_has_no_sentence_here_because_the_shop_does_not_sell_it ... ok
[INFO] [stdout] test view::tests::an_unvisited_mines_pane_sends_the_player_there_rather_than_pricing_it ... ok
[INFO] [stdout] test view::tests::every_fixtures_target_names_a_standing_value_block ... ok
[INFO] [stdout] test session::tests::q_in_a_game_goes_back_to_the_title_rather_than_out_of_the_program ... ok
[INFO] [stdout] test view::tests::every_enchant_track_says_what_it_does_and_what_the_next_level_changes ... ok
[INFO] [stdout] test view::tests::a_fresh_run_projects_to_a_bare_level_one_session ... ok
[INFO] [stdout] test session::tests::the_title_opens_settings_in_place_of_its_menu ... ok
[INFO] [stdout] test view::tests::every_grid_fixture_is_rectangular_and_fits_the_reserve ... ok
[INFO] [stdout] test view::tests::a_rung_behind_the_player_is_projected_at_its_own_power ... ok
[INFO] [stdout] test view::tests::the_dials_note_says_what_is_at_stake_on_this_particular_mine ... ok
[INFO] [stdout] test view::tests::the_explosive_square_is_quoted_band_by_band ... ok
[INFO] [stdout] test view::tests::the_haul_carries_one_entry_or_two_according_to_the_mine ... ok
[INFO] [stdout] test view::tests::the_levels_roadmap_is_the_whole_ladder_and_keeps_its_counted_rows ... ok
[INFO] [stdout] test view::tests::the_live_fixture_fills_the_reserve ... ok
[INFO] [stdout] test view::tests::the_pickaxe_ladder_is_the_whole_roadmap ... ok
[INFO] [stdout] test view::tests::a_chain_through_a_tier_jump_names_the_ceiling_it_raises_and_the_mines_it_opens ... ok
[INFO] [stdout] test toast::tests::the_newest_toast_is_the_one_rendered ... ok
[INFO] [stdout] test view::tests::only_the_enchants_that_roll_a_die_are_promised_more_procs ... ok
[INFO] [stdout] test view::tests::no_real_level_row_collides_with_its_xp_column ... ok
[INFO] [stdout] test view::tests::the_roster_lists_the_five_specials_and_only_them ... ok
[INFO] [stdout] test widget::tests::a_blast_is_painted_over_the_holes_it_has_just_made ... ok
[INFO] [stdout] test view::tests::the_mine_panels_figures_come_from_the_mine ... ok
[INFO] [stdout] test view::tests::the_projected_grid_is_the_standing_mines_own ... ok
[INFO] [stdout] test view::tests::the_colour_preference_is_what_the_read_model_carries ... ok
[INFO] [stdout] test widget::tests::a_broken_cell_is_the_absence_of_a_swatch ... ok
[INFO] [stdout] test widget::tests::a_flash_outranks_the_crack_on_the_target_under_it ... ok
[INFO] [stdout] test widget::tests::a_known_grid_paints_the_expected_cells ... ok
[INFO] [stdout] test widget::tests::one_frame_can_carry_both_beats_at_once ... ok
[INFO] [stdout] test widget::tests::a_flash_outside_the_grid_paints_nothing ... ok
[INFO] [stdout] test widget::tests::the_blast_takes_a_named_colour_at_sixteen ... ok
[INFO] [stdout] test view::tests::the_three_fixtures_agree_on_the_standing_mine ... ok
[INFO] [stdout] test widget::tests::a_ratio_outside_the_unit_range_still_draws_something ... ok
[INFO] [stdout] test widget::tests::the_grid_is_centred_in_the_area_it_is_given ... ok
[INFO] [stdout] test widget::tests::the_value_cell_keeps_its_stipple_in_sixteen_colours ... ok
[INFO] [stdout] test view::tests::the_reachability_marks_of_a_real_ladder_form_a_contiguous_prefix ... ok
[INFO] [stdout] test widget::tests::the_crack_fills_in_three_equal_bands ... ok
[INFO] [stdout] test widget::tests::a_flash_outranks_a_block_that_is_standing_again_under_it ... ok
[INFO] [stdout] test widget::tests::a_grid_larger_than_its_area_is_clipped_not_fatal ... ok
[INFO] [stdout] test widget::tests::an_empty_grid_draws_nothing_and_does_not_divide_by_its_own_size ... ok
[INFO] [stdout] test view::tests::the_reserve_is_projected_whether_or_not_a_boost_is_running ... ok
[INFO] [stdout] test widget::tests::the_two_beats_differ_in_coverage_and_not_only_in_colour ... ok
[INFO] [stdout] test view::tests::the_tier_jumps_dip_is_quoted_in_the_standing_mines_own_block ... ok
[INFO] [stdout] test view::tests::the_summed_price_is_payable_exactly_when_the_walk_is ... ok
[INFO] [stdout] test session::tests::continuing_a_save_plays_on_the_preferences_that_save_carried ... ok
[INFO] [stdout] test view::tests::an_owned_efficiency_rung_claims_no_unlock ... ok
[INFO] [stdout] test view::tests::an_owned_rung_and_a_chain_are_never_both_drawn ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 666 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.08s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04", kill_on_drop: false }`
[INFO] [stdout] 03f7598583cc6e72b8596e003ea8ee1420db2f0a342dbddbcb7879332c5c4e04
