[INFO] fetching crate wraith 0.0.3...
[INFO] testing wraith-0.0.3 against 1.100.0-beta.1 for beta-1.100-2
[INFO] extracting crate wraith 0.0.3 into /workspace/builds/worker-7-tc2/source
[INFO] started tweaking crates.io crate wraith 0.0.3
[INFO] finished tweaking crates.io crate wraith 0.0.3
[INFO] tweaked toml for crates.io crate wraith 0.0.3 written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate wraith 0.0.3 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 wraith 0.0.3 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+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-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] 51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a
[INFO] running `Command { std: "docker" "start" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a", 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" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a" "/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" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a", 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" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling log v0.4.33
[INFO] [stderr]    Compiling quote v1.0.46
[INFO] [stderr]    Compiling cc v1.2.67
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling const-oid v0.10.2
[INFO] [stderr]    Compiling hybrid-array v0.4.13
[INFO] [stderr]    Compiling wayland-sys v0.31.11
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling memchr v2.8.3
[INFO] [stderr]    Compiling base64ct v1.8.3
[INFO] [stderr]    Compiling bitflags v2.13.1
[INFO] [stderr]    Compiling cfg_aliases v0.2.2
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling socket2 v0.6.5
[INFO] [stderr]    Compiling rustls-pki-types v1.15.0
[INFO] [stderr]    Compiling portable-atomic v1.14.0
[INFO] [stderr]    Compiling wayland-client v0.31.14
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling spin v0.9.9
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling pem-rfc7468 v1.0.0
[INFO] [stderr]    Compiling rustls v0.23.42
[INFO] [stderr]    Compiling mio v1.2.2
[INFO] [stderr]    Compiling quinn-udp v0.5.15
[INFO] [stderr]    Compiling heapless v0.7.17
[INFO] [stderr]    Compiling curve25519-dalek v4.1.3
[INFO] [stderr]    Compiling curve25519-dalek v5.0.0
[INFO] [stderr]    Compiling der v0.8.1
[INFO] [stderr]    Compiling time-core v0.1.9
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]    Compiling siphasher v1.0.3
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling block-buffer v0.12.1
[INFO] [stderr]    Compiling crypto-common v0.2.2
[INFO] [stderr]    Compiling quick-xml v0.39.4
[INFO] [stderr]    Compiling tinyvec v1.12.0
[INFO] [stderr]    Compiling hash32 v0.2.1
[INFO] [stderr]    Compiling rand v0.10.2
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling quinn v0.11.11
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling rand_pcg v0.10.2
[INFO] [stderr]    Compiling signature v3.0.0
[INFO] [stderr]    Compiling lru-slab v0.1.2
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling futures-core v0.3.33
[INFO] [stderr]    Compiling futures-sink v0.3.33
[INFO] [stderr]    Compiling toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling hkdf v0.12.4
[INFO] [stderr]    Compiling clap_builder v4.6.2
[INFO] [stderr]    Compiling flume v0.12.0
[INFO] [stderr]    Compiling pem v3.0.6
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling socket-pktinfo v0.4.0
[INFO] [stderr]    Compiling fastbloom v0.17.0
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling if-addrs v0.15.0
[INFO] [stderr]    Compiling toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling thread_local v1.1.10
[INFO] [stderr]    Compiling x11rb-protocol v0.14.0
[INFO] [stderr]    Compiling toml v1.1.3+spec-1.1.0
[INFO] [stderr]    Compiling mdns-sd v0.20.2
[INFO] [stderr]    Compiling wayland-scanner v0.31.10
[INFO] [stderr]    Compiling digest v0.11.3
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling wayland-backend v0.3.15
[INFO] [stderr]    Compiling spki v0.8.0
[INFO] [stderr]    Compiling time v0.3.53
[INFO] [stderr]    Compiling sha2 v0.11.0
[INFO] [stderr]    Compiling pkcs8 v0.11.0
[INFO] [stderr]    Compiling regex-automata v0.4.16
[INFO] [stderr]    Compiling ed25519 v3.0.0
[INFO] [stderr]    Compiling yasna v0.6.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling curve25519-dalek-derive v0.1.1
[INFO] [stderr]    Compiling tokio-macros v2.7.1
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling tokio v1.53.0
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling rcgen v0.14.8
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling cobs v0.3.0
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling gethostname v1.1.0
[INFO] [stderr]    Compiling spake2 v0.4.0
[INFO] [stderr]    Compiling ed25519-dalek v3.0.0
[INFO] [stderr]    Compiling clap v4.6.2
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling postcard v1.1.3
[INFO] [stderr]    Compiling quinn-proto v0.11.16
[INFO] [stderr]    Compiling wayland-protocols v0.32.13
[INFO] [stderr]    Compiling x11rb v0.14.0
[INFO] [stderr]    Compiling wayland-protocols-misc v0.3.12
[INFO] [stderr]    Compiling wayland-protocols-wlr v0.3.12
[INFO] [stderr]    Compiling wraith v0.0.3 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 50.03s
[INFO] running `Command { std: "docker" "inspect" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a", 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" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a" "/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 getrandom v0.3.4
[INFO] [stderr]    Compiling zerocopy v0.8.54
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling regex-automata v0.4.16
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling quick-error v1.2.3
[INFO] [stderr]    Compiling unarray v0.1.4
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling rusty-fork v0.3.1
[INFO] [stderr]    Compiling rand v0.9.5
[INFO] [stderr]    Compiling rand_xorshift v0.4.0
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling wraith v0.0.3 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling proptest v1.11.0
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 22.54s
[INFO] running `Command { std: "docker" "inspect" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a", 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" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a" "/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.30s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/build/wraith/39f2f821a7fe5a95/out/wraith-39f2f821a7fe5a95)
[INFO] [stdout] 
[INFO] [stdout] running 464 tests
[INFO] [stdout] test config::tests::a_duplicate_screen_is_rejected ... ok
[INFO] [stdout] test config::tests::a_desk_survives_a_round_trip_through_disk ... ok
[INFO] [stdout] test config::tests::a_desk_without_this_machine_is_rejected ... ok
[INFO] [stdout] test config::tests::a_desk_of_peers_only_gains_a_screen_for_this_machine ... ok
[INFO] [stdout] test config::tests::a_healthy_desk_is_only_anchored ... ok
[INFO] [stdout] test config::tests::a_joined_desk_strands_nothing ... ok
[INFO] [stdout] test config::tests::a_key_of_the_wrong_length_does_not_decode ... ok
[INFO] [stdout] test config::tests::a_key_with_non_hex_characters_does_not_decode ... ok
[INFO] [stdout] test config::tests::a_keyless_screen_is_this_machine_under_an_older_name ... ok
[INFO] [stdout] test config::tests::a_machine_finds_a_name_for_itself ... ok
[INFO] [stdout] test config::tests::a_malformed_key_is_skipped_rather_than_failing_the_whole_store ... ok
[INFO] [stdout] test config::tests::a_name_is_one_label_whatever_the_system_answered ... ok
[INFO] [stdout] test config::tests::a_repair_writes_down_what_this_machine_is_called ... ok
[INFO] [stdout] test config::tests::a_repeated_suffix_does_not_confuse_the_shortening ... ok
[INFO] [stdout] test config::tests::a_peer_sharing_this_machines_name_is_not_adopted ... ok
[INFO] [stdout] test config::tests::a_second_placement_does_not_rewrite_the_name ... ok
[INFO] [stdout] test config::tests::a_stranded_screen_is_reported ... ok
[INFO] [stdout] test config::tests::a_valid_desk_passes ... ok
[INFO] [stdout] test config::tests::applying_a_grid_writes_screens_in_a_stable_order ... ok
[INFO] [stdout] test config::tests::an_absent_trust_store_reads_as_empty ... ok
[INFO] [stdout] test config::tests::a_trust_store_survives_a_round_trip ... ok
[INFO] [stdout] test config::tests::applying_a_grid_drops_what_it_no_longer_mentions ... ok
[INFO] [stdout] test config::tests::moving_a_screen_leaves_the_desk_valid ... ok
[INFO] [stdout] test config::tests::hex_round_trips ... ok
[INFO] [stdout] test config::tests::placing_a_screen_writes_down_what_this_machine_is_called ... ok
[INFO] [stdout] test config::tests::placing_the_first_peer_adds_this_machine_too ... ok
[INFO] [stdout] test config::tests::removing_a_peer_by_name_reports_whether_it_existed ... ok
[INFO] [stdout] test config::tests::renaming_leaves_peer_keys_alone ... ok
[INFO] [stdout] test config::tests::placing_onto_an_occupied_cell_is_refused ... ok
[INFO] [stdout] test config::tests::renaming_to_the_same_name_writes_nothing ... ok
[INFO] [stdout] test config::tests::renaming_to_a_dotted_name_is_refused ... ok
[INFO] [stdout] test config::tests::placing_records_the_identity_alongside_the_name ... ok
[INFO] [stdout] test config::tests::an_empty_desk_gains_no_screen ... ok
[INFO] [stdout] test config::tests::an_empty_desk_is_valid ... ok
[INFO] [stdout] test config::tests::an_old_edge_style_desk_says_what_to_do_about_it ... ok
[INFO] [stdout] test config::tests::the_derived_edges_survive_a_round_trip ... ok
[INFO] [stdout] test config::tests::an_identity_key_survives_a_round_trip ... ok
[INFO] [stdout] test config::tests::re_pairing_the_same_machine_updates_rather_than_duplicates ... ok
[INFO] [stdout] test config::tests::renaming_to_a_name_already_on_the_desk_is_refused ... ok
[INFO] [stdout] test config::tests::several_keyless_screens_are_left_alone_rather_than_guessed_at ... ok
[INFO] [stdout] test config::tests::renaming_this_machine_moves_its_screen_and_keeps_its_cell ... ok
[INFO] [stdout] test config::tests::two_different_machines_both_persist ... ok
[INFO] [stdout] test control::server::tests::a_slot_with_nothing_in_it_reports_no_pairing ... ok
[INFO] [stdout] test control::server::tests::a_running_offer_reports_what_is_left_of_it ... ok
[INFO] [stdout] test config::tests::two_screens_on_one_cell_are_rejected ... ok
[INFO] [stdout] test config::tests::whatever_the_system_answered_reaches_the_desk_undotted ... ok
[INFO] [stdout] test control::server::tests::a_timeout_is_typed_so_the_same_code_can_be_offered_again ... ok
[INFO] [stdout] test control::client::tests::a_cancel_that_is_never_used_leaves_the_exchange_alone ... ok
[INFO] [stdout] test control::tests::a_truncated_frame_is_an_error_rather_than_a_hang ... ok
[INFO] [stdout] test control::tests::a_frame_survives_the_reader ... ok
[INFO] [stdout] test control::server::tests::anything_else_keeps_its_sentence ... ok
[INFO] [stdout] test control::tests::a_refusal_the_window_acts_on_is_typed_rather_than_a_string ... ok
[INFO] [stdout] test domain::cursor::tests::a_pointer_report_during_the_settle_window_does_not_undo_the_entry_warp ... ok
[INFO] [stdout] test control::server::tests::a_watcher_is_sent_a_crossing_over_the_socket ... ok
[INFO] [stdout] test domain::cursor::tests::a_wide_screen_still_crosses_at_its_actual_edge ... ok
[INFO] [stdout] test control::server::tests::a_watcher_that_hangs_up_ends_the_stream ... ok
[INFO] [stdout] test domain::cursor::tests::away_from_home_it_takes_an_overshoot_and_not_a_touch ... ok
[INFO] [stdout] test domain::cursor::tests::crossing_back_immediately_is_refused_during_the_cooldown ... ok
[INFO] [stdout] test domain::cursor::tests::an_arriving_cursor_gets_the_same_cooldown_as_a_departing_one ... ok
[INFO] [stdout] test domain::cursor::tests::a_resync_corrects_a_drifted_position ... ok
[INFO] [stdout] test domain::cursor::tests::crossing_back_is_permitted_once_the_cooldown_expires ... ok
[INFO] [stdout] test control::server::tests::the_deadline_is_cleared_however_the_offer_ends ... ok
[INFO] [stdout] test control::tests::every_request_round_trips ... ok
[INFO] [stdout] test domain::cursor::tests::force_home_returns_the_cursor_from_a_remote_screen ... ok
[INFO] [stdout] test domain::cursor::tests::reaching_the_top_edge_and_still_rising_crosses_upward ... ok
[INFO] [stdout] test control::server::tests::an_offer_that_has_run_out_reports_nothing_rather_than_wrapping ... ok
[INFO] [stdout] test domain::cursor::tests::motion_within_the_screen_never_crosses ... ok
[INFO] [stdout] test domain::cursor::tests::a_corrected_position_is_not_by_itself_a_crossing ... ok
[INFO] [stdout] test domain::cursor::tests::sliding_along_an_edge_does_not_cross ... ok
[INFO] [stdout] test control::tests::every_response_round_trips ... ok
[INFO] [stdout] test domain::cursor::tests::taking_the_cursor_clears_the_sub_pixel_carry ... ok
[INFO] [stdout] test domain::cursor::tests::a_deliberate_shove_crosses ... ok
[INFO] [stdout] test domain::cursor::tests::the_horizontal_fraction_survives_a_vertical_crossing ... ok
[INFO] [stdout] test domain::cursor::tests::a_new_cursor_is_local ... ok
[INFO] [stdout] test domain::cursor::tests::the_crossing_preserves_the_height_it_left_at ... ok
[INFO] [stdout] test domain::cursor::tests::the_outer_boundary_of_the_desk_holds_the_cursor ... ok
[INFO] [stdout] test domain::cursor::tests::the_sub_pixel_carry_keeps_the_sign_of_the_motion ... ok
[INFO] [stdout] test domain::cursor::tests::where_it_crosses_is_where_it_was_along_the_edge ... ok
[INFO] [stdout] test domain::cursor::tests::the_position_is_clamped_to_the_screen ... ok
[INFO] [stdout] test control::client::tests::cancelling_ends_a_read_that_nothing_is_going_to_answer ... ok
[INFO] [stdout] test domain::grid::tests::a_cell_is_written_as_a_pair_on_one_line ... ok
[INFO] [stdout] test domain::grid::tests::a_clean_desk_has_no_collisions ... ok
[INFO] [stdout] test domain::grid::tests::a_diagonal_screen_is_not_a_neighbour ... ok
[INFO] [stdout] test domain::grid::tests::a_distant_cell_has_no_direction ... ok
[INFO] [stdout] test domain::cursor::tests::force_home_is_a_no_op_when_already_local ... ok
[INFO] [stdout] test domain::cursor::tests::force_home_works_from_anywhere_on_the_desk ... ok
[INFO] [stdout] test domain::grid::tests::a_cell_survives_a_round_trip_through_toml ... ok
[INFO] [stdout] test control::client::tests::nothing_running_says_so_rather_than_returning_an_errno ... ok
[INFO] [stdout] test domain::cursor::tests::motion_on_a_screen_the_layout_does_not_know_is_ignored ... ok
[INFO] [stdout] test domain::cursor::tests::crossing_a_wide_screen_takes_its_whole_width ... ok
[INFO] [stdout] test domain::grid::tests::a_step_and_its_opposite_return_to_where_they_started ... ok
[INFO] [stdout] test domain::grid::tests::a_diagonal_neighbour_has_no_direction ... ok
[INFO] [stdout] test domain::cursor::tests::motion_smaller_than_a_pixel_still_moves_the_cursor ... ok
[INFO] [stdout] test control::server::tests::a_mismatched_code_is_typed_rather_than_a_sentence ... ok
[INFO] [stdout] test domain::grid::tests::a_step_at_the_end_of_the_number_line_saturates ... ok
[INFO] [stdout] test domain::grid::tests::adjacency_yields_the_link_and_its_reciprocal ... ok
[INFO] [stdout] test domain::grid::tests::a_screen_not_on_the_desk_has_no_neighbours ... ok
[INFO] [stdout] test domain::grid::tests::a_step_moves_one_cell_in_each_direction ... ok
[INFO] [stdout] test domain::grid::tests::placing_reports_the_occupant_rather_than_stacking ... ok
[INFO] [stdout] test domain::grid::tests::a_stranded_screen_is_not_reachable ... ok
[INFO] [stdout] test domain::grid::tests::moving_a_screen_frees_the_cell_it_left ... ok
[INFO] [stdout] test domain::grid::tests::an_empty_desk_reports_the_origin_as_its_bounds ... ok
[INFO] [stdout] test domain::grid::tests::every_link_in_a_bigger_desk_is_reciprocal ... ok
[INFO] [stdout] test domain::grid::tests::everything_joined_is_reachable ... ok
[INFO] [stdout] test domain::grid::tests::nothing_is_reachable_from_a_screen_that_is_not_there ... ok
[INFO] [stdout] test domain::grid::tests::reachability_follows_a_corner ... ok
[INFO] [stdout] test domain::grid::tests::placing_a_screen_where_it_already_is_succeeds ... ok
[INFO] [stdout] test domain::grid::tests::the_free_cell_beside_an_empty_desk_is_the_adjacent_one ... ok
[INFO] [stdout] test domain::grid::tests::the_free_cell_walks_past_an_occupied_one ... ok
[INFO] [stdout] test domain::grid::tests::a_hand_written_collision_is_reported_rather_than_refused ... ok
[INFO] [stdout] test domain::grid::tests::the_free_cell_search_terminates_on_a_saturated_row ... ok
[INFO] [stdout] test domain::grid::tests::the_free_cell_walks_past_several ... ok
[INFO] [stdout] test domain::grid::tests::the_bounds_span_every_screen_including_negatives ... ok
[INFO] [stdout] test domain::grid::tests::a_gap_breaks_the_chain ... ok
[INFO] [stdout] test domain::cursor::tests::a_resync_is_ignored_while_the_cursor_is_away ... ok
[INFO] [stdout] test domain::ids::tests::fraction_of_a_zero_length_span_is_the_middle ... ok
[INFO] [stdout] test domain::ids::tests::fraction_round_trips_across_mismatched_resolutions ... ok
[INFO] [stdout] test domain::ids::tests::millis_since_saturates_rather_than_wrapping ... ok
[INFO] [stdout] test domain::input::tests::a_new_held_set_is_empty ... ok
[INFO] [stdout] test domain::input::tests::applying_release_events_empties_the_set ... ok
[INFO] [stdout] test domain::ids::tests::fraction_maps_non_finite_input_to_the_middle ... ok
[INFO] [stdout] test domain::ids::tests::fraction_clamps_out_of_range_input ... ok
[INFO] [stdout] test domain::ids::tests::peer_id_short_form_is_sixteen_hex_characters ... ok
[INFO] [stdout] test domain::input::tests::difference_against_an_identical_set_releases_nothing ... ok
[INFO] [stdout] test domain::input::tests::left_and_right_modifiers_map_to_the_same_bit ... ok
[INFO] [stdout] test domain::input::tests::every_modifier_scancode_maps_to_a_modifier_bit ... ok
[INFO] [stdout] test domain::input::tests::modifiers_are_derived_from_the_held_keys ... ok
[INFO] [stdout] test domain::input::tests::release_events_of_an_empty_set_are_empty ... ok
[INFO] [stdout] test domain::input::tests::release_events_put_modifiers_last ... ok
[INFO] [stdout] test domain::grid::tests::the_direction_between_touching_cells_is_reported ... ok
[INFO] [stdout] test domain::input::tests::motion_never_changes_the_held_set ... ok
[INFO] [stdout] test domain::grid::tests::a_screen_can_have_four_neighbours ... ok
[INFO] [stdout] test domain::ids::tests::fraction_end_lands_on_the_last_pixel_not_past_it ... ok
[INFO] [stdout] test domain::input::tests::difference_releases_only_what_the_other_set_lacks ... ok
[INFO] [stdout] test domain::input::tests::pressing_an_already_held_key_reports_no_change ... ok
[INFO] [stdout] test domain::input::tests::transitions_are_distinguished_from_motion ... ok
[INFO] [stdout] test domain::layout::tests::a_zero_sized_screen_is_rejected ... ok
[INFO] [stdout] test domain::layout::tests::a_crossing_round_trip_returns_to_roughly_where_it_left ... ok
[INFO] [stdout] test domain::input::tests::releasing_a_key_that_is_not_held_reports_no_change ... ok
[INFO] [stdout] test domain::layout::tests::crossing_preserves_the_fraction_across_mismatched_resolutions ... ok
[INFO] [stdout] test domain::layout::tests::a_duplicate_screen_is_rejected ... ok
[INFO] [stdout] test domain::layout::tests::a_one_pixel_wide_screen_does_not_produce_a_negative_coordinate ... ok
[INFO] [stdout] test domain::layout::tests::a_screen_cannot_be_its_own_neighbour ... ok
[INFO] [stdout] test domain::input::tests::release_events_put_buttons_before_keys ... ok
[INFO] [stdout] test domain::layout::tests::an_edge_cannot_lead_to_two_screens ... ok
[INFO] [stdout] test domain::layout::tests::an_unlinked_edge_leads_nowhere ... ok
[INFO] [stdout] test domain::ledger::tests::a_repeated_sequence_number_is_dropped ... ok
[INFO] [stdout] test domain::layout::tests::opposite_edges_round_trip ... ok
[INFO] [stdout] test domain::layout::tests::crossing_right_enters_on_the_left ... ok
[INFO] [stdout] test domain::layout::tests::the_entry_point_is_never_on_the_edge_it_entered_through ... ok
[INFO] [stdout] test domain::ledger::tests::motion_on_the_reliable_path_is_discarded ... ok
[INFO] [stdout] test domain::ledger::tests::no_snapshot_is_due_while_quiescent ... ok
[INFO] [stdout] test domain::ledger::tests::paranoid_release_covers_held_keys_before_the_sweep ... ok
[INFO] [stdout] test domain::ledger::tests::paranoid_release_sweeps_every_modifier_even_when_nothing_is_held ... ok
[INFO] [stdout] test domain::ledger::tests::reconcile_against_an_agreeing_sender_emits_nothing ... ok
[INFO] [stdout] test domain::ledger::tests::a_snapshot_resets_its_own_interval ... ok
[INFO] [stdout] test domain::ledger::tests::reconcile_does_not_press_keys_the_sender_holds_and_we_do_not ... ok
[INFO] [stdout] test domain::ledger::tests::a_stale_datagram_is_dropped ... ok
[INFO] [stdout] test domain::ledger::tests::reconcile_releases_exactly_what_the_sender_no_longer_claims ... ok
[INFO] [stdout] test domain::ledger::tests::release_all_orders_modifiers_last ... ok
[INFO] [stdout] test domain::ledger::tests::the_watchdog_deadline_resets_on_any_traffic ... ok
[INFO] [stdout] test domain::ledger::tests::the_watchdog_stays_silent_one_millisecond_before_the_deadline ... ok
[INFO] [stdout] test domain::ledger::tests::the_first_snapshot_after_a_press_is_immediate ... ok
[INFO] [stdout] test domain::layout::tests::crossing_left_enters_on_the_right ... ok
[INFO] [stdout] test domain::ledger::tests::the_sender_ledger_tracks_what_it_announced ... ok
[INFO] [stdout] test domain::layout::tests::linking_installs_the_reciprocal_edge ... ok
[INFO] [stdout] test domain::ledger::tests::the_watchdog_stays_silent_while_nothing_is_held ... ok
[INFO] [stdout] test domain::ledger::tests::transitions_update_the_held_set ... ok
[INFO] [stdout] test domain::notice::tests::a_watchdog_release_does_not_read_as_an_ordinary_disconnect ... ok
[INFO] [stdout] test domain::notice::tests::every_notice_says_something ... ok
[INFO] [stdout] test domain::notice::tests::no_two_notices_read_the_same ... ok
[INFO] [stdout] test domain::session::tests::a_crossing_carries_how_far_along_the_edge_it_was ... ok
[INFO] [stdout] test domain::session::tests::a_deliberate_shove_crosses_and_starts_suppressing ... ok
[INFO] [stdout] test domain::session::tests::a_desk_change_releases_what_was_held_on_the_screen_that_vanished ... ok
[INFO] [stdout] test domain::layout::tests::vertical_crossings_preserve_the_horizontal_fraction ... ok
[INFO] [stdout] test domain::session::tests::a_desk_change_that_keeps_the_current_screen_leaves_the_cursor_alone ... ok
[INFO] [stdout] test domain::session::tests::a_desk_change_that_removes_the_current_screen_brings_the_cursor_home ... ok
[INFO] [stdout] test domain::session::tests::a_crossing_lands_at_the_far_edge_of_the_real_screen ... ok
[INFO] [stdout] test domain::session::tests::a_new_session_has_the_cursor_at_home ... ok
[INFO] [stdout] test domain::session::tests::a_peer_leaving_releases_what_it_held_here ... ok
[INFO] [stdout] test domain::session::tests::a_peer_saying_the_cursor_arrived_warps_and_stops_suppressing ... ok
[INFO] [stdout] test domain::layout::tests::linking_is_rejected_when_the_reciprocal_edge_is_taken ... ok
[INFO] [stdout] test domain::session::tests::a_peer_going_quiet_releases_what_it_held ... ok
[INFO] [stdout] test domain::session::tests::a_peer_that_renamed_itself_is_recorded_under_the_new_name ... ok
[INFO] [stdout] test domain::session::tests::a_peer_handing_the_cursor_back_releases_suppression ... ok
[INFO] [stdout] test domain::ledger::tests::the_watchdog_fires_exactly_on_the_deadline ... ok
[INFO] [stdout] test domain::session::tests::a_peers_real_size_replaces_the_guess ... ok
[INFO] [stdout] test domain::session::tests::a_peer_placement_is_mirrored_before_being_saved ... ok
[INFO] [stdout] test domain::ledger::tests::a_dropped_frame_does_not_advance_the_sequence ... ok
[INFO] [stdout] test domain::ledger::tests::a_new_ledger_is_quiescent ... ok
[INFO] [stdout] test domain::ledger::tests::release_all_is_idempotent ... ok
[INFO] [stdout] test domain::session::tests::a_transition_goes_on_the_stream_and_motion_on_a_datagram ... ok
[INFO] [stdout] test domain::session::tests::an_agreeing_snapshot_produces_no_commands ... ok
[INFO] [stdout] test domain::ledger::tests::auto_repeat_is_still_forwarded_though_the_set_is_unchanged ... ok
[INFO] [stdout] test domain::layout::tests::linking_an_unknown_screen_is_rejected ... ok
[INFO] [stdout] test domain::ledger::tests::buttons_are_tracked_and_released_like_keys ... ok
[INFO] [stdout] test domain::session::tests::a_peer_whose_name_agrees_writes_nothing ... ok
[INFO] [stdout] test domain::ledger::tests::the_watchdog_fires_only_once_per_stuck_chord ... ok
[INFO] [stdout] test domain::session::tests::a_snapshot_is_sent_while_this_machine_holds_something_remotely ... ok
[INFO] [stdout] test domain::ledger::tests::a_snapshot_is_not_repeated_within_the_interval ... ok
[INFO] [stdout] test domain::session::tests::arriving_from_a_peer_announces_an_arrival ... ok
[INFO] [stdout] test domain::session::tests::a_self_detected_arrival_is_ordered_like_an_announced_one ... ok
[INFO] [stdout] test domain::session::tests::crossing_left_lands_on_the_far_desks_rightmost_monitor ... ok
[INFO] [stdout] test net::discovery::tests::a_link_local_address_is_better_than_nothing ... ok
[INFO] [stdout] test domain::session::tests::local_input_is_not_forwarded_while_the_cursor_is_here ... ok
[INFO] [stdout] test domain::session::tests::leaving_announces_a_departure_on_the_edge_left_by ... ok
[INFO] [stdout] test domain::session::tests::input_is_forwarded_once_the_cursor_is_remote ... ok
[INFO] [stdout] test domain::session::tests::arriving_input_from_a_peer_is_injected ... ok
[INFO] [stdout] test domain::session::tests::no_snapshot_is_sent_while_nothing_is_held ... ok
[INFO] [stdout] test net::discovery::tests::a_link_local_v6_address_loses_to_everything ... ok
[INFO] [stdout] test net::discovery::tests::a_machine_can_advertise_itself ... ignored, needs a network interface and a working mDNS responder
[INFO] [stdout] test domain::session::tests::losing_a_peer_releases_everything_it_held_immediately ... ok
[INFO] [stdout] test domain::session::tests::the_cursor_is_never_on_both_machines_at_once ... ok
[INFO] [stdout] test domain::session::tests::losing_the_peer_holding_the_cursor_brings_it_home ... ok
[INFO] [stdout] test net::discovery::tests::a_private_v4_address_wins ... ok
[INFO] [stdout] test domain::session::tests::going_home_is_not_reported_as_a_crossing ... ok
[INFO] [stdout] test domain::session::tests::step_clears_the_output_between_calls ... ok
[INFO] [stdout] test domain::session::tests::input_from_an_unknown_peer_is_ignored ... ok
[INFO] [stdout] test domain::session::tests::reconciliation_releases_what_the_peer_no_longer_claims ... ok
[INFO] [stdout] test domain::session::tests::the_pointer_is_warped_before_suppression_is_released ... ok
[INFO] [stdout] test domain::session::tests::going_home_releases_what_this_machine_had_announced ... ok
[INFO] [stdout] test net::endpoint::tests::a_server_endpoint_binds_and_reports_its_address ... ok
[INFO] [stdout] test net::discovery::tests::a_machine_announcing_nothing_is_not_reachable ... ok
[INFO] [stdout] test net::discovery::tests::the_service_type_is_scoped_to_wraith ... ok
[INFO] [stdout] test net::discovery::tests::a_short_key_is_sixteen_characters ... ok
[INFO] [stdout] test net::endpoint::tests::a_client_endpoint_binds ... ok
[INFO] [stdout] test net::endpoint::tests::an_empty_trust_set_still_produces_a_working_endpoint ... ok
[INFO] [stdout] test net::discovery::tests::loopback_is_used_when_it_is_all_there_is ... ok
[INFO] [stdout] test net::discovery::tests::a_short_key_is_a_prefix_of_the_full_one ... ok
[INFO] [stdout] test net::endpoint::tests::the_keepalive_beats_the_receiver_watchdog ... ok
[INFO] [stdout] test net::endpoint::tests::the_default_port_is_not_deskflows ... ok
[INFO] [stdout] test net::identity::tests::a_generated_identity_has_a_stable_peer_id ... ok
[INFO] [stdout] test net::identity::tests::a_malformed_identity_is_an_error_rather_than_a_fresh_key ... ok
[INFO] [stdout] test net::identity::tests::the_config_directory_honours_an_explicit_override ... ok
[INFO] [stdout] test net::pairing::tests::a_code_is_displayed_in_two_readable_halves ... ok
[INFO] [stdout] test net::discovery::tests::different_identities_have_different_short_keys ... ok
[INFO] [stdout] test net::discovery::tests::the_fe80_prefix_is_matched_across_its_whole_range ... ok
[INFO] [stdout] test net::identity::tests::credentials_do_not_print_the_private_key ... ok
[INFO] [stdout] test net::identity::tests::a_certificate_carries_the_identity_key_as_its_subject_key ... ok
[INFO] [stdout] test net::identity::tests::two_identities_differ ... ok
[INFO] [stdout] test net::pairing::tests::a_generated_code_has_the_right_shape ... ok
[INFO] [stdout] test net::endpoint::tests::the_ipv6_hint_reads_as_a_flag_rather_than_a_string ... ok
[INFO] [stdout] test net::pairing::tests::a_code_of_the_wrong_length_is_refused ... ok
[INFO] [stdout] test net::pairing::tests::a_code_never_prints_its_digits_in_debug ... ok
[INFO] [stdout] test net::discovery::tests::the_short_key_does_not_reveal_the_whole_identity ... ok
[INFO] [stdout] test net::verify::tests::a_certificate_carrying_two_candidate_keys_is_refused ... ok
[INFO] [stdout] test net::pairing::tests::a_code_parses_however_it_was_punctuated ... ok
[INFO] [stdout] test net::pairing::tests::tag_comparison_catches_a_difference_anywhere ... ok
[INFO] [stdout] test net::verify::tests::a_certificate_with_no_ed25519_key_yields_nothing ... ok
[INFO] [stdout] test net::verify::tests::a_machine_paired_after_the_verifier_was_built_is_trusted ... ok
[INFO] [stdout] test net::identity::tests::loading_an_absent_identity_generates_and_persists_one ... ok
[INFO] [stdout] test net::verify::tests::an_unpaired_peer_is_not_identified ... ok
[INFO] [stdout] test net::verify::tests::a_trusted_peer_is_identified ... ok
[INFO] [stdout] test net::verify::tests::client_authentication_is_mandatory ... ok
[INFO] [stdout] test net::verify::tests::an_empty_trust_set_accepts_nobody ... ok
[INFO] [stdout] test net::identity::tests::a_saved_identity_is_readable_only_by_its_owner ... ok
[INFO] [stdout] test net::identity::tests::replacing_an_identity_leaves_it_owner_only ... ok
[INFO] [stdout] test net::identity::tests::a_symlink_where_the_key_is_staged_is_refused_rather_than_followed ... ok
[INFO] [stdout] test net::verify::tests::replacing_the_trust_set_drops_what_is_no_longer_in_it ... ok
[INFO] [stdout] test net::identity::tests::an_identity_survives_a_round_trip_through_disk ... ok
[INFO] [stdout] test net::verify::tests::the_subject_key_is_found_in_a_real_certificate ... ok
[INFO] [stdout] test net::wire::tests::a_control_message_round_trips ... ok
[INFO] [stdout] test net::wire::tests::a_datagram_round_trips ... ok
[INFO] [stdout] test net::verify::tests::a_truncated_certificate_does_not_panic ... ok
[INFO] [stdout] test net::verify::tests::the_verifier_accepts_a_paired_peer_and_refuses_a_stranger ... ok
[INFO] [stdout] test net::wire::tests::every_control_variant_round_trips ... ok
[INFO] [stdout] test net::wire::tests::a_motion_datagram_is_small_enough_to_never_fragment ... ok
[INFO] [stdout] test net::wire::tests::a_frame_carries_its_own_length ... ok
[INFO] [stdout] test net::wire::tests::a_length_at_the_limit_is_accepted ... ok
[INFO] [stdout] test net::wire::tests::an_oversized_announced_length_is_refused_before_allocating ... ok
[INFO] [stdout] test net::wire::tests::garbage_decodes_to_an_error_rather_than_a_panic ... ok
[INFO] [stdout] test net::wire::tests::no_datagram_is_built_from_no_motion ... ok
[INFO] [stdout] test peers::tests::a_key_is_shortened_for_display ... ok
[INFO] [stdout] test platform::linux::wlroots::tests::an_exotic_button_does_not_collide_with_a_standard_one ... ok
[INFO] [stdout] test platform::linux::wlroots::tests::the_keymap_file_works_and_has_no_path_to_plant_against ... ok
[INFO] [stdout] test platform::linux::wlroots::tests::the_keymap_names_the_evdev_rules ... ok
[INFO] [stdout] test platform::linux::x11::tests::a_hostile_scroll_value_cannot_wedge_the_injector_thread ... ok
[INFO] [stdout] test platform::linux::x11::tests::an_evdev_scancode_is_an_x11_keycode_minus_eight ... ok
[INFO] [stdout] test platform::linux::wlroots::tests::a_compositor_missing_everything_names_everything ... ok
[INFO] [stdout] test platform::linux::wlroots::tests::the_common_buttons_use_their_evdev_codes ... ok
[INFO] [stdout] test platform::linux::wlroots::tests::no_two_buttons_share_a_code ... ok
[INFO] [stdout] test peers::tests::a_short_key_is_shown_whole_rather_than_panicking ... ok
[INFO] [stdout] test platform::linux::x11::tests::coordinates_beyond_the_wire_format_saturate_rather_than_wrapping ... ok
[INFO] [stdout] test platform::linux::x11::tests::ordinary_scrolling_is_untouched_by_the_bound ... ok
[INFO] [stdout] test platform::linux::x11::tests::the_common_buttons_map_to_the_x11_numbering ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::a_device_name_that_is_not_utf8_does_not_panic ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::a_keycode_below_the_offset_saturates_rather_than_wrapping ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::a_real_device_is_not_mistaken_for_xtest ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::a_wheel_release_is_dropped_so_scrolling_is_not_doubled ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::an_x11_keycode_becomes_an_evdev_scancode ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::back_and_forward_survive_the_scroll_range ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::motion_on_a_single_axis_device_does_not_panic ... ok
[INFO] [stdout] test net::wire::tests::the_clipboard_variant_is_last ... ok
[INFO] [stdout] test net::verify::tests::key_comparison_agrees_with_equality ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::motion_with_no_movement_is_dropped ... ok
[INFO] [stdout] test net::wire::tests::a_truncated_frame_does_not_panic ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::sub_pixel_motion_keeps_three_decimal_places ... ok
[INFO] [stdout] test net::wire::tests::the_framing_carries_something_that_is_not_a_control_message ... ok
[INFO] [stdout] test platform::probe::tests::a_failed_probe_explains_every_rejection ... ok
[INFO] [stdout] test platform::probe::tests::a_plain_x11_session_chooses_x11 ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::the_xtest_devices_are_recognised_by_name ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::wheel_buttons_become_scroll_rather_than_clicks ... ok
[INFO] [stdout] test platform::linux::x11::tests::back_and_forward_skip_the_scroll_button_range ... ok
[INFO] [stdout] test platform::probe::tests::a_portal_older_than_version_two_is_rejected ... ok
[INFO] [stdout] test platform::probe::tests::a_wayland_session_with_neither_portal_nor_wlroots_falls_back_to_x11 ... ok
[INFO] [stdout] test platform::probe::tests::hyprland_chooses_wlroots ... ok
[INFO] [stdout] test platform::probe::tests::the_portal_wins_over_wlroots_when_both_are_available ... ok
[INFO] [stdout] test platform::probe::tests::wlroots_wins_over_x11_on_a_wayland_session ... ok
[INFO] [stdout] test platform::probe::tests::x11_without_xtest_is_rejected_with_a_reason ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::the_common_buttons_translate ... ok
[INFO] [stdout] test platform::probe::tests::a_wayland_session_without_the_protocols_names_them ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::whole_pixel_motion_converts_exactly ... ok
[INFO] [stdout] test platform::linux::x11_capture::tests::the_fraction_is_added_even_when_the_integral_is_negative ... ok
[INFO] [stdout] test platform::probe::tests::gnome_wayland_chooses_the_portal ... ok
[INFO] [stdout] test platform::service::tests::a_case_insensitive_sibling_of_itself_is_refused ... ok
[INFO] [stdout] test platform::probe::tests::a_headless_session_chooses_nothing ... ok
[INFO] [stdout] test platform::service::tests::a_sibling_is_preferred_to_the_path ... ok
[INFO] [stdout] test platform::service::tests::colour_codes_do_not_reach_the_window ... ok
[INFO] [stdout] test platform::service::tests::the_log_tail_is_what_the_error_carries ... ok
[INFO] [stdout] test platform::socket::tests::a_stale_socket_is_cleared_by_the_next_daemon ... ok
[INFO] [stdout] test platform::service::tests::the_cli_runs_itself ... ok
[INFO] [stdout] test platform::service::tests::the_window_does_not_run_itself ... ok
[INFO] [stdout] test platform::service::tests::a_line_without_escapes_is_untouched ... ok
[INFO] [stdout] test platform::socket::tests::a_socket_file_that_refuses_reads_as_stale ... ok
[INFO] [stdout] test ports::clipboard::tests::a_foreign_mime_is_not_text ... ok
[INFO] [stdout] test ports::clipboard::tests::debug_never_prints_the_bytes ... ok
[INFO] [stdout] test ports::fake::tests::a_failing_injector_reports_every_emit_as_an_error ... ok
[INFO] [stdout] test platform::service::tests::a_missing_log_still_says_where_it_looked ... ok
[INFO] [stdout] test platform::socket::tests::a_second_daemon_refuses_rather_than_displacing_the_first ... ok
[INFO] [stdout] test ports::fake::tests::suppression_is_observable ... ok
[INFO] [stdout] test platform::socket::tests::nothing_there_reads_as_absent ... ok
[INFO] [stdout] test ports::clipboard::tests::text_carries_the_utf8_mime_and_the_bytes ... ok
[INFO] [stdout] test platform::service::tests::the_bundled_cli_is_found_beside_the_window ... ok
[INFO] [stdout] test platform::socket::tests::the_runtime_directory_is_named_for_the_real_user ... ok
[INFO] [stdout] test ports::permissions::tests::a_missing_grant_is_offered_capture_first ... ok
[INFO] [stdout] test ports::fake::tests::a_scripted_capture_drains_one_batch_per_poll ... ok
[INFO] [stdout] test ports::fake::tests::an_exhausted_capture_polls_empty_rather_than_failing ... ok
[INFO] [stdout] test ports::fake::tests::the_log_outlives_the_injector ... ok
[INFO] [stdout] test platform::socket::tests::an_explicit_path_wins_over_the_runtime_directory ... ok
[INFO] [stdout] test ports::fake::tests::the_recording_injector_keeps_every_event_in_order ... ok
[INFO] [stdout] test ports::permissions::tests::a_complete_set_explains_nothing ... ok
[INFO] [stdout] test ports::permissions::tests::each_half_says_what_specifically_breaks ... ok
[INFO] [stdout] test ports::permissions::tests::the_default_makes_no_claim_and_blocks_nothing ... ok
[INFO] [stdout] test run::bench::tests::a_duration_is_shown_in_a_unit_that_reveals_it ... ok
[INFO] [stdout] test run::bench::tests::a_fast_run_is_within_budget ... ok
[INFO] [stdout] test run::bench::tests::a_percentile_picks_the_nearest_rank ... ok
[INFO] [stdout] test ports::permissions::tests::every_missing_grant_can_be_named_on_a_button ... ok
[INFO] [stdout] test run::bench::tests::a_percentile_of_one_sample_is_that_sample ... ok
[INFO] [stdout] test run::bench::tests::a_run_over_the_p99_budget_is_reported_as_over ... ok
[INFO] [stdout] test run::bench::tests::a_percentile_of_nothing_is_zero_rather_than_a_panic ... ok
[INFO] [stdout] test run::bench::tests::a_single_outlier_in_a_hundred_does_not_move_the_p99 ... ok
[INFO] [stdout] test run::bench::tests::a_sub_microsecond_duration_does_not_render_as_zero ... ok
[INFO] [stdout] test run::clipboard::tests::a_copy_racing_a_handover_is_not_marked_as_delivered ... ok
[INFO] [stdout] test ports::permissions::tests::nothing_is_missing_where_nothing_is_gated ... ok
[INFO] [stdout] test run::clipboard::tests::a_lost_peer_is_forgotten ... ok
[INFO] [stdout] test run::bench::tests::a_report_sorts_what_it_is_given ... ok
[INFO] [stdout] test run::bench::tests::a_run_over_the_p50_budget_is_reported_as_over ... ok
[INFO] [stdout] test run::clipboard::tests::a_new_copy_after_a_handover_is_pending_again ... ok
[INFO] [stdout] test run::bench::tests::a_report_counts_only_the_measured_samples ... ok
[INFO] [stdout] test ports::permissions::tests::nothing_to_grant_is_not_the_same_as_granted_but_both_are_fine ... ok
[INFO] [stdout] test run::clipboard::tests::a_peer_is_handed_a_copy_only_once ... ok
[INFO] [stdout] test run::clipboard::tests::adopting_the_bytes_we_already_hold_is_not_a_new_copy ... ok
[INFO] [stdout] test ports::permissions::tests::one_grant_alone_is_still_broken ... ok
[INFO] [stdout] test run::clipboard::tests::an_adopted_clipboard_still_crosses_to_a_third_machine ... ok
[INFO] [stdout] test run::clipboard::tests::settling_never_walks_a_peer_backwards ... ok
[INFO] [stdout] test run::clipboard::tests::the_same_bytes_seen_again_are_not_a_new_copy ... ok
[INFO] [stdout] test run::dump::tests::a_key_press_names_its_scancode_in_decimal ... ok
[INFO] [stdout] test run::dump::tests::motion_is_shown_in_whole_pixels_with_the_fraction_kept ... ok
[INFO] [stdout] test run::clipboard::tests::an_adopted_clipboard_is_never_handed_back_to_the_peer_it_came_from ... ok
[INFO] [stdout] test run::dump::tests::every_event_kind_renders ... ok
[INFO] [stdout] test run::injector::tests::a_failing_backend_does_not_panic_the_destructor ... ok
[INFO] [stdout] test run::injector::tests::an_explicit_release_is_idempotent ... ok
[INFO] [stdout] test run::bench::tests::the_transition_codec_is_far_inside_the_budget ... ok
[INFO] [stdout] test run::injector::tests::dropping_the_session_sweeps_every_modifier_even_if_nothing_was_held ... ok
[INFO] [stdout] test run::injector::tests::dropping_the_session_releases_what_it_held ... ok
[INFO] [stdout] test run::injector::tests::dropping_the_handle_waits_for_the_thread_to_let_go ... ok
[INFO] [stdout] test run::injector::tests::a_closed_channel_releases_without_being_asked ... ok
[INFO] [stdout] test run::pair::tests::a_bare_host_gets_the_default_port ... ok
[INFO] [stdout] test run::pair::tests::a_recorded_address_points_at_the_session_not_the_pairing_port ... ok
[INFO] [stdout] test run::pair::tests::a_side_is_parsed_from_a_letter_or_a_word ... ok
[INFO] [stdout] test run::pair::tests::an_explicit_port_is_honoured ... ok
[INFO] [stdout] test run::pair::tests::an_unrecognised_side_is_not_guessed_at ... ok
[INFO] [stdout] test run::clipboard::tests::a_set_reaches_the_backend ... ok
[INFO] [stdout] test run::pair::tests::an_unresolvable_host_names_itself_in_the_error ... ok
[INFO] [stdout] test run::pair::tests::the_join_hint_omits_the_default_port ... ok
[INFO] [stdout] test run::bench::tests::the_codec_is_far_inside_the_budget ... ok
[INFO] [stdout] test run::serve::tests::a_better_discovered_address_replaces_a_worse_one ... ok
[INFO] [stdout] test run::serve::tests::a_clipboard_from_one_peer_still_crosses_to_a_third_machine ... ok
[INFO] [stdout] test run::serve::tests::a_copy_made_after_a_handover_crosses_again ... ok
[INFO] [stdout] test run::serve::tests::a_configured_address_is_used_when_nothing_is_discovered ... ok
[INFO] [stdout] test run::serve::tests::a_desk_holding_an_unpaired_machine_says_what_to_do_about_it ... ok
[INFO] [stdout] test run::serve::tests::a_crossing_hands_over_the_cached_clipboard ... ok
[INFO] [stdout] test run::injector::tests::the_injector_thread_releases_on_shutdown ... ok
[INFO] [stdout] test run::serve::tests::a_goodbye_reads_as_a_lost_peer ... ok
[INFO] [stdout] test run::serve::tests::a_discovered_address_beats_a_configured_one ... ok
[INFO] [stdout] test run::serve::tests::a_hello_is_attributed_to_the_authenticated_peer_rather_than_what_it_claims ... ok
[INFO] [stdout] test run::serve::tests::a_handed_over_clipboard_is_not_handed_over_twice ... ok
[INFO] [stdout] test run::serve::tests::a_hello_carries_the_real_screen_size ... ok
[INFO] [stdout] test run::serve::tests::a_machine_does_not_dial_itself ... ok
[INFO] [stdout] test run::serve::tests::a_peer_is_not_handed_back_the_clipboard_it_just_gave_us ... ok
[INFO] [stdout] test run::serve::tests::a_peer_speaking_another_protocol_is_refused ... ok
[INFO] [stdout] test run::serve::tests::a_peer_that_reconnects_is_handed_the_clipboard_again ... ok
[INFO] [stdout] test run::serve::tests::a_peer_that_never_held_the_cursor_is_handed_nothing ... ok
[INFO] [stdout] test run::serve::tests::a_peer_with_neither_address_is_not_dialled ... ok
[INFO] [stdout] test run::serve::tests::a_side_with_no_address_still_follows_the_tie_break ... ok
[INFO] [stdout] test run::serve::tests::a_peer_renamed_on_its_own_side_is_still_resolved ... ok
[INFO] [stdout] test run::serve::tests::a_two_screen_desk_builds ... ok
[INFO] [stdout] test run::serve::tests::an_inbound_clipboard_is_recorded_even_with_no_backend ... ok
[INFO] [stdout] test run::serve::tests::a_worse_discovered_address_does_not_replace_a_better_one ... ok
[INFO] [stdout] test run::serve::tests::an_inbound_foreign_type_is_refused ... ok
[INFO] [stdout] test run::serve::tests::an_unparseable_configured_address_is_ignored_rather_than_fatal ... ok
[INFO] [stdout] test run::serve::tests::an_oversized_clipboard_is_left_rather_than_overflowing_the_frame ... ok
[INFO] [stdout] test run::serve::tests::every_control_message_maps_to_an_input ... ok
[INFO] [stdout] test run::serve::tests::exactly_one_side_of_a_pair_dials ... ok
[INFO] [stdout] test run::serve::tests::nothing_copied_yet_hands_over_nothing ... ok
[INFO] [stdout] test run::serve::tests::screen_ids_do_not_depend_on_the_order_of_the_file ... ok
[INFO] [stdout] test run::serve::tests::the_capture_gate_tracks_what_was_last_set ... ok
[INFO] [stdout] test run::serve::tests::the_cursor_starts_in_the_middle_of_the_screen ... ok
[INFO] [stdout] test run::serve::tests::the_dial_decision_is_settled_by_the_first_differing_byte ... ok
[INFO] [stdout] test run::serve::tests::the_links_are_reciprocal ... ok
[INFO] [stdout] test run::serve::tests::an_inbound_text_clipboard_reaches_the_backend ... ok
[INFO] [stdout] test run::serve::tests::the_local_screen_is_the_home_screen ... ok
[INFO] [stdout] test run::serve::tests::the_side_holding_an_address_dials_whatever_the_tie_break_says ... ok
[INFO] [stdout] test run::serve::tests::the_peer_reclaiming_the_cursor_is_handed_the_clipboard ... ok
[INFO] [stdout] test run::watch::tests::announcing_with_nobody_listening_is_not_an_error ... ok
[INFO] [stdout] test run::injector::tests::emitting_nothing_costs_nothing ... ok
[INFO] [stdout] test run::watch::tests::a_watcher_receives_what_was_announced ... ok
[INFO] [stdout] test run::watch::tests::every_watcher_sees_every_crossing ... ok
[INFO] [stdout] test run::serve::tests::control_messages_arrive_in_the_order_they_were_issued ... ok
[INFO] [stdout] test status::tests::a_key_is_shortened_without_panicking_on_a_short_one ... ok
[INFO] [stdout] test status::tests::a_peer_is_matched_by_identity_rather_than_by_name ... ok
[INFO] [stdout] test run::watch::tests::two_crossings_in_a_row_both_arrive ... ok
[INFO] [stdout] test status::tests::a_connected_peer_reads_as_connected ... ok
[INFO] [stdout] test status::tests::a_peer_missing_from_the_desk_says_so_rather_than_unreachable ... ok
[INFO] [stdout] test status::tests::a_placement_problem_is_reported_before_a_network_one ... ok
[INFO] [stdout] test status::tests::a_running_session_with_nobody_answering_is_not_the_same_as_no_session ... ok
[INFO] [stdout] test status::tests::a_silent_peer_reads_as_unreachable ... ok
[INFO] [stdout] test status::tests::nothing_running_reads_as_unknown_rather_than_unreachable ... ok
[INFO] [stdout] test status::tests::online_is_unanswerable_with_nothing_sharing ... ok
[INFO] [stdout] test status::tests::placed_is_reported_beside_the_health_rather_than_only_inside_it ... ok
[INFO] [stdout] test status::tests::every_health_explains_the_next_thing_to_try ... ok
[INFO] [stdout] test status::tests::an_unplaced_machine_still_says_whether_it_is_online ... ok
[INFO] [stdout] test unstick::tests::a_backend_that_cannot_report_is_unverified_rather_than_confirmed ... ok
[INFO] [stdout] test unstick::tests::a_backend_still_reporting_a_held_key_does_not_confirm_the_sweep ... ok
[INFO] [stdout] test unstick::tests::a_backend_failure_is_reported_rather_than_swallowed ... ok
[INFO] [stdout] test unstick::tests::a_backend_that_reports_nothing_held_confirms_the_sweep ... ok
[INFO] [stdout] test unstick::tests::a_self_releasing_backend_is_reported_as_such ... ok
[INFO] [stdout] test unstick::tests::the_default_sweep_covers_every_modifier ... ok
[INFO] [stdout] test unstick::tests::the_full_sweep_covers_the_whole_keyboard_range ... ok
[INFO] [stdout] test unstick::tests::the_sweep_never_touches_pointer_buttons ... ok
[INFO] [stdout] test unstick::tests::the_full_sweep_includes_the_modifiers ... ok
[INFO] [stdout] test unstick::tests::the_default_sweep_emits_only_releases ... ok
[INFO] [stdout] test net::pairing::tests::two_exchanges_with_the_same_code_produce_different_transcripts ... ok
[INFO] [stdout] test net::pairing::tests::matching_codes_pair_both_ways ... ok
[INFO] [stdout] test run::pair::tests::two_machines_with_the_same_code_pair ... ok
[INFO] [stdout] test net::pairing::tests::a_tampered_confirmation_is_refused ... ok
[INFO] [stdout] test net::pairing::tests::a_code_differing_in_one_digit_is_refused ... ok
[INFO] [stdout] test net::pairing::tests::substituting_a_different_identity_invalidates_the_tag ... ok
[INFO] [stdout] test net::pairing::tests::a_malformed_opening_message_is_an_error_rather_than_a_panic ... ok
[INFO] [stdout] test net::pairing::tests::a_mistyped_code_is_refused_on_both_sides ... ok
[INFO] [stdout] test run::clipboard::tests::a_local_change_reaches_the_cache_as_a_new_copy ... ok
[INFO] [stdout] test run::injector::tests::dropping_during_a_panic_still_releases ... ok
[INFO] [stdout] test run::pair::tests::a_wrong_code_refuses_the_pairing ... ok
[INFO] [stdout] test run::dump::tests::the_pump_stops_at_its_deadline_even_with_input_arriving ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 463 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 1.09s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/build/wraith/74194807a166817c/out/wraith-74194807a166817c)
[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] [stderr]    Doc-tests wraith
[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" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a", kill_on_drop: false }`
[INFO] [stdout] 51e46b99e4cbe872c69ad9fc31c308085aaae13aa1996ed39a8926bedace797a
