[INFO] cloning repository https://github.com/f5xs-0000a/rusty_quartermaster
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/f5xs-0000a/rusty_quartermaster" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ff5xs-0000a%2Frusty_quartermaster", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ff5xs-0000a%2Frusty_quartermaster'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] ed8edaf94e7cc00445e58c834ad18107890d86d4
[INFO] testing f5xs-0000a/rusty_quartermaster against 1.100.0-beta.1+cargoflags=--release for beta-release-1.100-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ff5xs-0000a%2Frusty_quartermaster" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/f5xs-0000a/rusty_quartermaster
[INFO] finished tweaking git repo https://github.com/f5xs-0000a/rusty_quartermaster
[INFO] tweaked toml for git repo https://github.com/f5xs-0000a/rusty_quartermaster written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/f5xs-0000a/rusty_quartermaster 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 git repo https://github.com/f5xs-0000a/rusty_quartermaster 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] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52
[INFO] running `Command { std: "docker" "start" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52", 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" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52" "/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" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52", 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" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling log v0.4.32
[INFO] [stderr]    Compiling bitflags v2.13.0
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling siphasher v1.0.3
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling memchr v2.8.1
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling aws-lc-rs v1.17.0
[INFO] [stderr]    Compiling wayland-sys v0.31.11
[INFO] [stderr]    Compiling http v1.4.2
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling phf_shared v0.11.3
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling unicode-width v0.2.2
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling either v1.16.0
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling quick-xml v0.41.0
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling phf_generator v0.11.3
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]    Compiling unicode-segmentation v1.13.3
[INFO] [stderr]    Compiling phf_codegen v0.11.3
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling compact_str v0.9.1
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling lru v0.18.0
[INFO] [stderr]    Compiling string_cache_codegen v0.5.4
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling critical-section v1.2.0
[INFO] [stderr]    Compiling mac v0.1.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling mio v1.2.1
[INFO] [stderr]    Compiling cc v1.2.63
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling socket2 v0.6.4
[INFO] [stderr]    Compiling wayland-scanner v0.31.11
[INFO] [stderr]    Compiling precomputed-hash v0.1.1
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling futf v0.1.5
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling markup5ever v0.14.1
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling dtoa v1.0.11
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling utf-8 v0.7.6
[INFO] [stderr]    Compiling fixedbitset v0.5.7
[INFO] [stderr]    Compiling dtoa-short v0.3.5
[INFO] [stderr]    Compiling tendril v0.4.3
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling nom v8.0.0
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]    Compiling selectors v0.26.0
[INFO] [stderr]    Compiling petgraph v0.8.3
[INFO] [stderr]    Compiling line-clipping v0.3.7
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling aws-lc-sys v0.41.0
[INFO] [stderr]    Compiling wayland-backend v0.3.17
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling rustls-native-certs v0.8.4
[INFO] [stderr]    Compiling os_pipe v1.2.3
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling servo_arc v0.4.3
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling x11rb-protocol v0.13.2
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling getopts v0.2.24
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling ego-tree v0.10.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling strum_macros v0.28.0
[INFO] [stderr]    Compiling phf_macros v0.11.3
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling cssparser-macros v0.6.1
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling tree_magic_mini v3.2.2
[INFO] [stderr]    Compiling gethostname v1.1.0
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling phf v0.11.3
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling cssparser v0.34.0
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling wayland-client v0.31.15
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]    Compiling match_token v0.1.0
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling strum v0.28.0
[INFO] [stderr]    Compiling ratatui-core v0.1.1
[INFO] [stderr]    Compiling rusty_quartermaster v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling x11rb v0.13.2
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling wayland-protocols v0.32.13
[INFO] [stderr]    Compiling ratatui-widgets v0.3.1
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.1
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling string_cache v0.8.9
[INFO] [stderr]    Compiling chrono v0.4.45
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling ratatui-macros v0.7.1
[INFO] [stderr]    Compiling html5ever v0.29.1
[INFO] [stderr]    Compiling ratatui v0.30.1
[INFO] [stderr]    Compiling scraper v0.22.0
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling h2 v0.4.14
[INFO] [stderr]    Compiling wayland-protocols-wlr v0.3.12
[INFO] [stderr]    Compiling wl-clipboard-rs v0.9.4
[INFO] [stderr]    Compiling arboard v3.6.1
[INFO] [stderr]    Compiling hyper v1.10.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling rustls-platform-verifier v0.7.0
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.13.4
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 4m 30s
[INFO] running `Command { std: "docker" "inspect" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52", 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" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling rusty_quartermaster v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 1m 09s
[INFO] running `Command { std: "docker" "inspect" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52", 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" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.54s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/build/rusty_quartermaster/f8c954e72bbaae46/out/rusty_quartermaster-f8c954e72bbaae46)
[INFO] [stdout] 
[INFO] [stdout] running 342 tests
[INFO] [stdout] test app::battle_prompt_tests::new_battle_arms_prompt_without_touching_the_calculator ... ok
[INFO] [stdout] test app::battle_prompt_tests::keep_leaves_hull_and_tally_untouched ... ok
[INFO] [stdout] test app::battle_prompt_tests::black_ship_reveal_updates_the_open_prompt ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_mouse_finds_the_tabs_and_the_heads ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_wheel_scrolls_the_ranking ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_keys_walk_the_row_the_boxes_share ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_box_answers_for_its_tabs_and_its_ranking ... ok
[INFO] [stdout] test app::jobber_duty_tests::each_board_is_drawn_under_its_own_tab ... ok
[INFO] [stdout] test app::jobber_duty_tests::an_empty_box_names_what_would_fill_it ... ok
[INFO] [stdout] test app::jobber_duty_tests::a_written_run_is_no_longer_watched ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_mouse_dates_the_report_it_is_over ... ok
[INFO] [stdout] test app::jobber_duty_tests::a_layout_that_ranks_nothing_is_walked_without_it ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_boxes_stand_before_the_run_has_filled_them ... ok
[INFO] [stdout] test app::jobber_duty_tests::a_box_of_one_board_is_titled_for_it ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_popup_reads_the_run_duty_by_duty ... ok
[INFO] [stdout] test app::jobber_duty_tests::focus_leaves_a_box_that_is_no_longer_drawn ... ok
[INFO] [stdout] test app::restock_scope_tests::blank_query_is_ocean_wide ... ok
[INFO] [stdout] test app::map_cursor_tests::an_ocean_with_no_map_keeps_the_cursor_unplaced ... ok
[INFO] [stdout] test app::map_cursor_tests::a_view_point_that_is_no_longer_on_the_map_is_dropped ... ok
[INFO] [stdout] test app::map_cursor_tests::the_cached_view_point_comes_back ... ok
[INFO] [stdout] test app::restock_scope_tests::island_prefix_wins_over_archipelago_fuzz ... ok
[INFO] [stdout] test app::restock_scope_tests::unrecognized_text_is_unknown ... ok
[INFO] [stdout] test app::restock_scope_tests::island_name_resolves_to_a_single_island ... ok
[INFO] [stdout] test app::jobber_duty_tests::no_report_of_them_no_timelapse ... ok
[INFO] [stdout] test app::modal_mouse_tests::a_popup_takes_the_mouse_from_the_page_under_it ... ok
[INFO] [stdout] test app::restock_scope_tests::archipelago_name_fans_out_to_all_its_islands ... ok
[INFO] [stdout] test app::restock_scope_tests::archipelago_needs_geography ... ok
[INFO] [stdout] test app::topbar_tests::a_report_joins_the_run_under_the_hour_it_was_copied ... ok
[INFO] [stdout] test app::topbar_tests::a_report_of_the_crew_we_hold_changes_nothing ... ok
[INFO] [stdout] test app::topbar_tests::a_report_we_cannot_read_is_kept_for_a_crew_of_ours ... ok
[INFO] [stdout] test app::topbar_tests::a_report_that_hardly_agrees_asks_first ... ok
[INFO] [stdout] test app::topbar_tests::a_run_of_reports_and_no_battles_saves ... ok
[INFO] [stdout] test app::topbar_tests::a_run_we_walked_off_can_still_be_saved ... ok
[INFO] [stdout] test app::topbar_tests::a_bar_that_would_clip_a_label_is_not_drawn_at_all ... ok
[INFO] [stdout] test app::jobber_room_tests::the_vikings_box_leaves_out_a_standing_nobody_holds ... ok
[INFO] [stdout] test app::topbar_tests::a_terminal_under_the_shell_floor_says_so_instead_of_drawing_a_page ... ok
[INFO] [stdout] test app::topbar_tests::a_runs_reports_wait_in_the_cache_until_it_is_saved ... ok
[INFO] [stdout] test app::topbar_tests::slots_span_the_bar_and_never_starve_a_label ... ok
[INFO] [stdout] test app::topbar_tests::a_report_with_no_vessel_under_it_is_still_kept ... ok
[INFO] [stdout] test app::trophy_filter_tests::esc_dismisses_the_filter_before_it_closes_the_popup ... ok
[INFO] [stdout] test app::topbar_tests::an_earlier_sessions_reports_are_carried_on ... ok
[INFO] [stdout] test app::trophy_filter_tests::the_trophy_filter_takes_a_correction_mid_word ... ok
[INFO] [stdout] test app::topbar_tests::npcs_are_left_to_the_winners_roster ... ok
[INFO] [stdout] test app::topbar_tests::declining_the_prompt_leaves_the_roster_alone ... ok
[INFO] [stdout] test app::topbar_tests::every_label_is_drawn_whole_at_the_bar_minimum ... ok
[INFO] [stdout] test bare::tests::emerald_geography_is_filled_in ... ok
[INFO] [stdout] test bare::tests::forageables_are_seeded ... ok
[INFO] [stdout] test cache::tests::classifies_plain_swabbie_and_mercenary ... ok
[INFO] [stdout] test bare::tests::bare_cache_parses_and_is_populated ... ok
[INFO] [stdout] test cache::tests::a_run_stops_being_pending_after_a_week ... ok
[INFO] [stdout] test bare::tests::at_most_one_capital_per_archipelago ... ok
[INFO] [stdout] test bare::tests::gem_purchases_are_seeded ... ok
[INFO] [stdout] test cache::tests::learn_skips_specials_and_non_two_word ... ok
[INFO] [stdout] test cache::tests::name_segments_round_trip_through_cache ... ok
[INFO] [stdout] test chatlog::tests::a_booch_is_walked_off_by_doing_better ... ok
[INFO] [stdout] test cache::tests::learn_splits_adjective_and_name ... ok
[INFO] [stdout] test cache::tests::non_npc_inputs_are_none ... ok
[INFO] [stdout] test cache::tests::seeded_cache_pulls_vocabulary_from_bare ... ok
[INFO] [stdout] test cache::tests::the_map_cursor_rides_with_its_ocean ... ok
[INFO] [stdout] test chatlog::tests::a_better_station_answers_for_the_booched_one ... ok
[INFO] [stdout] test app::jobber_room_tests::the_views_that_scroll_keep_four_rows_in_the_least_room ... ok
[INFO] [stdout] test cache::tests::resolves_the_red_overlap ... ok
[INFO] [stdout] test app::topbar_tests::no_page_needs_more_width_than_the_ceiling ... ok
[INFO] [stdout] test app::jobber_room_tests::the_panes_take_the_rows_the_page_has_over ... ok
[INFO] [stdout] test app::jobber_room_tests::what_the_page_needs_does_not_move_with_the_roster ... ok
[INFO] [stdout] test chatlog::tests::a_dragoon_driven_off_seats_the_driver_aboard ... ok
[INFO] [stdout] test chatlog::tests::a_foe_driven_off_outside_atlantis_seats_nobody ... ok
[INFO] [stdout] test chatlog::tests::an_atlantis_fray_confirms_who_fought_and_drops_nobody ... ok
[INFO] [stdout] test chatlog::tests::back_to_back_fights_both_recorded ... ok
[INFO] [stdout] test chatlog::tests::bulk_board_after_tell_does_not_swap ... ok
[INFO] [stdout] test chatlog::tests::categorizes_brigand_king_and_defaults_to_brigand ... ok
[INFO] [stdout] test app::topbar_tests::a_report_that_mostly_agrees_adds_the_stragglers ... ok
[INFO] [stdout] test chatlog::tests::categorizes_vampirate_and_werewolf_heralds ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_boxes_take_their_room_from_the_pane_row ... ok
[INFO] [stdout] test chatlog::tests::black_ship_herald_tags_grand_frigate_foe ... ok
[INFO] [stdout] test chatlog::tests::a_late_boarder_starts_at_nothing ... ok
[INFO] [stdout] test chatlog::tests::clean_run_then_leave_is_not_poisoned ... ok
[INFO] [stdout] test chatlog::tests::a_duty_report_is_all_a_run_needs_to_be_one ... ok
[INFO] [stdout] test app::map_scroll_tests::the_wheel_over_the_island_column_scrolls_what_it_says ... ok
[INFO] [stdout] test chatlog::tests::attributes_planks_to_us ... ok
[INFO] [stdout] test chatlog::tests::booty_divided_marks_run_divvied ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_wave_records_capture_advantage_timeline ... ok
[INFO] [stdout] test chatlog::tests::either_dragoon_boarding_tell_marks_the_encounter ... ok
[INFO] [stdout] test chatlog::tests::counts_swabbies_from_deltas_and_saturates ... ok
[INFO] [stdout] test chatlog::tests::game_over_winners_override_crew_when_player_listed ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_counts_zombies_and_thralls ... ok
[INFO] [stdout] test chatlog::tests::divvy_without_port_marks_current_voyage ... ok
[INFO] [stdout] test chatlog::tests::grapple_promotes_jobbed_vessel_to_its_real_name ... ok
[INFO] [stdout] test chatlog::tests::greedy_splits_total_and_current_battle ... ok
[INFO] [stdout] test chatlog::tests::going_unrated_while_aboard_is_idling ... ok
[INFO] [stdout] test chatlog::tests::ignores_named_swabbie_aboard ... ok
[INFO] [stdout] test chatlog::tests::game_over_without_player_leaves_crew_alone ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_island_waves_count_enemies_and_classify ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_raft_phase_eliminations_not_counted ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_tell_marks_encounter_and_fires_jump_once ... ok
[INFO] [stdout] test chatlog::tests::ingest_real_log ... ignored
[INFO] [stdout] test chatlog::tests::island_wave_band_grows_with_wave ... ok
[INFO] [stdout] test chatlog::tests::jobbing_boards_a_provisional_vessel ... ok
[INFO] [stdout] test chatlog::tests::leaving_closes_the_run ... ok
[INFO] [stdout] test chatlog::tests::intercept_named_hull_seeds_foe_ship_and_display_name ... ok
[INFO] [stdout] test chatlog::tests::no_configured_name_is_always_unknown ... ok
[INFO] [stdout] test chatlog::tests::manpower_counts_reconnected_dropout ... ok
[INFO] [stdout] test chatlog::tests::intercept_then_disengage_is_disengaged ... ok
[INFO] [stdout] test chatlog::tests::outcome_unknown_until_identity_confirmed_then_retroactive ... ok
[INFO] [stdout] test chatlog::tests::jobbing_onto_another_ship_leaves_the_previous ... ok
[INFO] [stdout] test chatlog::tests::manpower_counts_leaver_excludes_disconnect ... ok
[INFO] [stdout] test chatlog::tests::new_run_resets_cursed_isles_state ... ok
[INFO] [stdout] test chatlog::tests::ignores_swabbie_npc_aboard ... ok
[INFO] [stdout] test chatlog::tests::parse_foe_vessel_reads_hull_and_strips_name ... ok
[INFO] [stdout] test chatlog::tests::parses_other_job_kinds ... ok
[INFO] [stdout] test app::jobber_room_tests::every_voyage_type_the_picker_offers_is_laid_out ... ok
[INFO] [stdout] test chatlog::tests::parses_very_hard_and_all_targets ... ok
[INFO] [stdout] test chatlog::tests::records_board_timestamp_from_header_and_line ... ok
[INFO] [stdout] test chatlog::tests::records_loss_with_negative_poe ... ok
[INFO] [stdout] test chatlog::tests::records_voyage_battle_and_loot ... ok
[INFO] [stdout] test chatlog::tests::sea_first_elimination_triggers_fight_jump_once ... ok
[INFO] [stdout] test chatlog::tests::stale_pursuit_ended_line_does_not_disengage_active_fight ... ok
[INFO] [stdout] test chatlog::tests::swabbies_leave_before_mercenaries ... ok
[INFO] [stdout] test chatlog::tests::poisons_on_leaving_mid_run ... ok
[INFO] [stdout] test chatlog::tests::parses_single_difficulty ... ok
[INFO] [stdout] test chatlog::tests::presence_tracking ... ok
[INFO] [stdout] test chatlog::tests::rum_spice_swap_sheds_one_mercenary ... ok
[INFO] [stdout] test chatlog::tests::vargas_only_on_rumble_waves_five_plus ... ok
[INFO] [stdout] test chatlog::tests::voyages_get_stable_distinct_ids ... ok
[INFO] [stdout] test chatlog::tests::re_boarding_keeps_poison ... ok
[INFO] [stdout] test chatlog::tests::rum_spice_limit_poisons_voyage ... ok
[INFO] [stdout] test chatlog::tests::pvp_detected_from_winners_on_loss ... ok
[INFO] [stdout] test chatlog::tests::whisking_home_leaves_the_jobbed_vessel ... ok
[INFO] [stdout] test chatlog::tests::relog_wipes_state ... ok
[INFO] [stdout] test clickmap::tests::only_the_topmost_layer_answers_to_a_click ... ok
[INFO] [stdout] test chatlog::tests::sea_battle_timeline_backfills_sides_at_resolution ... ok
[INFO] [stdout] test chatlog::tests::won_fight_resyncs_swabbie_count ... ok
[INFO] [stdout] test chatlog::tests::theft_is_capped_by_the_chest_balance ... ok
[INFO] [stdout] test chatlog::tests::rolls_date_over_midnight_without_a_new_header ... ok
[INFO] [stdout] test clipboard::tests::only_an_unreadable_report_carries_its_own_text ... ok
[INFO] [stdout] test chatlog::tests::vessels_ordered_latest_boarded_first ... ok
[INFO] [stdout] test chatlog::tests::winners_roster_backfills_merc_samples_to_ground_truth ... ok
[INFO] [stdout] test damage::tests::corrected_ship_stats ... ok
[INFO] [stdout] test clipboard::tests::tells_the_two_shapes_apart ... ok
[INFO] [stdout] test chatlog::tests::pvp_detected_from_enemy_player_elimination ... ok
[INFO] [stdout] test chatlog::tests::vampire_lair_tracks_waves_and_flags_leaving ... ok
[INFO] [stdout] test chatlog::tests::tracks_board_crew_and_greedy ... ok
[INFO] [stdout] test damage::tests::advantage_metrics ... ok
[INFO] [stdout] test chatlog::tests::parses_pillaging_range_and_targets ... ok
[INFO] [stdout] test chatlog::tests::won_roster_splits_mercenaries_from_swabbies ... ok
[INFO] [stdout] test duty::tests::a_report_we_cannot_read_is_still_recognized_as_one ... ok
[INFO] [stdout] test damage::tests::crew_range_infers_from_hull ... ok
[INFO] [stdout] test damage::tests::manpower_advantage_range_over_both_crews ... ok
[INFO] [stdout] test damage::tests::shots_left_saturates_at_zero_once_maxed ... ok
[INFO] [stdout] test duty::tests::a_kept_report_reads_back_whole ... ok
[INFO] [stdout] test duty::tests::a_pirates_run_is_read_duty_by_duty ... ok
[INFO] [stdout] test duty::tests::a_rated_pirate_who_earned_nothing_counts_nothing ... ok
[INFO] [stdout] test duty::tests::a_rank_we_have_no_word_for_keeps_the_report ... ok
[INFO] [stdout] test duty::tests::a_report_that_rated_them_at_nothing_is_still_a_column ... ok
[INFO] [stdout] test damage::tests::shots_left_accounts_for_damage_already_taken ... ok
[INFO] [stdout] test damage::tests::manpower_advantage_symmetric_sloops ... ok
[INFO] [stdout] test damage::tests::manpower_advantage_weights_by_morale ... ok
[INFO] [stdout] test damage::tests::ram_is_shared_and_hits_both_ships ... ok
[INFO] [stdout] test damage::tests::rock_damage_scales_with_own_morale_bar ... ok
[INFO] [stdout] test damage::tests::shots_left_counts_down_from_full_health ... ok
[INFO] [stdout] test duty::tests::a_stations_ranking_survives_the_parse ... ok
[INFO] [stdout] test duty::tests::what_we_cannot_read_is_kept_where_it_was_found ... ok
[INFO] [stdout] test hold::tests::parses_the_hold_blob ... ok
[INFO] [stdout] test duty::tests::a_runs_figures_are_summed_per_pirate ... ok
[INFO] [stdout] test duty::tests::the_marks_ladder_follows_the_ranks ... ok
[INFO] [stdout] test duty::tests::names_the_roster_once_each ... ok
[INFO] [stdout] test duty::tests::a_station_we_cannot_name_is_kept_whole ... ok
[INFO] [stdout] test duty::tests::only_those_who_made_some_are_counted ... ok
[INFO] [stdout] test islands::tests::lookup_ignores_case ... ok
[INFO] [stdout] test duty::tests::rejects_other_text ... ok
[INFO] [stdout] test duty::tests::the_metric_prefix_is_no_part_of_its_name ... ok
[INFO] [stdout] test hold::tests::rejects_other_text ... ok
[INFO] [stdout] test islands::tests::parses_every_block_and_tolerates_missing_lines ... ok
[INFO] [stdout] test jobbers::board_tests::a_haul_elsewhere_is_read_as_a_count ... ok
[INFO] [stdout] test duty::tests::other_json_is_not_kept_for_a_report ... ok
[INFO] [stdout] test jobbers::board_tests::a_heading_over_nobody_is_not_read ... ok
[INFO] [stdout] test islands::tests::a_page_without_islands_parses_to_nothing ... ok
[INFO] [stdout] test duty::tests::reads_every_station_the_report_listed ... ok
[INFO] [stdout] test jobbers::board_tests::a_ported_run_keeps_its_board ... ok
[INFO] [stdout] test hold::tests::empty_hold_is_still_a_hold ... ok
[INFO] [stdout] test jobbers::board_tests::a_blockade_boards_its_tokens_alone ... ok
[INFO] [stdout] test islands::tests::the_list_goes_stale_after_a_week ... ok
[INFO] [stdout] test jobbers::board_tests::a_column_ranks_on_itself_and_then_turns_around ... ok
[INFO] [stdout] test jobbers::board_tests::another_layout_has_no_board ... ok
[INFO] [stdout] test jobbers::tests::a_row_asks_only_for_the_tags_it_wears ... ok
[INFO] [stdout] test jobbers::board_tests::each_board_ranks_who_produced_its_figure ... ok
[INFO] [stdout] test jobbers::tests::a_note_breaks_at_its_newlines ... ok
[INFO] [stdout] test jobbers::tests::a_crewmate_is_tagged_with_their_rank ... ok
[INFO] [stdout] test jobbers::board_tests::only_those_still_aboard_are_named ... ok
[INFO] [stdout] test jobbers::board_tests::the_worst_are_read_first_and_once_is_read_quietly ... ok
[INFO] [stdout] test jobbers::board_tests::a_run_with_no_figures_stands_its_boards_empty ... ok
[INFO] [stdout] test jobbers::board_tests::a_run_with_no_tells_still_boards_its_figures ... ok
[INFO] [stdout] test jobbers::board_tests::the_isles_board_their_chests_by_the_tier ... ok
[INFO] [stdout] test jobbers::board_tests::the_isles_board_their_flower_first ... ok
[INFO] [stdout] test jobbers::tests::only_our_own_crew_is_tagged ... ok
[INFO] [stdout] test jobbers::tests::a_note_wraps_at_the_blanks_and_keeps_its_offsets ... ok
[INFO] [stdout] test jobbers::tests::staffing_is_clear_when_full_or_mercs_capped ... ok
[INFO] [stdout] test jobbers::tests::staffing_flags_understaffed_when_room_and_mercs_left ... ok
[INFO] [stdout] test jobbers::board_tests::stacked_panes_are_floored_before_they_are_shared ... ok
[INFO] [stdout] test map::tests::cursor_starts_on_the_first_island_and_follows_leagues ... ok
[INFO] [stdout] test jobbers::tests::staffing_is_invalid_when_over_either_cap ... ok
[INFO] [stdout] test jobbers::tests::tags_are_laid_against_the_right_edge ... ok
[INFO] [stdout] test jobbers::tests::the_plank_mark_marks_a_pirate_we_planked_before ... ok
[INFO] [stdout] test jobbers::tests::the_note_button_says_which_of_the_two_it_does ... ok
[INFO] [stdout] test jobbers::tests::the_notes_caret_steps_by_wrapped_line ... ok
[INFO] [stdout] test map::data::tests::the_approaches_to_an_island_are_joined ... ok
[INFO] [stdout] test map::tests::an_island_answers_to_the_name_the_chart_draws ... ok
[INFO] [stdout] test jobbers::tests::the_caret_is_found_in_the_wrapped_lines ... ok
[INFO] [stdout] test map::data::tests::a_drawn_name_is_the_place_s_own_name_said_shorter ... ok
[INFO] [stdout] test map::data::tests::no_league_crosses_a_point ... ok
[INFO] [stdout] test map::tests::a_key_with_no_exact_league_takes_the_only_diagonal_its_way ... ok
[INFO] [stdout] test map::tests::keys_are_harmless_without_a_map ... ok
[INFO] [stdout] test map::tests::selecting_a_point_returns_the_chart_to_the_cursor ... ok
[INFO] [stdout] test map::ui::tests::a_small_slide_on_the_nearer_row_beats_moving_a_row_away ... ok
[INFO] [stdout] test map::tests::space_toggles_memorized_and_a_league_follows_both_its_marks ... ok
[INFO] [stdout] test map::ui::tests::a_wrapped_line_hangs_under_the_one_it_continues ... ok
[INFO] [stdout] test map::ui::tests::a_boxed_in_label_takes_the_nearest_free_row ... ok
[INFO] [stdout] test map::tests::up_hands_focus_back_unless_the_search_is_open ... ok
[INFO] [stdout] test map::tests::search_owns_the_letters_and_enter_jumps_to_the_match ... ok
[INFO] [stdout] test map::ui::tests::a_name_keeps_out_of_the_cells_a_point_keeps ... ok
[INFO] [stdout] test map::tests::emerald_map_is_compiled_in_and_connected ... ok
[INFO] [stdout] test map::tests::help_is_modal_and_closes_on_question_mark_or_esc ... ok
[INFO] [stdout] test map::ui::tests::an_archipelago_named_with_its_article_is_said_without_another ... ok
[INFO] [stdout] test map::ui::tests::dump_caption_placement ... ignored, prints the caption placement for inspection
[INFO] [stdout] test map::ui::tests::dump_map_canvas ... ignored, prints the canvas for inspection
[INFO] [stdout] test map::ui::tests::dump_map_page ... ignored, prints the rendered Map page for inspection
[INFO] [stdout] test map::ui::tests::metadata_shows_yoweb_facts_once_the_island_list_is_in ... ok
[INFO] [stdout] test map::ui::tests::no_cell_holds_two_diagonals_on_any_map ... ok
[INFO] [stdout] test map::ui::tests::the_column_fits_the_longest_name_its_ocean_can_show ... ok
[INFO] [stdout] test map::ui::tests::metadata_reads_the_island_out_of_the_geography ... ok
[INFO] [stdout] test map::ui::tests::the_tally_counts_marks_that_are_on_the_map ... ok
[INFO] [stdout] test map::ui::tests::labels_keep_two_cells_from_the_point_and_prefer_the_right_side ... ok
[INFO] [stdout] test map::ui::tests::viewport_origin_centres_the_focus_without_overscrolling ... ok
[INFO] [stdout] test map::ui::tests::with_no_room_anywhere_the_label_is_cut_rather_than_dropped ... ok
[INFO] [stdout] test ocean::tests::defunct_oceans_are_rejected_with_context ... ok
[INFO] [stdout] test ocean::tests::from_str_is_case_insensitive ... ok
[INFO] [stdout] test ocean::tests::only_three_oceans_have_market_prices ... ok
[INFO] [stdout] test ocean::tests::unknown_oceans_are_rejected ... ok
[INFO] [stdout] test ocean::tests::yoweb_base_uses_lowercase_subdomain ... ok
[INFO] [stdout] test persistence::tests::a_note_of_blanks_erases_it ... ok
[INFO] [stdout] test persistence::tests::a_stray_report_copied_twice_is_kept_once ... ok
[INFO] [stdout] test map::ui::tests::a_wrapped_head_takes_a_row_from_the_window ... ok
[INFO] [stdout] test persistence::tests::marks_load_from_a_file_per_pirate ... ok
[INFO] [stdout] test persistence::tests::memorization_is_kept_per_pirate_within_an_ocean ... ok
[INFO] [stdout] test map::ui::tests::an_uncharted_league_is_drawn_once_both_its_ends_are_memorized ... ok
[INFO] [stdout] test map::ui::tests::click_boxes_reach_around_each_point_without_overlapping ... ok
[INFO] [stdout] test map::ui::tests::an_archipelago_name_stands_in_open_water ... ok
[INFO] [stdout] test map::ui::tests::every_archipelago_is_named_on_its_own_water ... ok
[INFO] [stdout] test persistence::tests::notes_are_kept_per_pirate_within_an_ocean ... ok
[INFO] [stdout] test persistence::tests::voyages_and_memorization_share_the_file ... ok
[INFO] [stdout] test map::ui::tests::the_frame_tallies_only_once_a_pirate_is_named ... ok
[INFO] [stdout] test persistence::tests::notes_and_memorization_share_an_ocean ... ok
[INFO] [stdout] test map::data::tests::points_a_league_apart_are_joined ... ok
[INFO] [stdout] test pirate::tests::a_partial_name_is_one_a_name_grows_out_of ... ok
[INFO] [stdout] test pirate::tests::a_pirate_shy_of_a_broad_is_a_greenie ... ok
[INFO] [stdout] test pirate::tests::flag_title_collapses_gendered_pairs ... ok
[INFO] [stdout] test pirate::tests::a_trophy_for_skill_outs_a_pirate_with_no_broad ... ok
[INFO] [stdout] test pirate::tests::a_whole_name_is_letters_and_at_most_one_suffix ... ok
[INFO] [stdout] test pirate::tests::basic_info_crew_and_flag_are_optional ... ok
[INFO] [stdout] test pirate::tests::parse_affiliation_absent_when_no_crew ... ok
[INFO] [stdout] test pirate::tests::parse_affiliation_extracts_rank_role_and_crew ... ok
[INFO] [stdout] test pirate::tests::parse_affiliation_role_when_crew_name_link_not_bold ... ok
[INFO] [stdout] test pirate::tests::malformed_names_are_rejected ... ok
[INFO] [stdout] test pirate::tests::experience_outside_the_duty_puzzles_does_not_count ... ok
[INFO] [stdout] test pirate::tests::crew_rank_classifies_known_and_unknown ... ok
[INFO] [stdout] test pirate::tests::npc_names_are_rejected ... ok
[INFO] [stdout] test app::voyage_scroll_tests::the_bar_walks_the_body_evenly_down_its_track ... ok
[INFO] [stdout] test pirate::tests::other_trophies_leave_a_greenie_green ... ok
[INFO] [stdout] test profits::tests::apply_hold_sets_stock_adds_rows_and_blanks_the_rest ... ok
[INFO] [stdout] test pirate::tests::one_broad_in_one_duty_puzzle_is_enough ... ok
[INFO] [stdout] test pirate::tests::parse_affiliation_handles_rank_and_crew_without_role ... ok
[INFO] [stdout] test pirate::tests::player_names_are_accepted ... ok
[INFO] [stdout] test pirate::tests::skill_category_groups_all_skills ... ok
[INFO] [stdout] test map::ui::tests::the_help_scrolls_in_a_window_too_short_for_it ... ok
[INFO] [stdout] test map::ui::tests::the_island_column_scrolls_what_it_cannot_fit ... ok
[INFO] [stdout] test pirate::tests::normalize_capitalizes_and_validates ... ok
[INFO] [stdout] test profits::tests::booty_goods_reads_booty_column_only ... ok
[INFO] [stdout] test profits::tests::declining_the_hold_prompt_changes_nothing ... ok
[INFO] [stdout] test profits::tests::queue_hold_resolves_names_and_keeps_unknowns ... ok
[INFO] [stdout] test startup::tests::a_name_too_short_is_refused_with_its_own_reason ... ok
[INFO] [stdout] test profits::tests::recorded_chest_prefers_field_then_deduces ... ok
[INFO] [stdout] test startup::tests::a_failed_lookup_fits_the_box_it_is_drawn_in ... ok
[INFO] [stdout] test startup::tests::the_title_is_offset_from_the_corner ... ok
[INFO] [stdout] test utils::tests::a_choice_highlight_takes_the_labels_and_a_column_either_side ... ok
[INFO] [stdout] test utils::tests::a_button_is_its_own_label_in_brackets ... ok
[INFO] [stdout] test utils::tests::a_scrollbar_is_a_click_region_on_its_own_column ... ok
[INFO] [stdout] test utils::tests::a_scrollbar_click_steps_at_the_ends_and_jumps_between_them ... ok
[INFO] [stdout] test startup::tests::the_name_is_centered_in_its_field ... ok
[INFO] [stdout] test profits::ui::inventory_tests::a_header_is_centered_over_its_column ... ok
[INFO] [stdout] test profits::ui::inventory_tests::a_popup_does_not_move_the_page_under_it ... ok
[INFO] [stdout] test utils::tests::a_scrollbar_points_the_way_the_view_can_travel ... ok
[INFO] [stdout] test utils::tests::a_view_that_fits_keeps_its_scrollbar_column ... ok
[INFO] [stdout] test profits::tests::hold_waits_behind_an_open_popup ... ok
[INFO] [stdout] test utils::tests::alt_makes_a_word_the_unit ... ok
[INFO] [stdout] test profits::tests::only_a_slash_puts_the_cursor_in_the_search ... ok
[INFO] [stdout] test utils::tests::a_search_answers_on_the_row_it_was_typed_on ... ok
[INFO] [stdout] test utils::tests::a_sideways_scrollbar_reads_along_its_row ... ok
[INFO] [stdout] test utils::tests::notice_is_centered_on_both_axes ... ok
[INFO] [stdout] test utils::tests::offset_title_is_centered_at_min_width ... ok
[INFO] [stdout] test startup::tests::the_field_takes_only_what_a_name_could_become ... ok
[INFO] [stdout] test startup::tests::the_prose_fits_the_rows_it_is_given ... ok
[INFO] [stdout] test utils::tests::only_a_paragraph_field_takes_a_newline ... ok
[INFO] [stdout] test utils::tests::wrap_words_hard_breaks_overlong_words ... ok
[INFO] [stdout] test voyage::persistence::tests::declining_a_fights_parts_keeps_the_fight ... ok
[INFO] [stdout] test voyage::persistence::tests::enemy_vessel_name_round_trips ... ok
[INFO] [stdout] test profits::ui::inventory_tests::a_narrow_table_is_centered_in_its_box ... ok
[INFO] [stdout] test voyage::persistence::tests::poison_flag_round_trips_and_flags_the_delta ... ok
[INFO] [stdout] test voyage::persistence::tests::saved_voyage_reconstructs_read_only_stats ... ok
[INFO] [stdout] test utils::tests::the_unopened_search_row_says_how_to_open_one ... ok
[INFO] [stdout] test utils::tests::wrap_words_breaks_on_spaces ... ok
[INFO] [stdout] test voyage::persistence::tests::snapshot_our_ship_derives_from_voyage_hull ... ok
[INFO] [stdout] test voyage::persistence::tests::booty_snapshot_round_trips ... ok
[INFO] [stdout] test profits::ui::inventory_tests::no_cell_region_escapes_the_page ... ok
[INFO] [stdout] test voyage::persistence::tests::snapshot_presence_marks_recorded ... ok
[INFO] [stdout] test voyage::persistence::tests::the_nested_parts_fall_with_the_engagements ... ok
[INFO] [stdout] test voyage::persistence::tests::every_part_reaches_the_file_by_default ... ok
[INFO] [stdout] test voyage::persistence::tests::team_split_round_trips_and_legacy_defaults ... ok
[INFO] [stdout] test voyage::persistence::tests::a_declined_part_is_written_absent_rather_than_empty ... ok
[INFO] [stdout] test voyage::stats::tests::battle_stats_attaches_sd_with_three_wins ... ok
[INFO] [stdout] test voyage::stats::tests::stdev_needs_three_points ... ok
[INFO] [stdout] test voyage::stats::tests::time_weighted_crew_average ... ok
[INFO] [stdout] test voyage::stats::tests::box_plot_five_number_summary ... ok
[INFO] [stdout] test voyage::stats::tests::consumption_from_stock_delta ... ok
[INFO] [stdout] test voyage::persistence::tests::a_voyage_of_reports_and_no_battles_is_kept_whole ... ok
[INFO] [stdout] test voyage::stats::tests::cannonballs_are_size_agnostic ... ok
[INFO] [stdout] test voyage::ui::tests::consumption_speaks_only_of_what_the_hold_lost ... ok
[INFO] [stdout] test voyage::ui::tests::a_long_goods_list_scrolls_rather_than_running_off_the_page ... ok
[INFO] [stdout] test voyage::ui::tests::a_nested_box_waits_on_the_one_above_it ... ok
[INFO] [stdout] test voyage::persistence::tests::timeline_round_trips_through_saved_battle ... ok
[INFO] [stdout] test voyage::stats::tests::battle_stats_aggregates_wins_losses_and_loot ... ok
[INFO] [stdout] test voyage::stats::tests::the_delta_is_flagged_unreliable_after_a_loss ... ok
[INFO] [stdout] test voyage::ui::tests::the_focus_chain_runs_from_the_boxes_to_the_buttons ... ok
[INFO] [stdout] test voyage::tests::advantage_series_unknown_their_start_uses_net_differential ... ok
[INFO] [stdout] test voyage::tests::weighted_series_scales_each_side ... ok
[INFO] [stdout] test voyage::ui::tests::panning_past_the_end_lands_on_the_last_of_the_goods ... ok
[INFO] [stdout] test voyage::tests::advantage_series_steps_and_axes ... ok
[INFO] [stdout] test profits::ui::inventory_tests::what_the_page_needs_does_not_move_with_the_focus ... ok
[INFO] [stdout] test map::data::tests::every_island_on_a_map_is_in_the_geography ... ok
[INFO] [stdout] test map::data::tests::every_live_ocean_has_a_map ... ok
[INFO] [stdout] test map::tests::the_help_reads_on_with_the_up_and_down_keys ... ok
[INFO] [stdout] test utils::tests::a_scrollbar_is_two_ends_and_a_thumb_inside_the_track ... ok
[INFO] [stdout] test map::ui::tests::every_place_is_named_whole_with_room_around_it ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 338 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 3.89s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/gallery.rs (/opt/rustwide/target/release/build/rusty_quartermaster/34e4aa8ba0f20151/out/gallery-34e4aa8ba0f20151)
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/build/rusty_quartermaster/25d995cb061758bb/out/rusty_quartermaster-25d995cb061758bb)
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 346 tests
[INFO] [stdout] test app::battle_prompt_tests::new_battle_arms_prompt_without_touching_the_calculator ... ok
[INFO] [stdout] test app::battle_prompt_tests::keep_leaves_hull_and_tally_untouched ... ok
[INFO] [stdout] test app::jobber_duty_tests::a_box_of_one_board_is_titled_for_it ... ok
[INFO] [stdout] test app::battle_prompt_tests::black_ship_reveal_updates_the_open_prompt ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_box_answers_for_its_tabs_and_its_ranking ... ok
[INFO] [stdout] test app::jobber_duty_tests::each_board_is_drawn_under_its_own_tab ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_popup_reads_the_run_duty_by_duty ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_wheel_scrolls_the_ranking ... ok
[INFO] [stdout] test app::jobber_duty_tests::a_written_run_is_no_longer_watched ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_boxes_stand_before_the_run_has_filled_them ... ok
[INFO] [stdout] test app::jobber_duty_tests::a_layout_that_ranks_nothing_is_walked_without_it ... ok
[INFO] [stdout] test app::jobber_duty_tests::no_report_of_them_no_timelapse ... ok
[INFO] [stdout] test app::jobber_duty_tests::an_empty_box_names_what_would_fill_it ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_keys_walk_the_row_the_boxes_share ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_mouse_finds_the_tabs_and_the_heads ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_mouse_dates_the_report_it_is_over ... ok
[INFO] [stdout] test app::jobber_duty_tests::the_boxes_take_their_room_from_the_pane_row ... ok
[INFO] [stdout] test app::restock_scope_tests::archipelago_needs_geography ... ok
[INFO] [stdout] test app::restock_scope_tests::blank_query_is_ocean_wide ... ok
[INFO] [stdout] test app::restock_scope_tests::island_prefix_wins_over_archipelago_fuzz ... ok
[INFO] [stdout] test app::restock_scope_tests::island_name_resolves_to_a_single_island ... ok
[INFO] [stdout] test app::topbar_tests::a_report_of_the_crew_we_hold_changes_nothing ... ok
[INFO] [stdout] test app::restock_scope_tests::archipelago_name_fans_out_to_all_its_islands ... ok
[INFO] [stdout] test app::topbar_tests::a_report_that_hardly_agrees_asks_first ... ok
[INFO] [stdout] test app::topbar_tests::a_report_that_mostly_agrees_adds_the_stragglers ... ok
[INFO] [stdout] test app::topbar_tests::a_report_we_cannot_read_is_kept_for_a_crew_of_ours ... ok
[INFO] [stdout] test app::map_cursor_tests::an_ocean_with_no_map_keeps_the_cursor_unplaced ... ok
[INFO] [stdout] test app::topbar_tests::a_run_of_reports_and_no_battles_saves ... ok
[INFO] [stdout] test app::map_cursor_tests::the_cached_view_point_comes_back ... ok
[INFO] [stdout] test app::topbar_tests::a_report_with_no_vessel_under_it_is_still_kept ... ok
[INFO] [stdout] test app::restock_scope_tests::unrecognized_text_is_unknown ... ok
[INFO] [stdout] test app::topbar_tests::a_bar_that_would_clip_a_label_is_not_drawn_at_all ... ok
[INFO] [stdout] test app::topbar_tests::a_report_joins_the_run_under_the_hour_it_was_copied ... ok
[INFO] [stdout] test app::modal_mouse_tests::a_popup_takes_the_mouse_from_the_page_under_it ... ok
[INFO] [stdout] test app::jobber_room_tests::the_views_that_scroll_keep_four_rows_in_the_least_room ... ok
[INFO] [stdout] test app::topbar_tests::a_runs_reports_wait_in_the_cache_until_it_is_saved ... ok
[INFO] [stdout] test app::jobber_room_tests::the_vikings_box_leaves_out_a_standing_nobody_holds ... ok
[INFO] [stdout] test app::topbar_tests::a_terminal_under_the_shell_floor_says_so_instead_of_drawing_a_page ... ok
[INFO] [stdout] test app::topbar_tests::a_run_we_walked_off_can_still_be_saved ... ok
[INFO] [stdout] test app::jobber_duty_tests::focus_leaves_a_box_that_is_no_longer_drawn ... ok
[INFO] [stdout] test app::trophy_filter_tests::esc_dismisses_the_filter_before_it_closes_the_popup ... ok
[INFO] [stdout] test app::topbar_tests::slots_span_the_bar_and_never_starve_a_label ... ok
[INFO] [stdout] test bare::tests::forageables_are_seeded ... ok
[INFO] [stdout] test app::topbar_tests::npcs_are_left_to_the_winners_roster ... ok
[INFO] [stdout] test app::trophy_filter_tests::the_trophy_filter_takes_a_correction_mid_word ... ok
[INFO] [stdout] test bare::tests::gem_purchases_are_seeded ... ok
[INFO] [stdout] test bare::tests::at_most_one_capital_per_archipelago ... ok
[INFO] [stdout] test app::topbar_tests::an_earlier_sessions_reports_are_carried_on ... ok
[INFO] [stdout] test app::topbar_tests::declining_the_prompt_leaves_the_roster_alone ... ok
[INFO] [stdout] test app::topbar_tests::every_label_is_drawn_whole_at_the_bar_minimum ... ok
[INFO] [stdout] test cache::tests::learn_skips_specials_and_non_two_word ... ok
[INFO] [stdout] test cache::tests::learn_splits_adjective_and_name ... ok
[INFO] [stdout] test cache::tests::classifies_plain_swabbie_and_mercenary ... ok
[INFO] [stdout] test cache::tests::a_run_stops_being_pending_after_a_week ... ok
[INFO] [stdout] test cache::tests::resolves_the_red_overlap ... ok
[INFO] [stdout] test chatlog::tests::a_booch_is_walked_off_by_doing_better ... ok
[INFO] [stdout] test chatlog::tests::a_dragoon_driven_off_seats_the_driver_aboard ... ok
[INFO] [stdout] test chatlog::tests::a_duty_report_is_all_a_run_needs_to_be_one ... ok
[INFO] [stdout] test chatlog::tests::a_foe_driven_off_outside_atlantis_seats_nobody ... ok
[INFO] [stdout] test cache::tests::the_map_cursor_rides_with_its_ocean ... ok
[INFO] [stdout] test cache::tests::name_segments_round_trip_through_cache ... ok
[INFO] [stdout] test cache::tests::non_npc_inputs_are_none ... ok
[INFO] [stdout] test cache::tests::seeded_cache_pulls_vocabulary_from_bare ... ok
[INFO] [stdout] test chatlog::tests::a_better_station_answers_for_the_booched_one ... ok
[INFO] [stdout] test app::topbar_tests::no_page_needs_more_width_than_the_ceiling ... ok
[INFO] [stdout] test app::jobber_room_tests::the_panes_take_the_rows_the_page_has_over ... ok
[INFO] [stdout] test chatlog::tests::a_late_boarder_starts_at_nothing ... ok
[INFO] [stdout] test chatlog::tests::black_ship_herald_tags_grand_frigate_foe ... ok
[INFO] [stdout] test chatlog::tests::bulk_board_after_tell_does_not_swap ... ok
[INFO] [stdout] test chatlog::tests::categorizes_vampirate_and_werewolf_heralds ... ok
[INFO] [stdout] test chatlog::tests::an_atlantis_fray_confirms_who_fought_and_drops_nobody ... ok
[INFO] [stdout] test chatlog::tests::attributes_planks_to_us ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_counts_zombies_and_thralls ... ok
[INFO] [stdout] test chatlog::tests::back_to_back_fights_both_recorded ... ok
[INFO] [stdout] test chatlog::tests::booty_divided_marks_run_divvied ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_island_waves_count_enemies_and_classify ... ok
[INFO] [stdout] test chatlog::tests::categorizes_brigand_king_and_defaults_to_brigand ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_raft_phase_eliminations_not_counted ... ok
[INFO] [stdout] test chatlog::tests::counts_swabbies_from_deltas_and_saturates ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_tell_marks_encounter_and_fires_jump_once ... ok
[INFO] [stdout] test chatlog::tests::cursed_isles_wave_records_capture_advantage_timeline ... ok
[INFO] [stdout] test chatlog::tests::game_over_without_player_leaves_crew_alone ... ok
[INFO] [stdout] test chatlog::tests::either_dragoon_boarding_tell_marks_the_encounter ... ok
[INFO] [stdout] test chatlog::tests::going_unrated_while_aboard_is_idling ... ok
[INFO] [stdout] test chatlog::tests::grapple_promotes_jobbed_vessel_to_its_real_name ... ok
[INFO] [stdout] test chatlog::tests::ingest_real_log ... ignored
[INFO] [stdout] test chatlog::tests::game_over_winners_override_crew_when_player_listed ... ok
[INFO] [stdout] test chatlog::tests::ignores_named_swabbie_aboard ... ok
[INFO] [stdout] test chatlog::tests::greedy_splits_total_and_current_battle ... ok
[INFO] [stdout] test chatlog::tests::ignores_swabbie_npc_aboard ... ok
[INFO] [stdout] test chatlog::tests::intercept_named_hull_seeds_foe_ship_and_display_name ... ok
[INFO] [stdout] test chatlog::tests::intercept_then_disengage_is_disengaged ... ok
[INFO] [stdout] test chatlog::tests::island_wave_band_grows_with_wave ... ok
[INFO] [stdout] test chatlog::tests::leaving_closes_the_run ... ok
[INFO] [stdout] test chatlog::tests::manpower_counts_leaver_excludes_disconnect ... ok
[INFO] [stdout] test chatlog::tests::manpower_counts_reconnected_dropout ... ok
[INFO] [stdout] test chatlog::tests::new_run_resets_cursed_isles_state ... ok
[INFO] [stdout] test chatlog::tests::outcome_unknown_until_identity_confirmed_then_retroactive ... ok
[INFO] [stdout] test chatlog::tests::jobbing_boards_a_provisional_vessel ... ok
[INFO] [stdout] test chatlog::tests::parses_other_job_kinds ... ok
[INFO] [stdout] test chatlog::tests::jobbing_onto_another_ship_leaves_the_previous ... ok
[INFO] [stdout] test chatlog::tests::no_configured_name_is_always_unknown ... ok
[INFO] [stdout] test chatlog::tests::parses_pillaging_range_and_targets ... ok
[INFO] [stdout] test chatlog::tests::parses_very_hard_and_all_targets ... ok
[INFO] [stdout] test chatlog::tests::pvp_detected_from_enemy_player_elimination ... ok
[INFO] [stdout] test chatlog::tests::pvp_detected_from_winners_on_loss ... ok
[INFO] [stdout] test chatlog::tests::re_boarding_keeps_poison ... ok
[INFO] [stdout] test chatlog::tests::parses_single_difficulty ... ok
[INFO] [stdout] test chatlog::tests::parse_foe_vessel_reads_hull_and_strips_name ... ok
[INFO] [stdout] test chatlog::tests::clean_run_then_leave_is_not_poisoned ... ok
[INFO] [stdout] test chatlog::tests::poisons_on_leaving_mid_run ... ok
[INFO] [stdout] test chatlog::tests::divvy_without_port_marks_current_voyage ... ok
[INFO] [stdout] test chatlog::tests::presence_tracking ... ok
[INFO] [stdout] test chatlog::tests::sea_battle_timeline_backfills_sides_at_resolution ... ok
[INFO] [stdout] test chatlog::tests::stale_pursuit_ended_line_does_not_disengage_active_fight ... ok
[INFO] [stdout] test chatlog::tests::swabbies_leave_before_mercenaries ... ok
[INFO] [stdout] test chatlog::tests::records_board_timestamp_from_header_and_line ... ok
[INFO] [stdout] test chatlog::tests::records_loss_with_negative_poe ... ok
[INFO] [stdout] test chatlog::tests::records_voyage_battle_and_loot ... ok
[INFO] [stdout] test chatlog::tests::relog_wipes_state ... ok
[INFO] [stdout] test chatlog::tests::rolls_date_over_midnight_without_a_new_header ... ok
[INFO] [stdout] test chatlog::tests::rum_spice_limit_poisons_voyage ... ok
[INFO] [stdout] test chatlog::tests::rum_spice_swap_sheds_one_mercenary ... ok
[INFO] [stdout] test chatlog::tests::sea_first_elimination_triggers_fight_jump_once ... ok
[INFO] [stdout] test chatlog::tests::theft_is_capped_by_the_chest_balance ... ok
[INFO] [stdout] test chatlog::tests::tracks_board_crew_and_greedy ... ok
[INFO] [stdout] test chatlog::tests::vampire_lair_tracks_waves_and_flags_leaving ... ok
[INFO] [stdout] test chatlog::tests::vargas_only_on_rumble_waves_five_plus ... ok
[INFO] [stdout] test chatlog::tests::vessels_ordered_latest_boarded_first ... ok
[INFO] [stdout] test chatlog::tests::winners_roster_backfills_merc_samples_to_ground_truth ... ok
[INFO] [stdout] test clipboard::tests::only_an_unreadable_report_carries_its_own_text ... ok
[INFO] [stdout] test damage::tests::crew_range_infers_from_hull ... ok
[INFO] [stdout] test damage::tests::corrected_ship_stats ... ok
[INFO] [stdout] test app::map_cursor_tests::a_view_point_that_is_no_longer_on_the_map_is_dropped ... ok
[INFO] [stdout] test bare::tests::bare_cache_parses_and_is_populated ... ok
[INFO] [stdout] test chatlog::tests::won_roster_splits_mercenaries_from_swabbies ... ok
[INFO] [stdout] test damage::tests::manpower_advantage_range_over_both_crews ... ok
[INFO] [stdout] test damage::tests::manpower_advantage_symmetric_sloops ... ok
[INFO] [stdout] test damage::tests::manpower_advantage_weights_by_morale ... ok
[INFO] [stdout] test damage::tests::shots_left_accounts_for_damage_already_taken ... ok
[INFO] [stdout] test damage::tests::ram_is_shared_and_hits_both_ships ... ok
[INFO] [stdout] test damage::tests::rock_damage_scales_with_own_morale_bar ... ok
[INFO] [stdout] test duty::tests::a_kept_report_reads_back_whole ... ok
[INFO] [stdout] test duty::tests::a_pirates_run_is_read_duty_by_duty ... ok
[INFO] [stdout] test damage::tests::shots_left_counts_down_from_full_health ... ok
[INFO] [stdout] test damage::tests::shots_left_saturates_at_zero_once_maxed ... ok
[INFO] [stdout] test duty::tests::a_rank_we_have_no_word_for_keeps_the_report ... ok
[INFO] [stdout] test duty::tests::a_rated_pirate_who_earned_nothing_counts_nothing ... ok
[INFO] [stdout] test duty::tests::a_report_that_rated_them_at_nothing_is_still_a_column ... ok
[INFO] [stdout] test duty::tests::a_report_we_cannot_read_is_still_recognized_as_one ... ok
[INFO] [stdout] test duty::tests::a_runs_figures_are_summed_per_pirate ... ok
[INFO] [stdout] test duty::tests::other_json_is_not_kept_for_a_report ... ok
[INFO] [stdout] test duty::tests::a_stations_ranking_survives_the_parse ... ok
[INFO] [stdout] test duty::tests::names_the_roster_once_each ... ok
[INFO] [stdout] test chatlog::tests::whisking_home_leaves_the_jobbed_vessel ... ok
[INFO] [stdout] test bare::tests::emerald_geography_is_filled_in ... ok
[INFO] [stdout] test duty::tests::only_those_who_made_some_are_counted ... ok
[INFO] [stdout] test duty::tests::rejects_other_text ... ok
[INFO] [stdout] test duty::tests::the_metric_prefix_is_no_part_of_its_name ... ok
[INFO] [stdout] test duty::tests::reads_every_station_the_report_listed ... ok
[INFO] [stdout] test duty::tests::the_marks_ladder_follows_the_ranks ... ok
[INFO] [stdout] test islands::tests::lookup_ignores_case ... ok
[INFO] [stdout] test hold::tests::parses_the_hold_blob ... ok
[INFO] [stdout] test duty::tests::what_we_cannot_read_is_kept_where_it_was_found ... ok
[INFO] [stdout] test duty::tests::a_station_we_cannot_name_is_kept_whole ... ok
[INFO] [stdout] test hold::tests::rejects_other_text ... ok
[INFO] [stdout] test hold::tests::empty_hold_is_still_a_hold ... ok
[INFO] [stdout] test islands::tests::a_page_without_islands_parses_to_nothing ... ok
[INFO] [stdout] test islands::tests::the_list_goes_stale_after_a_week ... ok
[INFO] [stdout] test jobbers::board_tests::a_blockade_boards_its_tokens_alone ... ok
[INFO] [stdout] test jobbers::board_tests::a_heading_over_nobody_is_not_read ... ok
[INFO] [stdout] test jobbers::board_tests::a_ported_run_keeps_its_board ... ok
[INFO] [stdout] test jobbers::board_tests::each_board_ranks_who_produced_its_figure ... ok
[INFO] [stdout] test jobbers::board_tests::only_those_still_aboard_are_named ... ok
[INFO] [stdout] test jobbers::board_tests::stacked_panes_are_floored_before_they_are_shared ... ok
[INFO] [stdout] test jobbers::board_tests::a_run_with_no_figures_stands_its_boards_empty ... ok
[INFO] [stdout] test islands::tests::parses_every_block_and_tolerates_missing_lines ... ok
[INFO] [stdout] test jobbers::board_tests::a_run_with_no_tells_still_boards_its_figures ... ok
[INFO] [stdout] test jobbers::board_tests::another_layout_has_no_board ... ok
[INFO] [stdout] test jobbers::board_tests::the_isles_board_their_flower_first ... ok
[INFO] [stdout] test chatlog::tests::won_fight_resyncs_swabbie_count ... ok
[INFO] [stdout] test jobbers::tests::a_row_asks_only_for_the_tags_it_wears ... ok
[INFO] [stdout] test jobbers::tests::a_note_breaks_at_its_newlines ... ok
[INFO] [stdout] test jobbers::tests::a_crewmate_is_tagged_with_their_rank ... ok
[INFO] [stdout] test jobbers::board_tests::a_column_ranks_on_itself_and_then_turns_around ... ok
[INFO] [stdout] test jobbers::tests::a_note_wraps_at_the_blanks_and_keeps_its_offsets ... ok
[INFO] [stdout] test jobbers::tests::only_our_own_crew_is_tagged ... ok
[INFO] [stdout] test jobbers::board_tests::a_haul_elsewhere_is_read_as_a_count ... ok
[INFO] [stdout] test jobbers::board_tests::the_isles_board_their_chests_by_the_tier ... ok
[INFO] [stdout] test jobbers::tests::staffing_is_clear_when_full_or_mercs_capped ... ok
[INFO] [stdout] test jobbers::tests::staffing_is_invalid_when_over_either_cap ... ok
[INFO] [stdout] test jobbers::tests::staffing_flags_understaffed_when_room_and_mercs_left ... ok
[INFO] [stdout] test jobbers::tests::the_notes_caret_steps_by_wrapped_line ... ok
[INFO] [stdout] test chatlog::tests::voyages_get_stable_distinct_ids ... ok
[INFO] [stdout] test app::jobber_room_tests::what_the_page_needs_does_not_move_with_the_roster ... ok
[INFO] [stdout] test clickmap::tests::only_the_topmost_layer_answers_to_a_click ... ok
[INFO] [stdout] test jobbers::tests::tags_are_laid_against_the_right_edge ... ok
[INFO] [stdout] test jobbers::tests::the_plank_mark_marks_a_pirate_we_planked_before ... ok
[INFO] [stdout] test jobbers::board_tests::the_worst_are_read_first_and_once_is_read_quietly ... ok
[INFO] [stdout] test jobbers::tests::the_caret_is_found_in_the_wrapped_lines ... ok
[INFO] [stdout] test map::data::tests::a_drawn_name_is_the_place_s_own_name_said_shorter ... ok
[INFO] [stdout] test jobbers::tests::the_note_button_says_which_of_the_two_it_does ... ok
[INFO] [stdout] test map::data::tests::every_island_on_a_map_is_in_the_geography ... ok
[INFO] [stdout] test map::data::tests::every_live_ocean_has_a_map ... ok
[INFO] [stdout] test map::tests::a_key_with_no_exact_league_takes_the_only_diagonal_its_way ... ok
[INFO] [stdout] test map::tests::search_owns_the_letters_and_enter_jumps_to_the_match ... ok
[INFO] [stdout] test map::tests::the_help_reads_on_with_the_up_and_down_keys ... ok
[INFO] [stdout] test map::tests::up_hands_focus_back_unless_the_search_is_open ... ok
[INFO] [stdout] test map::data::tests::no_league_crosses_a_point ... ok
[INFO] [stdout] test map::tests::selecting_a_point_returns_the_chart_to_the_cursor ... ok
[INFO] [stdout] test map::ui::tests::a_boxed_in_label_takes_the_nearest_free_row ... ok
[INFO] [stdout] test map::tests::space_toggles_memorized_and_a_league_follows_both_its_marks ... ok
[INFO] [stdout] test map::ui::tests::a_small_slide_on_the_nearer_row_beats_moving_a_row_away ... ok
[INFO] [stdout] test map::tests::an_island_answers_to_the_name_the_chart_draws ... ok
[INFO] [stdout] test map::tests::cursor_starts_on_the_first_island_and_follows_leagues ... ok
[INFO] [stdout] test map::ui::tests::a_name_keeps_out_of_the_cells_a_point_keeps ... ok
[INFO] [stdout] test map::ui::tests::a_wrapped_line_hangs_under_the_one_it_continues ... ok
[INFO] [stdout] test map::ui::tests::an_archipelago_named_with_its_article_is_said_without_another ... ok
[INFO] [stdout] test map::data::tests::the_approaches_to_an_island_are_joined ... ok
[INFO] [stdout] test clipboard::tests::tells_the_two_shapes_apart ... ok
[INFO] [stdout] test map::ui::tests::dump_caption_placement ... ignored, prints the caption placement for inspection
[INFO] [stdout] test map::ui::tests::dump_map_canvas ... ignored, prints the canvas for inspection
[INFO] [stdout] test map::ui::tests::dump_map_page ... ignored, prints the rendered Map page for inspection
[INFO] [stdout] test map::tests::keys_are_harmless_without_a_map ... ok
[INFO] [stdout] test damage::tests::advantage_metrics ... ok
[INFO] [stdout] test map::ui::tests::metadata_reads_the_island_out_of_the_geography ... ok
[INFO] [stdout] test map::ui::tests::the_column_fits_the_longest_name_its_ocean_can_show ... ok
[INFO] [stdout] test map::ui::tests::metadata_shows_yoweb_facts_once_the_island_list_is_in ... ok
[INFO] [stdout] test map::ui::tests::no_cell_holds_two_diagonals_on_any_map ... ok
[INFO] [stdout] test map::tests::emerald_map_is_compiled_in_and_connected ... ok
[INFO] [stdout] test map::tests::help_is_modal_and_closes_on_question_mark_or_esc ... ok
[INFO] [stdout] test map::data::tests::points_a_league_apart_are_joined ... ok
[INFO] [stdout] test map::ui::tests::labels_keep_two_cells_from_the_point_and_prefer_the_right_side ... ok
[INFO] [stdout] test map::ui::tests::a_wrapped_head_takes_a_row_from_the_window ... ok
[INFO] [stdout] test ocean::tests::defunct_oceans_are_rejected_with_context ... ok
[INFO] [stdout] test map::ui::tests::viewport_origin_centres_the_focus_without_overscrolling ... ok
[INFO] [stdout] test map::ui::tests::click_boxes_reach_around_each_point_without_overlapping ... ok
[INFO] [stdout] test app::map_scroll_tests::the_wheel_over_the_island_column_scrolls_what_it_says ... ok
[INFO] [stdout] test ocean::tests::from_str_is_case_insensitive ... ok
[INFO] [stdout] test map::ui::tests::an_uncharted_league_is_drawn_once_both_its_ends_are_memorized ... ok
[INFO] [stdout] test ocean::tests::only_three_oceans_have_market_prices ... ok
[INFO] [stdout] test map::ui::tests::the_tally_counts_marks_that_are_on_the_map ... ok
[INFO] [stdout] test map::ui::tests::with_no_room_anywhere_the_label_is_cut_rather_than_dropped ... ok
[INFO] [stdout] test ocean::tests::yoweb_base_uses_lowercase_subdomain ... ok
[INFO] [stdout] test persistence::tests::a_stray_report_copied_twice_is_kept_once ... ok
[INFO] [stdout] test persistence::tests::a_note_of_blanks_erases_it ... ok
[INFO] [stdout] test persistence::tests::memorization_is_kept_per_pirate_within_an_ocean ... ok
[INFO] [stdout] test persistence::tests::notes_are_kept_per_pirate_within_an_ocean ... ok
[INFO] [stdout] test map::ui::tests::the_island_column_scrolls_what_it_cannot_fit ... ok
[INFO] [stdout] test ocean::tests::unknown_oceans_are_rejected ... ok
[INFO] [stdout] test pirate::tests::a_partial_name_is_one_a_name_grows_out_of ... ok
[INFO] [stdout] test pirate::tests::a_pirate_shy_of_a_broad_is_a_greenie ... ok
[INFO] [stdout] test pirate::tests::a_whole_name_is_letters_and_at_most_one_suffix ... ok
[INFO] [stdout] test pirate::tests::a_trophy_for_skill_outs_a_pirate_with_no_broad ... ok
[INFO] [stdout] test persistence::tests::notes_and_memorization_share_an_ocean ... ok
[INFO] [stdout] test pirate::tests::malformed_names_are_rejected ... ok
[INFO] [stdout] test pirate::tests::crew_rank_classifies_known_and_unknown ... ok
[INFO] [stdout] test persistence::tests::marks_load_from_a_file_per_pirate ... ok
[INFO] [stdout] test pirate::tests::experience_outside_the_duty_puzzles_does_not_count ... ok
[INFO] [stdout] test pirate::tests::normalize_capitalizes_and_validates ... ok
[INFO] [stdout] test map::ui::tests::the_frame_tallies_only_once_a_pirate_is_named ... ok
[INFO] [stdout] test pirate::tests::flag_title_collapses_gendered_pairs ... ok
[INFO] [stdout] test pirate::tests::npc_names_are_rejected ... ok
[INFO] [stdout] test pirate::tests::one_broad_in_one_duty_puzzle_is_enough ... ok
[INFO] [stdout] test pirate::tests::other_trophies_leave_a_greenie_green ... ok
[INFO] [stdout] test pirate::tests::parse_affiliation_handles_rank_and_crew_without_role ... ok
[INFO] [stdout] test pirate::tests::parse_affiliation_absent_when_no_crew ... ok
[INFO] [stdout] test pirate::tests::parse_affiliation_extracts_rank_role_and_crew ... ok
[INFO] [stdout] test map::ui::tests::an_archipelago_name_stands_in_open_water ... ok
[INFO] [stdout] test persistence::tests::voyages_and_memorization_share_the_file ... ok
[INFO] [stdout] test map::ui::tests::every_archipelago_is_named_on_its_own_water ... ok
[INFO] [stdout] test pirate::tests::skill_category_groups_all_skills ... ok
[INFO] [stdout] test pirate::tests::parse_affiliation_role_when_crew_name_link_not_bold ... ok
[INFO] [stdout] test profits::tests::apply_hold_sets_stock_adds_rows_and_blanks_the_rest ... ok
[INFO] [stdout] test profits::tests::hold_waits_behind_an_open_popup ... ok
[INFO] [stdout] test profits::tests::only_a_slash_puts_the_cursor_in_the_search ... ok
[INFO] [stdout] test profits::tests::queue_hold_resolves_names_and_keeps_unknowns ... ok
[INFO] [stdout] test profits::tests::recorded_chest_prefers_field_then_deduces ... ok
[INFO] [stdout] test profits::tests::booty_goods_reads_booty_column_only ... ok
[INFO] [stdout] test profits::tests::declining_the_hold_prompt_changes_nothing ... ok
[INFO] [stdout] test startup::tests::a_name_too_short_is_refused_with_its_own_reason ... ok
[INFO] [stdout] test pirate::tests::player_names_are_accepted ... ok
[INFO] [stdout] test profits::ui::inventory_tests::a_header_is_centered_over_its_column ... ok
[INFO] [stdout] test startup::tests::the_prose_fits_the_rows_it_is_given ... ok
[INFO] [stdout] test startup::tests::the_title_is_offset_from_the_corner ... ok
[INFO] [stdout] test pirate::tests::basic_info_crew_and_flag_are_optional ... ok
[INFO] [stdout] test startup::tests::a_failed_lookup_fits_the_box_it_is_drawn_in ... ok
[INFO] [stdout] test startup::tests::the_name_is_centered_in_its_field ... ok
[INFO] [stdout] test tests::chat_log_identity_fails_closed_on_unknown_ocean ... ok
[INFO] [stdout] test startup::tests::the_field_takes_only_what_a_name_could_become ... ok
[INFO] [stdout] test profits::ui::inventory_tests::what_the_page_needs_does_not_move_with_the_focus ... ok
[INFO] [stdout] test profits::ui::inventory_tests::a_narrow_table_is_centered_in_its_box ... ok
[INFO] [stdout] test profits::ui::inventory_tests::a_popup_does_not_move_the_page_under_it ... ok
[INFO] [stdout] test utils::tests::a_button_is_its_own_label_in_brackets ... ok
[INFO] [stdout] test utils::tests::a_scrollbar_click_steps_at_the_ends_and_jumps_between_them ... ok
[INFO] [stdout] test tests::chat_log_identity_reads_name_and_ocean ... ok
[INFO] [stdout] test utils::tests::a_search_answers_on_the_row_it_was_typed_on ... ok
[INFO] [stdout] test utils::tests::a_choice_highlight_takes_the_labels_and_a_column_either_side ... ok
[INFO] [stdout] test utils::tests::notice_is_centered_on_both_axes ... ok
[INFO] [stdout] test utils::tests::a_view_that_fits_keeps_its_scrollbar_column ... ok
[INFO] [stdout] test utils::tests::offset_title_is_centered_at_min_width ... ok
[INFO] [stdout] test utils::tests::only_a_paragraph_field_takes_a_newline ... ok
[INFO] [stdout] test profits::ui::inventory_tests::no_cell_region_escapes_the_page ... ok
[INFO] [stdout] test utils::tests::wrap_words_breaks_on_spaces ... ok
[INFO] [stdout] test voyage::persistence::tests::a_voyage_of_reports_and_no_battles_is_kept_whole ... ok
[INFO] [stdout] test voyage::persistence::tests::booty_snapshot_round_trips ... ok
[INFO] [stdout] test utils::tests::the_unopened_search_row_says_how_to_open_one ... ok
[INFO] [stdout] test tests::chat_log_identity_ignores_a_full_directory_path ... ok
[INFO] [stdout] test voyage::persistence::tests::declining_a_fights_parts_keeps_the_fight ... ok
[INFO] [stdout] test voyage::persistence::tests::enemy_vessel_name_round_trips ... ok
[INFO] [stdout] test tests::chat_log_identity_keeps_hyphenated_name ... ok
[INFO] [stdout] test app::jobber_room_tests::every_voyage_type_the_picker_offers_is_laid_out ... ok
[INFO] [stdout] test utils::tests::wrap_words_hard_breaks_overlong_words ... ok
[INFO] [stdout] test voyage::persistence::tests::a_declined_part_is_written_absent_rather_than_empty ... ok
[INFO] [stdout] test utils::tests::a_scrollbar_points_the_way_the_view_can_travel ... ok
[INFO] [stdout] test utils::tests::alt_makes_a_word_the_unit ... ok
[INFO] [stdout] test utils::tests::a_scrollbar_is_a_click_region_on_its_own_column ... ok
[INFO] [stdout] test voyage::persistence::tests::snapshot_presence_marks_recorded ... ok
[INFO] [stdout] test utils::tests::a_sideways_scrollbar_reads_along_its_row ... ok
[INFO] [stdout] test voyage::persistence::tests::saved_voyage_reconstructs_read_only_stats ... ok
[INFO] [stdout] test voyage::persistence::tests::snapshot_our_ship_derives_from_voyage_hull ... ok
[INFO] [stdout] test voyage::persistence::tests::team_split_round_trips_and_legacy_defaults ... ok
[INFO] [stdout] test voyage::persistence::tests::the_nested_parts_fall_with_the_engagements ... ok
[INFO] [stdout] test voyage::persistence::tests::timeline_round_trips_through_saved_battle ... ok
[INFO] [stdout] test voyage::stats::tests::stdev_needs_three_points ... ok
[INFO] [stdout] test voyage::stats::tests::time_weighted_crew_average ... ok
[INFO] [stdout] test voyage::tests::advantage_series_steps_and_axes ... ok
[INFO] [stdout] test voyage::tests::advantage_series_unknown_their_start_uses_net_differential ... ok
[INFO] [stdout] test voyage::tests::weighted_series_scales_each_side ... ok
[INFO] [stdout] test voyage::stats::tests::cannonballs_are_size_agnostic ... ok
[INFO] [stdout] test voyage::stats::tests::consumption_from_stock_delta ... ok
[INFO] [stdout] test voyage::ui::tests::a_long_goods_list_scrolls_rather_than_running_off_the_page ... ok
[INFO] [stdout] test voyage::ui::tests::panning_past_the_end_lands_on_the_last_of_the_goods ... ok
[INFO] [stdout] test voyage::ui::tests::the_focus_chain_runs_from_the_boxes_to_the_buttons ... ok
[INFO] [stdout] test voyage::ui::tests::a_nested_box_waits_on_the_one_above_it ... ok
[INFO] [stdout] test voyage::ui::tests::consumption_speaks_only_of_what_the_hold_lost ... ok
[INFO] [stdout] test voyage::stats::tests::battle_stats_aggregates_wins_losses_and_loot ... ok
[INFO] [stdout] test voyage::persistence::tests::every_part_reaches_the_file_by_default ... ok
[INFO] [stdout] test voyage::persistence::tests::poison_flag_round_trips_and_flags_the_delta ... ok
[INFO] [stdout] test voyage::stats::tests::battle_stats_attaches_sd_with_three_wins ... ok
[INFO] [stdout] test voyage::stats::tests::box_plot_five_number_summary ... ok
[INFO] [stdout] test voyage::stats::tests::the_delta_is_flagged_unreliable_after_a_loss ... ok
[INFO] [stdout] test map::ui::tests::the_help_scrolls_in_a_window_too_short_for_it ... ok
[INFO] [stdout] test app::voyage_scroll_tests::the_bar_walks_the_body_evenly_down_its_track ... ok
[INFO] [stdout] test utils::tests::a_scrollbar_is_two_ends_and_a_thumb_inside_the_track ... ok
[INFO] [stdout] test map::ui::tests::every_place_is_named_whole_with_room_around_it ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 342 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 3.44s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests rusty_quartermaster
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52", kill_on_drop: false }`
[INFO] [stdout] 1b5c28be480f76a8846fd8a0a4267d851384ae52c085c8303a855d3128ecfc52
