[INFO] fetching crate foglet_game 0.1.1...
[INFO] testing foglet_game-0.1.1 against 1.100.0-beta.1+cargoflags=--release for beta-release-1.100-2
[INFO] extracting crate foglet_game 0.1.1 into /workspace/builds/worker-6-tc2/source
[INFO] started tweaking crates.io crate foglet_game 0.1.1
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate foglet_game 0.1.1
[INFO] tweaked toml for crates.io crate foglet_game 0.1.1 written to /workspace/builds/worker-6-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate foglet_game 0.1.1 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 foglet_game 0.1.1 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+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-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b
[INFO] running `Command { std: "docker" "start" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b", 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" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b" "/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" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b", 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" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-width v0.2.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling unicode-segmentation v1.13.2
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling compact_str v0.9.0
[INFO] [stderr]    Compiling cc v1.2.62
[INFO] [stderr]    Compiling num-conv v0.2.1
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling hashlink v0.11.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling libsqlite3-sys v0.37.0
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling strum v0.27.2
[INFO] [stderr]    Compiling ratatui-core v0.1.0
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling ratatui-widgets v0.3.0
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.0
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling ratatui-macros v0.7.0
[INFO] [stderr]    Compiling ratatui v0.30.0
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling rusqlite v0.39.0
[INFO] [stderr]    Compiling foglet_game v0.1.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 2m 13s
[INFO] running `Command { std: "docker" "inspect" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b", 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" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b" "/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 syn v2.0.117
[INFO] [stderr]    Compiling winnow v1.0.2
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling rstest_macros v0.23.0
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling relative-path v1.9.3
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling toml_edit v0.25.11+spec-1.1.0
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling proc-macro-crate v3.5.0
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling strum v0.27.2
[INFO] [stderr]    Compiling ratatui-core v0.1.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling ratatui-widgets v0.3.0
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.0
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling rstest v0.23.0
[INFO] [stderr]    Compiling ratatui-macros v0.7.0
[INFO] [stderr]    Compiling ratatui v0.30.0
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling foglet_game v0.1.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 1m 28s
[INFO] running `Command { std: "docker" "inspect" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b", 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" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b" "/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.20s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/build/foglet_game/abe9c4c92256e3c3/out/foglet_game-abe9c4c92256e3c3)
[INFO] [stdout] 
[INFO] [stdout] running 993 tests
[INFO] [stdout] test bounties::tests::bounties_migration_is_idempotent ... ok
[INFO] [stdout] test bounties::tests::bounties_partial_indexes_are_present ... ok
[INFO] [stdout] test bounties::tests::complete_bounty_rejects_unclaimed_open_bounty ... ok
[INFO] [stdout] test bounties::tests::claim_bounty_missing_id_returns_not_found ... ok
[INFO] [stdout] test bounties::tests::claim_bounty_table::case_4_expired_is_invalid ... ok
[INFO] [stdout] test bounties::tests::bounties_state_check_constraint_locks_vocabulary ... ok
[INFO] [stdout] test bounties::tests::claim_bounty_rejects_expired_bounty ... ok
[INFO] [stdout] test bounties::tests::complete_bounty_missing_id_returns_not_found ... ok
[INFO] [stdout] test bounties::tests::claim_bounty_table::case_2_claimed_is_invalid ... ok
[INFO] [stdout] test bounties::tests::claim_bounty_table::case_3_completed_is_invalid ... ok
[INFO] [stdout] test bounties::tests::claim_bounty_rejects_second_claimant ... ok
[INFO] [stdout] test bounties::tests::claim_bounty_table::case_1_open_is_legal ... ok
[INFO] [stdout] test bounties::tests::claim_bounty_transitions_open_to_claimed ... ok
[INFO] [stdout] test bounties::tests::complete_bounty_rejects_already_completed_bounty ... ok
[INFO] [stdout] test bounties::tests::complete_bounty_retains_reward_and_claim_attribution ... ok
[INFO] [stdout] test bounties::tests::claim_bounty_succeeds_for_open_ended_bounty ... ok
[INFO] [stdout] test bounties::tests::complete_bounty_table::case_2_claimed_is_legal ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_empty_table_returns_empty_vec ... ok
[INFO] [stdout] test bounties::tests::complete_bounty_table::case_1_open_is_invalid ... ok
[INFO] [stdout] test bounties::tests::complete_bounty_table::case_3_completed_is_invalid ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_table::case_2_open_no_deadline_is_not_swept ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_includes_exact_deadline ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_is_idempotent ... ok
[INFO] [stdout] test bounties::tests::complete_bounty_transitions_claimed_to_completed ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_table::case_3_open_future_deadline_is_not_swept ... ok
[INFO] [stdout] test bounties::tests::complete_bounty_table::case_4_expired_is_invalid ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_table::case_1_open_past_deadline_is_swept ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_table::case_5_claimed_no_deadline_is_not_swept ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_table::case_7_completed_is_not_swept ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_table::case_4_claimed_past_deadline_is_swept ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_table::case_6_claimed_future_deadline_is_not_swept ... ok
[INFO] [stdout] test bounties::tests::migration_creates_bounties_table ... ok
[INFO] [stdout] test bounties::tests::post_bounty_accepts_no_poster_for_system_bounties ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_table::case_8_expired_is_not_swept ... ok
[INFO] [stdout] test bounties::tests::post_bounty_assigns_distinct_ids_for_back_to_back_posts ... ok
[INFO] [stdout] test challenges::tests::accept_challenge_missing_id_returns_not_found ... ok
[INFO] [stdout] test bounties::tests::post_bounty_enforces_description_length_at_boundary ... ok
[INFO] [stdout] test challenges::tests::challenge_state_as_str_matches_schema_vocabulary ... ok
[INFO] [stdout] test bounties::tests::post_bounty_rejects_empty_reward ... ok
[INFO] [stdout] test bounties::tests::post_bounty_rejects_empty_description ... ok
[INFO] [stdout] test bounties::tests::post_bounty_enforces_title_length_at_boundary ... ok
[INFO] [stdout] test bounties::tests::post_bounty_rejects_empty_title ... ok
[INFO] [stdout] test bounties::tests::post_bounty_round_trips_full_row_in_open_state ... ok
[INFO] [stdout] test bounties::tests::expire_bounties_only_sweeps_due_open_or_claimed_rows ... ok
[INFO] [stdout] test challenges::tests::accept_challenge_table::case_2_accepted_is_invalid ... ok
[INFO] [stdout] test challenges::tests::accept_challenge_table::case_1_open_is_legal ... ok
[INFO] [stdout] test challenges::tests::accept_challenge_rejects_expired ... ok
[INFO] [stdout] test challenges::tests::accept_challenge_rejects_already_accepted ... ok
[INFO] [stdout] test challenges::tests::accept_challenge_table::case_3_declined_is_invalid ... ok
[INFO] [stdout] test challenges::tests::challenges_migration_is_idempotent ... ok
[INFO] [stdout] test challenges::tests::challenges_partial_indexes_are_present ... ok
[INFO] [stdout] test challenges::tests::accept_challenge_table::case_4_resolved_is_invalid ... ok
[INFO] [stdout] test challenges::tests::accept_challenge_transitions_open_to_accepted ... ok
[INFO] [stdout] test challenges::tests::create_challenge_rejects_empty_kind ... ok
[INFO] [stdout] test challenges::tests::accept_challenge_table::case_5_expired_is_invalid ... ok
[INFO] [stdout] test challenges::tests::create_challenge_starts_in_open ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_missing_id_returns_not_found ... ok
[INFO] [stdout] test challenges::tests::challenges_state_check_constraint_locks_vocabulary ... ok
[INFO] [stdout] test challenges::tests::create_challenge_supports_optional_stake_and_deadline ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_allows_lapsed_deadline ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_rejects_already_accepted ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_table::case_1_open_is_legal ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_table::case_2_accepted_is_invalid ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_rejects_already_declined ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_table::case_3_declined_is_invalid ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_empty_table_returns_empty_vec ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_table::case_4_resolved_is_invalid ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_transitions_open_to_declined ... ok
[INFO] [stdout] test challenges::tests::decline_challenge_table::case_5_expired_is_invalid ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_is_idempotent ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_includes_exact_deadline ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_table::case_1_open_past_deadline_is_swept ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_table::case_2_open_no_deadline_is_not_swept ... ok
[INFO] [stdout] test challenges::tests::migration_creates_challenges_table ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_table::case_3_open_future_deadline_is_not_swept ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_table::case_5_declined_is_not_swept ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_table::case_4_accepted_is_not_swept ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_only_sweeps_due_open_rows ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_table::case_6_resolved_is_not_swept ... ok
[INFO] [stdout] test config::tests::absent_factions_section_yields_empty_seed_list ... ok
[INFO] [stdout] test config::tests::absent_leaderboards_means_no_built_in_boards ... ok
[INFO] [stdout] test config::tests::absent_turns_section_means_no_turn_system ... ok
[INFO] [stdout] test config::tests::absent_multiplayer_section_disables_all_primitives ... ok
[INFO] [stdout] test config::tests::absent_world_section_defaults_to_disabled ... ok
[INFO] [stdout] test config::tests::absent_v4_and_v5_sections_are_disabled_by_default ... ok
[INFO] [stdout] test config::tests::applies_field_level_defaults_in_partial_manifest_section ... ok
[INFO] [stdout] test config::tests::applies_defaults_when_save_and_manifest_omitted ... ok
[INFO] [stdout] test config::tests::duplicate_leaderboard_names_are_rejected ... ok
[INFO] [stdout] test config::tests::empty_faction_display_name_is_rejected ... ok
[INFO] [stdout] test config::tests::duplicate_faction_slug_is_rejected ... ok
[INFO] [stdout] test config::tests::event_log_page_size_defaults_when_omitted ... ok
[INFO] [stdout] test config::tests::event_log_page_size_rejects_negative_values ... ok
[INFO] [stdout] test config::tests::event_log_page_size_rejects_zero ... ok
[INFO] [stdout] test config::tests::empty_leaderboard_name_is_rejected ... ok
[INFO] [stdout] test config::tests::event_log_screen_requires_world_events_be_enabled ... ok
[INFO] [stdout] test config::tests::empty_title_is_rejected ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_missing_id_returns_not_found ... ok
[INFO] [stdout] test config::tests::factions_seed_round_trips_through_toml ... ok
[INFO] [stdout] test config::tests::job_board_requires_contracts_be_enabled ... ok
[INFO] [stdout] test config::tests::inventory_capacity_requires_inventory_be_enabled ... ok
[INFO] [stdout] test config::tests::leaderboard_sort_defaults_to_desc_when_omitted ... ok
[INFO] [stdout] test config::tests::leaderboards_round_trip_through_toml ... ok
[INFO] [stdout] test config::tests::load_missing_file_is_read_error ... ok
[INFO] [stdout] test config::tests::malformed_toml_is_parse_error ... ok
[INFO] [stdout] test config::tests::missing_required_field_is_a_clear_parse_error ... ok
[INFO] [stdout] test config::tests::multiplayer_section_rejects_negative_char_cap_at_parse_time ... ok
[INFO] [stdout] test config::tests::multiplayer_section_round_trips_through_toml ... ok
[INFO] [stdout] test config::tests::multiplayer_toggles_default_to_false_when_omitted ... ok
[INFO] [stdout] test config::tests::invalid_faction_slug_is_rejected ... ok
[INFO] [stdout] test config::tests::load_from_file_round_trip ... ok
[INFO] [stdout] test config::tests::invalid_slug_is_rejected_with_validate ... ok
[INFO] [stdout] test config::tests::parses_factions_seed_array_from_spec_example ... ok
[INFO] [stdout] test config::tests::parses_full_multiplayer_section_from_spec_example ... ok
[INFO] [stdout] test config::tests::parses_full_leaderboards_section_from_spec_example ... ok
[INFO] [stdout] test config::tests::parses_full_world_section_from_spec_example ... ok
[INFO] [stdout] test config::tests::parses_spec_example ... ok
[INFO] [stdout] test config::tests::parses_v4_sections_with_explicit_enabled_flags ... ok
[INFO] [stdout] test config::tests::parses_world_ticks_login_hook_when_enabled ... ok
[INFO] [stdout] test config::tests::parses_full_turns_section_from_spec_example ... ok
[INFO] [stdout] test config::tests::parses_multiple_leaderboards_with_mixed_sort ... ok
[INFO] [stdout] test config::tests::presence_requires_spatial_be_enabled ... ok
[INFO] [stdout] test config::tests::slug_validator_accepts_canonical_examples ... ok
[INFO] [stdout] test config::tests::parses_world_ticks_with_default_catchup_bound_when_omitted ... ok
[INFO] [stdout] test config::tests::parses_v5_sections_with_explicit_enabled_flags ... ok
[INFO] [stdout] test config::tests::round_trips_through_toml ... ok
[INFO] [stdout] test config::tests::slug_validator_rejects_bad_inputs ... ok
[INFO] [stdout] test config::tests::place_recall_requires_spatial_be_enabled ... ok
[INFO] [stdout] test config::tests::travel_requires_spatial_and_presence_be_enabled ... ok
[INFO] [stdout] test config::tests::turns_section_rejects_unknown_reset_cadence ... ok
[INFO] [stdout] test config::tests::turns_section_rejects_zero_allowance_with_validate ... ok
[INFO] [stdout] test config::tests::turns_section_round_trips_through_toml ... ok
[INFO] [stdout] test config::tests::unknown_leaderboard_sort_is_a_parse_error ... ok
[INFO] [stdout] test config::tests::unknown_save_strategy_is_a_parse_error ... ok
[INFO] [stdout] test config::tests::world_section_applies_field_level_defaults ... ok
[INFO] [stdout] test config::tests::world_section_round_trips_through_toml ... ok
[INFO] [stdout] test config::tests::turns_section_rejects_negative_allowance_at_parse_time ... ok
[INFO] [stdout] test config::tests::world_ticks_login_hook_requires_world_ticks_enabled ... ok
[INFO] [stdout] test config::tests::world_ticks_rejects_negative_catchup_bound ... ok
[INFO] [stdout] test config::tests::zero_min_size_is_rejected ... ok
[INFO] [stdout] test config::tests::world_ticks_rejects_zero_catchup_bound ... ok
[INFO] [stdout] test config::tests::turns_section_applies_field_level_defaults ... ok
[INFO] [stdout] test contract_jobs::tests::contract_state_names_still_match_lifecycle_projection ... ok
[INFO] [stdout] test challenges::tests::expire_open_challenges_table::case_7_expired_is_not_swept ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_rejects_open ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_rejects_declined ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_rejects_already_resolved ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_rejects_empty_result ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_table::case_2_accepted_is_legal ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_table::case_1_open_is_invalid ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_table::case_4_resolved_is_invalid ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_table::case_3_declined_is_invalid ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_table::case_5_expired_is_invalid ... ok
[INFO] [stdout] test contracts::tests::accept_contract_rejects_when_acceptor_already_set ... ok
[INFO] [stdout] test contracts::tests::accept_contract_rejects_when_expired_at_or_before_now ... ok
[INFO] [stdout] test contract_jobs::tests::readiness_provider_can_mark_one_accepted_contract_ready_to_complete ... ok
[INFO] [stdout] test challenges::tests::resolve_challenge_transitions_accepted_to_resolved ... ok
[INFO] [stdout] test contracts::tests::accept_contract_rolls_back_when_on_commit_returns_error ... ok
[INFO] [stdout] test contract_jobs::tests::player_contract_job_views_project_accepted_and_completed_rows ... ok
[INFO] [stdout] test contracts::tests::accept_contract_sets_state_acceptor_and_accepted_timestamp ... ok
[INFO] [stdout] test contracts::tests::abandon_contract_transitions_from_accepted_clears_acceptor_and_rejects_invalid_states ... ok
[INFO] [stdout] test contracts::tests::applies_contracts_migration_with_documented_columns ... ok
[INFO] [stdout] test contracts::tests::complete_contract_rejects_when_state_is_not_accepted ... ok
[INFO] [stdout] test contracts::tests::contract_by_id_returns_row_when_present_and_none_when_missing ... ok
[INFO] [stdout] test dialog::tests::advance_after_finish_errors ... ok
[INFO] [stdout] test dialog::tests::advance_with_choices_waiting_is_noop ... ok
[INFO] [stdout] test dialog::tests::all_choices_gated_falls_through_to_goto ... ok
[INFO] [stdout] test dialog::tests::choice_sets_flag_and_branches ... ok
[INFO] [stdout] test dialog::tests::choose_rejects_out_of_range ... ok
[INFO] [stdout] test dialog::tests::choose_rejects_when_no_choices ... ok
[INFO] [stdout] test contracts::tests::complete_contract_sets_state_completed_and_completed_timestamp ... ok
[INFO] [stdout] test dialog::tests::dialog_choice_prompt_assigns_numeric_hotkeys_in_order ... ok
[INFO] [stdout] test dialog::tests::dialog_choice_prompt_includes_gated_choices_only_when_flag_present ... ok
[INFO] [stdout] test dialog::tests::dialog_choice_prompt_is_empty_while_lines_remain ... ok
[INFO] [stdout] test dialog::tests::handle_prompt_input_advances_dialog_on_selection ... ok
[INFO] [stdout] test dialog::tests::dialog_choice_prompt_truncates_at_nine_choices ... ok
[INFO] [stdout] test dialog::tests::handle_prompt_input_ignores_resize_and_unbound_keys ... ok
[INFO] [stdout] test dialog::tests::handle_prompt_input_only_offers_gated_choices_when_flags_match ... ok
[INFO] [stdout] test dialog::tests::linear_goto_then_finishes_at_empty_node ... ok
[INFO] [stdout] test dialog::tests::linear_goto_walks_through_intermediate_node ... ok
[INFO] [stdout] test dialog::tests::loads_well_formed_yaml ... ok
[INFO] [stdout] test dialog::tests::linear_walk_through_lines ... ok
[INFO] [stdout] test dialog::tests::rejects_malformed_yaml ... ok
[INFO] [stdout] test dialog::tests::rejects_unknown_choice_goto ... ok
[INFO] [stdout] test dialog::tests::rejects_unknown_goto ... ok
[INFO] [stdout] test dialog::tests::rejects_unknown_start ... ok
[INFO] [stdout] test dialog::tests::requires_and_requires_not_combine ... ok
[INFO] [stdout] test dialog::tests::requires_not_hides_choice_after_flag_is_set ... ok
[INFO] [stdout] test dialog_screen::tests::dialog_accessor_returns_loaded_graph ... ok
[INFO] [stdout] test dialog::tests::node_set_flags_apply_on_entry ... ok
[INFO] [stdout] test dialog_screen::tests::dialog_action_choice_picked_clones ... ok
[INFO] [stdout] test dialog_screen::tests::dialog_action_terminal_variants_are_distinct ... ok
[INFO] [stdout] test dialog_screen::tests::dialog_layout_variants_are_distinct ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_enter_advances_lines ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_enter_picks_current_choice_and_fires_callback ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_enter_picks_offscreen_choice_via_window_relative_hotkey ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_esc_emits_cancelled ... ok
[INFO] [stdout] test contract_jobs::tests::custom_objective_provider_requires_place_cargo_and_proof ... ok
[INFO] [stdout] test contracts::tests::connection_scoped_contract_key_helpers_cover_lifecycle_and_transactions ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_numeric_hotkey_is_window_relative ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_numeric_hotkey_picks_choice_directly ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_filters_gated_choices_via_predicates ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_finished_state_enter_emits_finished ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_scrolls_window_back_on_up ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_scrolls_window_when_cursor_walks_past_cap ... ok
[INFO] [stdout] test dialog_screen::tests::new_defaults_to_modal_layout ... ok
[INFO] [stdout] test dialog_screen::tests::new_stores_dialog_state_flags_and_callback ... ok
[INFO] [stdout] test dialog_screen::tests::render_choices_show_filtered_visible_text ... ok
[INFO] [stdout] test dialog_screen::tests::handle_input_up_down_moves_choice_cursor ... ok
[INFO] [stdout] test dialog_screen::tests::modal_and_compact_builders_set_layout ... ok
[INFO] [stdout] test dialog_screen::tests::new_shares_flag_handle_with_caller ... ok
[INFO] [stdout] test dialog_screen::tests::render_compact_skips_border ... ok
[INFO] [stdout] test dialog_screen::tests::render_clamps_choice_cursor_against_live_count ... ok
[INFO] [stdout] test dialog_screen::tests::render_finished_state_shows_leave_hint ... ok
[INFO] [stdout] test dialog_screen::tests::render_modal_paints_border_and_first_line ... ok
[INFO] [stdout] test dialog_screen::tests::render_paginated_choices_show_only_visible_window ... ok
[INFO] [stdout] test dialog_screen::tests::state_accessor_reflects_cursor_advances ... ok
[INFO] [stdout] test contracts::tests::create_and_accept_contract_rolls_back_when_acceptance_lifecycle_rejects ... ok
[INFO] [stdout] test contract_jobs::tests::custom_objective_completion_transfers_inventory_and_preserves_proof ... ok
[INFO] [stdout] test contracts::tests::create_contract_returns_available_row ... ok
[INFO] [stdout] test contracts::tests::contracts_migration_is_idempotent ... ok
[INFO] [stdout] test contracts::tests::create_and_accept_contract_rolls_back_contract_and_callback_side_effects ... ok
[INFO] [stdout] test contracts::tests::create_and_accept_contract_returns_accepted_row_without_two_step_gap ... ok
[INFO] [stdout] test contracts::tests::create_contract_preserves_objective_and_reward_json_byte_for_byte ... ok
[INFO] [stdout] test contracts::tests::fail_contract_transitions_from_accepted_and_rejects_invalid_source_states ... ok
[INFO] [stdout] test contracts::tests::expire_contract_transitions_due_available_row_only ... ok
[INFO] [stdout] test contracts::tests::sweep_expired_contracts_moves_only_past_due_available_rows ... ok
[INFO] [stdout] test events::tests::append_event_on_reuses_message_validation ... ok
[INFO] [stdout] test contracts::tests::contracts_for_acceptor_and_contracts_by_issuer_filter_results ... ok
[INFO] [stdout] test events::tests::append_event_allows_null_player_id_for_system_events ... ok
[INFO] [stdout] test events::tests::append_event_rejects_whitespace_only_message ... ok
[INFO] [stdout] test events::tests::append_event_caps_by_chars_not_bytes ... ok
[INFO] [stdout] test events::tests::migration_creates_world_events_table ... ok
[INFO] [stdout] test events::tests::append_event_rejects_overlong_message_and_accepts_cap_exactly ... ok
[INFO] [stdout] test events::tests::recent_events_empty_returns_empty_vec ... ok
[INFO] [stdout] test events::tests::append_event_on_uses_surrounding_transaction_and_rolls_back ... ok
[INFO] [stdout] test events::tests::append_event_rejects_empty_message ... ok
[INFO] [stdout] test events::tests::append_event_stores_player_id_and_kind ... ok
[INFO] [stdout] test events::tests::world_events_player_id_is_nullable ... ok
[INFO] [stdout] test events::tests::player_events_filters_to_player_with_id_tiebreak ... ok
[INFO] [stdout] test events::tests::recent_events_returns_newest_first_with_id_tiebreak ... ok
[INFO] [stdout] test events::tests::world_events_recent_and_player_indexes_exist ... ok
[INFO] [stdout] test factions::tests::contribute_to_goal_returns_not_found_for_missing_goal ... ok
[INFO] [stdout] test factions::tests::contribute_to_goal_rejects_non_positive_amount ... ok
[INFO] [stdout] test factions::tests::complete_goal_if_reached_rolls_back_when_event_append_fails ... ok
[INFO] [stdout] test factions::tests::complete_goal_if_reached_returns_not_found_for_missing_goal ... ok
[INFO] [stdout] test factions::tests::complete_goal_if_reached_event_message_includes_faction_id ... ok
[INFO] [stdout] test factions::tests::contribute_to_goal_increments_current_amount_atomically ... ok
[INFO] [stdout] test factions::tests::contribute_to_goal_rejects_completed_goal ... ok
[INFO] [stdout] test factions::tests::complete_goal_if_reached_flips_on_overshoot ... ok
[INFO] [stdout] test factions::tests::complete_goal_if_reached_is_noop_when_below_target ... ok
[INFO] [stdout] test factions::tests::complete_goal_if_reached_is_idempotent_for_already_completed_goal ... ok
[INFO] [stdout] test factions::tests::complete_goal_if_reached_flips_state_and_emits_event_at_target ... ok
[INFO] [stdout] test factions::tests::contribute_to_goal_rolls_back_on_callback_failure ... ok
[INFO] [stdout] test factions::tests::create_shared_goal_allows_same_key_under_different_factions ... ok
[INFO] [stdout] test factions::tests::create_shared_goal_inserts_active_row_with_schema_defaults ... ok
[INFO] [stdout] test factions::tests::contribute_to_goal_runs_contributor_callback_inside_transaction ... ok
[INFO] [stdout] test factions::tests::factions_migration_is_idempotent ... ok
[INFO] [stdout] test factions::tests::create_shared_goal_rejects_non_positive_target_amount ... ok
[INFO] [stdout] test factions::tests::create_shared_goal_is_idempotent_for_world_wide_goal ... ok
[INFO] [stdout] test factions::tests::factions_partial_indexes_are_present ... ok
[INFO] [stdout] test factions::tests::create_shared_goal_is_idempotent_for_same_faction_key ... ok
[INFO] [stdout] test factions::tests::factions_slug_is_unique ... ok
[INFO] [stdout] test factions::tests::join_faction_does_not_change_role_for_existing_member ... ok
[INFO] [stdout] test factions::tests::join_faction_is_idempotent_for_active_member ... ok
[INFO] [stdout] test factions::tests::join_faction_with_explicit_role_records_it ... ok
[INFO] [stdout] test factions::tests::join_faction_supports_multiple_faction_membership ... ok
[INFO] [stdout] test factions::tests::join_faction_creates_active_membership_row ... ok
[INFO] [stdout] test foglet::tests::accepts_username_key_directly ... ok
[INFO] [stdout] test foglet::tests::env_fallback_errors_on_missing_required_var ... ok
[INFO] [stdout] test foglet::tests::empty_door_context_var_falls_back_to_env ... ok
[INFO] [stdout] test foglet::tests::env_fallback_errors_on_non_numeric_width ... ok
[INFO] [stdout] test foglet::tests::env_fallback_loads_full_set ... ok
[INFO] [stdout] test foglet::tests::env_fallback_tolerates_missing_optionals ... ok
[INFO] [stdout] test foglet::tests::env_fallback_treats_empty_strings_as_absent ... ok
[INFO] [stdout] test foglet::tests::load_context_falls_back_to_env_when_no_context_file ... ok
[INFO] [stdout] test foglet::tests::json_context_wins_over_env_vars ... ok
[INFO] [stdout] test foglet::tests::load_context_synthesizes_local_dev_when_no_env ... ok
[INFO] [stdout] test foglet::tests::load_context_with_partial_env_surfaces_error ... ok
[INFO] [stdout] test foglet::tests::local_dev_fallback_does_not_override_valid_file ... ok
[INFO] [stdout] test foglet::tests::loads_documented_json_shape ... ok
[INFO] [stdout] test foglet::tests::malformed_json_falls_back_with_flag_set ... ok
[INFO] [stdout] test foglet::tests::malformed_json_errors_without_local_dev_fallback ... ok
[INFO] [stdout] test foglet::tests::malformed_json_returns_parse_error ... ok
[INFO] [stdout] test foglet::tests::missing_file_falls_back_with_flag_set ... ok
[INFO] [stdout] test foglet::tests::missing_file_returns_read_error ... ok
[INFO] [stdout] test foglet::tests::missing_optionals_default_to_none ... ok
[INFO] [stdout] test foglet::tests::source_is_overridden_to_context_file ... ok
[INFO] [stdout] test foglet::tests::synthesize_local_dev_round_trips_through_json ... ok
[INFO] [stdout] test input::tests::ctrl_alpha_round_trip_for_common_signals ... ok
[INFO] [stdout] test input::tests::ctrl_c_is_reported_not_swallowed ... ok
[INFO] [stdout] test input::tests::ctrl_shift_char_still_maps_to_ctrl_lowercase ... ok
[INFO] [stdout] test input::tests::arrows_map_to_directional_inputs ... ok
[INFO] [stdout] test input::tests::key_release_events_are_dropped_to_unknown ... ok
[INFO] [stdout] test input::tests::enter_esc_backspace_map_to_named_variants ... ok
[INFO] [stdout] test input::tests::key_repeat_events_map_like_press ... ok
[INFO] [stdout] test input::tests::plain_chars_map_to_char_variant ... ok
[INFO] [stdout] test input::tests::resize_passes_dimensions_through ... ok
[INFO] [stdout] test input::tests::non_key_non_resize_events_are_unknown ... ok
[INFO] [stdout] test input::tests::unmapped_keys_become_unknown ... ok
[INFO] [stdout] test factions::tests::leave_faction_is_idempotent_for_already_left_member ... ok
[INFO] [stdout] test factions::tests::migration_creates_faction_tables ... ok
[INFO] [stdout] test factions::tests::leave_faction_does_not_affect_other_faction_memberships ... ok
[INFO] [stdout] test factions::tests::leave_faction_marks_active_membership_inactive ... ok
[INFO] [stdout] test factions::tests::seed_factions_does_not_update_existing_rows ... ok
[INFO] [stdout] test factions::tests::seed_factions_inserts_all_seeds_and_returns_canonical_rows ... ok
[INFO] [stdout] test factions::tests::leave_faction_returns_not_member_for_unaffiliated_player ... ok
[INFO] [stdout] test factions::tests::seed_factions_inserts_new_slugs_alongside_existing_ones ... ok
[INFO] [stdout] test factions::tests::seed_factions_is_idempotent_under_repeated_calls ... ok
[INFO] [stdout] test factions::tests::seed_factions_with_empty_input_is_a_no_op ... ok
[INFO] [stdout] test factions::tests::leave_faction_targets_latest_membership_on_rejoin ... ok
[INFO] [stdout] test factions::tests::shared_goals_amount_check_constraints_reject_invalid_values ... ok
[INFO] [stdout] test inventory::tests::applies_inventory_slots_migration_with_documented_columns ... ok
[INFO] [stdout] test inventory::tests::create_slot_and_get_slot_round_trip ... ok
[INFO] [stdout] test factions::tests::shared_goals_state_check_constraint_locks_vocabulary ... ok
[INFO] [stdout] test inventory::tests::direct_negative_quantity_insert_is_rejected ... ok
[INFO] [stdout] test inventory::tests::grant_inventory_on_rejects_non_positive_quantity ... ok
[INFO] [stdout] test inventory::tests::grant_inventory_on_creates_slot_inside_caller_transaction ... ok
[INFO] [stdout] test inventory::tests::equilibrium_is_advisory_only ... ok
[INFO] [stdout] test inventory::tests::grant_inventory_on_increments_compatible_metadata_slot ... ok
[INFO] [stdout] test inventory::tests::grant_inventory_on_rolls_back_with_surrounding_transaction ... ok
[INFO] [stdout] test inventory_capacity::tests::capacity_policy_trait_and_error_variants_are_usable ... ok
[INFO] [stdout] test inventory::tests::grant_inventory_on_keeps_incompatible_metadata_in_separate_slots ... ok
[INFO] [stdout] test inventory::tests::inventory_slots_migration_is_idempotent ... ok
[INFO] [stdout] test inventory::tests::merge_slots_rejects_mismatched_metadata ... ok
[INFO] [stdout] test inventory::tests::merge_slots_adds_quantities_for_matching_metadata ... ok
[INFO] [stdout] test inventory::tests::transfer_rejects_missing_source_slot_and_leaves_db_unchanged ... ok
[INFO] [stdout] test inventory::tests::transfer_on_preserves_same_slot_behavior ... ok
[INFO] [stdout] test inventory::tests::transfer_on_uses_surrounding_transaction_and_rolls_back ... ok
[INFO] [stdout] test inventory::tests::slots_for_owner_is_deterministic ... ok
[INFO] [stdout] test inventory::tests::transfer_moves_quantities_with_single_commit ... ok
[INFO] [stdout] test inventory::tests::transfer_rejects_non_positive_quantity ... ok
[INFO] [stdout] test inventory::tests::transfer_passes_post_mutation_snapshots_to_on_commit ... ok
[INFO] [stdout] test inventory::tests::transfer_rejects_missing_stock_and_leaves_slots_unchanged ... ok
[INFO] [stdout] test job_board::tests::builtin_providers_include_v3_sources_when_multiplayer_toggles_are_enabled ... ok
[INFO] [stdout] test job_board::tests::builtin_providers_omit_v3_sources_when_multiplayer_is_disabled ... ok
[INFO] [stdout] test inventory::tests::transfer_rollback_happens_when_on_commit_rejects ... ok
[INFO] [stdout] test inventory_capacity::tests::finite_pickup_rejects_already_empty_source ... ok
[INFO] [stdout] test inventory_capacity::tests::finite_pickup_callback_failure_rolls_back_inventory_and_story_state ... ok
[INFO] [stdout] test inventory_capacity::tests::finite_pickup_capacity_failure_leaves_inventory_and_callback_state_unchanged ... ok
[INFO] [stdout] test inventory_capacity::tests::grant_inventory_with_capacity_on_rejects_over_capacity_without_mutating ... ok
[INFO] [stdout] test inventory_capacity::tests::transfer_with_capacity_allows_uncapped_destination ... ok
[INFO] [stdout] test inventory_capacity::tests::finite_pickup_reports_exhausted_source_and_runs_callback ... ok
[INFO] [stdout] test job_board_screen::tests::cursor_wraps_at_page_boundaries ... ok
[INFO] [stdout] test job_board_screen::tests::accept_hotkey_passes_provider_token_to_game_callback_verbatim ... ok
[INFO] [stdout] test job_board_screen::tests::empty_entries_render_configured_empty_state_copy ... ok
[INFO] [stdout] test job_board_screen::tests::detail_modal_opens_and_closes_without_disturbing_list_redraw ... ok
[INFO] [stdout] test job_board_screen::tests::long_titles_do_not_overflow_into_following_rows ... ok
[INFO] [stdout] test job_board_screen::tests::page_hotkeys_advance_and_wrap ... ok
[INFO] [stdout] test job_board_screen::tests::quit_hotkeys_return_control_to_caller ... ok
[INFO] [stdout] test job_board_screen::tests::renders_required_columns_in_80x24_layout ... ok
[INFO] [stdout] test inventory_capacity::tests::transfer_with_capacity_debits_source_and_credits_destination ... ok
[INFO] [stdout] test inventory_capacity::tests::validate_incoming_rejects_when_proposed_quantity_exceeds_capacity ... ok
[INFO] [stdout] test inventory_capacity::tests::transfer_with_capacity_propagates_policy_error_and_rolls_back ... ok
[INFO] [stdout] test inventory_capacity::tests::concurrent_capacity_transfers_cannot_collectively_overflow ... ok
[INFO] [stdout] test inventory_capacity::tests::transfer_with_capacity_rolls_back_on_capacity_overflow ... ok
[INFO] [stdout] test inventory_capacity::tests::used_capacity_sums_volume_times_quantity_for_owner_slots ... ok
[INFO] [stdout] test job_board::tests::query_can_preserve_provider_order_when_requested ... ok
[INFO] [stdout] test job_board::tests::query_default_sort_orders_by_expiry_then_source_then_source_id_stably ... ok
[INFO] [stdout] test job_board::tests::query_accepts_game_supplied_external_provider_with_stable_ordering ... ok
[INFO] [stdout] test job_board::tests::bounty_provider_returns_only_open_bounties ... ok
[INFO] [stdout] test job_board::tests::query_sanitizes_provider_title_and_summary_with_v3_bounded_text_rules ... ok
[INFO] [stdout] test job_board::tests::contract_provider_returns_one_entry_per_available_contract_with_documented_shape ... ok
[INFO] [stdout] test job_board::tests::challenge_provider_returns_only_open_challenges ... ok
[INFO] [stdout] test leaderboards::tests::leaderboard_scores_board_and_score_are_not_null ... ok
[INFO] [stdout] test leaderboards::tests::leaderboard_scores_board_score_index_exists ... ok
[INFO] [stdout] test leaderboards::tests::leaderboard_scores_primary_key_is_board_and_player ... ok
[INFO] [stdout] test leaderboards::tests::increment_score_rejects_empty_board_name ... ok
[INFO] [stdout] test leaderboards::tests::increment_score_creates_missing_row ... ok
[INFO] [stdout] test leaderboards::tests::increment_score_increments_existing_row ... ok
[INFO] [stdout] test leaderboards::tests::migration_creates_leaderboard_scores_table ... ok
[INFO] [stdout] test leaderboards::tests::increment_score_supports_negative_delta ... ok
[INFO] [stdout] test leaderboards::tests::player_rank_rejects_empty_board_name ... ok
[INFO] [stdout] test leaderboards::tests::player_rank_filters_by_board ... ok
[INFO] [stdout] test leaderboards::tests::player_rank_asc_basic_ordering ... ok
[INFO] [stdout] test leaderboards::tests::player_rank_desc_basic_ordering ... ok
[INFO] [stdout] test leaderboards::tests::player_rank_unranked_player_returns_none ... ok
[INFO] [stdout] test manifest::tests::deserializes_spec_10_3_example_verbatim ... ok
[INFO] [stdout] test manifest::tests::json_round_trip_matches_spec_10_3_example ... ok
[INFO] [stdout] test manifest::tests::new_fills_spec_10_3_defaults ... ok
[INFO] [stdout] test leaderboards::tests::set_score_rejects_empty_board_name ... ok
[INFO] [stdout] test manifest::tests::new_trims_trailing_slash_from_install_dir ... ok
[INFO] [stdout] test manifest::tests::pretty_output_ends_with_newline ... ok
[INFO] [stdout] test manifest::tests::validate_allows_empty_env_with_empty_allowlist ... ok
[INFO] [stdout] test manifest::tests::validate_rejects_empty_allowlist_when_env_present ... ok
[INFO] [stdout] test manifest::tests::validate_rejects_relative_command ... ok
[INFO] [stdout] test map::tests::custom_kind_is_walkable_and_round_trips_string ... ok
[INFO] [stdout] test map::tests::ignores_leading_and_trailing_blank_lines ... ok
[INFO] [stdout] test map::tests::legend_len_and_is_empty_track_pairs ... ok
[INFO] [stdout] test manifest::tests::new_rejects_relative_install_dir ... ok
[INFO] [stdout] test map::tests::legend_lookup_reports_unknown_glyph ... ok
[INFO] [stdout] test map::tests::legend_rejects_empty_kind ... ok
[INFO] [stdout] test map::tests::legend_rejects_entity_without_id ... ok
[INFO] [stdout] test map::tests::legend_rejects_multi_char_glyph ... ok
[INFO] [stdout] test map::tests::node_topology_lists_exits_and_renders_current_node ... ok
[INFO] [stdout] test map::tests::legend_rejects_empty_glyph ... ok
[INFO] [stdout] test map::tests::node_topology_rejects_duplicate_anchor_occurrences ... ok
[INFO] [stdout] test map::tests::node_topology_rejects_exit_to_unknown_node ... ok
[INFO] [stdout] test map::tests::node_topology_rejects_missing_anchor ... ok
[INFO] [stdout] test leaderboards::tests::top_scores_empty_board_returns_empty_vec ... ok
[INFO] [stdout] test map::tests::node_topology_surfaces_unknown_glyph_errors ... ok
[INFO] [stdout] test map::tests::node_topology_surfaces_ragged_map_errors ... ok
[INFO] [stdout] test map::tests::parses_spec_example_map ... ok
[INFO] [stdout] test map::tests::parses_item_placements ... ok
[INFO] [stdout] test map::tests::rejects_empty_input ... ok
[INFO] [stdout] test map::tests::rejects_ragged_grid ... ok
[INFO] [stdout] test map::tests::rejects_unknown_glyph ... ok
[INFO] [stdout] test map::tests::walkability_rule ... ok
[INFO] [stdout] test leaderboards::tests::set_score_first_write_creates_row ... ok
[INFO] [stdout] test leaderboards::tests::player_rank_ties_match_top_scores_ordering ... ok
[INFO] [stdout] test leaderboards::tests::player_rank_updated_at_beats_player_id_on_tie ... ok
[INFO] [stdout] test leaderboards::tests::top_scores_rejects_empty_board_name ... ok
[INFO] [stdout] test leaderboards::tests::set_score_overwrites_existing_row ... ok
[INFO] [stdout] test leaderboards::tests::top_scores_asc_returns_lowest_first ... ok
[INFO] [stdout] test leaderboards::tests::top_scores_filters_by_board ... ok
[INFO] [stdout] test leaderboards::tests::top_scores_desc_returns_highest_first ... ok
[INFO] [stdout] test leaderboards::tests::top_scores_zero_limit_returns_empty_vec ... ok
[INFO] [stdout] test leaderboards::tests::top_scores_ties_break_by_player_id ... ok
[INFO] [stdout] test leaderboards::tests::top_scores_ties_break_by_updated_at_before_player_id ... ok
[INFO] [stdout] test leaderboards::tests::top_scores_respects_limit ... ok
[INFO] [stdout] test market::tests::active_listings_returns_empty_vec_when_no_listings ... ok
[INFO] [stdout] test market::tests::active_listings_excludes_zero_quantity_rows ... ok
[INFO] [stdout] test market::tests::buy_listing_appends_market_buy_world_event_attributed_to_seller ... ok
[INFO] [stdout] test market::tests::active_listings_filters_expired_and_keeps_open_ended ... ok
[INFO] [stdout] test market::tests::active_listings_orders_newest_first_with_id_tiebreaker ... ok
[INFO] [stdout] test market::tests::buy_listing_callback_runs_in_transaction_with_post_decrement_listing ... ok
[INFO] [stdout] test market::tests::buy_listing_decrements_quantity_and_returns_post_row ... ok
[INFO] [stdout] test market::tests::buy_listing_emits_system_event_for_npc_listings ... ok
[INFO] [stdout] test market::tests::buy_listing_rejects_insufficient_quantity ... ok
[INFO] [stdout] test map_projection::tests::projection_marks_routes_outbound_unavailable_and_policy_hidden ... ok
[INFO] [stdout] test market::tests::buy_listing_rejects_missing_listing ... ok
[INFO] [stdout] test map_projection::tests::projection_combines_current_recalled_known_rumored_and_hidden_places ... ok
[INFO] [stdout] test market::tests::buy_listing_rejects_non_positive_quantity ... ok
[INFO] [stdout] test market::tests::buy_listing_rolls_back_listing_and_callback_writes_when_callback_fails ... ok
[INFO] [stdout] test market::tests::buy_listing_rolls_back_world_event_when_callback_fails ... ok
[INFO] [stdout] test market::tests::buy_listing_to_zero_exhausts_listing_and_hides_it_from_active ... ok
[INFO] [stdout] test market::tests::create_listing_accepts_no_seller_for_system_listings ... ok
[INFO] [stdout] test market::tests::create_listing_rejects_empty_display_name ... ok
[INFO] [stdout] test market::tests::create_listing_accepts_zero_price_and_zero_quantity ... ok
[INFO] [stdout] test market::tests::create_listing_rejects_negative_price ... ok
[INFO] [stdout] test market::tests::create_listing_rejects_empty_item_key ... ok
[INFO] [stdout] test market::tests::create_listing_rejects_negative_quantity ... ok
[INFO] [stdout] test market::tests::create_listing_enforces_display_name_length_at_boundary ... ok
[INFO] [stdout] test market::tests::market_listings_active_partial_index_is_present ... ok
[INFO] [stdout] test market::tests::create_listing_round_trips_full_row ... ok
[INFO] [stdout] test market::tests::market_listings_migration_is_idempotent ... ok
[INFO] [stdout] test market::tests::migration_creates_market_listings_table ... ok
[INFO] [stdout] test market::tests::market_listings_check_constraints_reject_negative_values ... ok
[INFO] [stdout] test notices::tests::archive_notice_missing_id_returns_not_found ... ok
[INFO] [stdout] test notices::tests::inbox_returns_empty_vec_for_player_with_no_notices ... ok
[INFO] [stdout] test notices::tests::archive_notice_hides_notice_from_default_inbox ... ok
[INFO] [stdout] test notices::tests::mark_read_missing_id_returns_not_found ... ok
[INFO] [stdout] test notices::tests::archive_notice_preserves_read_at ... ok
[INFO] [stdout] test notices::tests::inbox_excludes_archived_notices ... ok
[INFO] [stdout] test notices::tests::mark_read_keeps_notice_in_inbox ... ok
[INFO] [stdout] test notices::tests::migration_creates_notices_table ... ok
[INFO] [stdout] test notices::tests::notices_addressing_nullability_matches_spec ... ok
[INFO] [stdout] test notices::tests::inbox_returns_newest_first_scoped_to_recipient ... ok
[INFO] [stdout] test notices::tests::inbox_includes_read_notices ... ok
[INFO] [stdout] test notices::tests::notices_inbox_partial_index_is_present ... ok
[INFO] [stdout] test notices::tests::notices_migration_is_idempotent ... ok
[INFO] [stdout] test notices::tests::rejected_overlong_notice_does_not_persist ... ok
[INFO] [stdout] test notices::tests::send_notice_accepts_body_at_limit ... ok
[INFO] [stdout] test notices::tests::send_notice_on_rolls_back_with_surrounding_transaction ... ok
[INFO] [stdout] test contracts::tests::available_contracts_orders_deterministically_and_filters_fields ... ok
[INFO] [stdout] test notices::tests::send_notice_accepts_subject_at_limit ... ok
[INFO] [stdout] test notices::tests::send_notice_rejects_empty_body ... ok
[INFO] [stdout] test notices::tests::send_notice_on_commits_with_surrounding_transaction ... ok
[INFO] [stdout] test place_recall::tests::applies_place_recall_migration_with_documented_columns ... ok
[INFO] [stdout] test notices::tests::send_notice_rejects_subject_over_limit ... ok
[INFO] [stdout] test notices::tests::send_notice_rejects_empty_subject ... ok
[INFO] [stdout] test notices::tests::send_notice_rejects_overlong_body ... ok
[INFO] [stdout] test notices::tests::send_notice_supports_system_sender_and_optional_fields ... ok
[INFO] [stdout] test place_recall::tests::merge_recall_namespace_on_observes_transaction_rollback ... ok
[INFO] [stdout] test notices::tests::send_notice_stores_unread_notice ... ok
[INFO] [stdout] test place_recall::tests::merge_recall_namespace_preserves_sibling_namespaces ... ok
[INFO] [stdout] test players::tests::applies_players_migration_with_documented_columns ... ok
[INFO] [stdout] test place_recall::tests::merge_recall_namespace_rejects_non_object_merge_value ... ok
[INFO] [stdout] test players::tests::defaults_for_role_and_security_level_apply ... ok
[INFO] [stdout] test place_recall::tests::merge_recall_namespace_rejects_non_object_path_without_rewriting ... ok
[INFO] [stdout] test place_recall::tests::merge_recall_snapshot_inserts_missing_row ... ok
[INFO] [stdout] test place_recall::tests::merge_recall_snapshot_on_observes_transaction_rollback ... ok
[INFO] [stdout] test place_recall::tests::merge_recall_snapshot_rejects_invalid_existing_json_without_rewriting ... ok
[INFO] [stdout] test players::tests::foglet_user_id_unique_when_not_null ... ok
[INFO] [stdout] test players::tests::local_dev_and_foglet_namespaces_do_not_collide ... ok
[INFO] [stdout] test players::tests::local_dev_key_unique_when_not_null ... ok
[INFO] [stdout] test players::tests::player_handle_returns_handle_for_existing_id ... ok
[INFO] [stdout] test players::tests::player_handle_returns_none_for_unknown_id ... ok
[INFO] [stdout] test players::tests::players_migration_is_idempotent_on_repeat_apply ... ok
[INFO] [stdout] test players::tests::recent_players_empty_registry_returns_empty ... ok
[INFO] [stdout] test players::tests::recent_players_rejects_negative_limit ... ok
[INFO] [stdout] test players::tests::recent_players_reflects_repeat_upsert_refreshing_last_seen_at ... ok
[INFO] [stdout] test players::tests::recent_players_orders_by_last_seen_at_desc ... ok
[INFO] [stdout] test players::tests::search_players_by_handle_prefix_empty_registry_returns_empty ... ok
[INFO] [stdout] test players::tests::repeat_local_dev_upsert_refreshes_last_seen_without_changing_first_seen ... ok
[INFO] [stdout] test players::tests::repeat_upsert_refreshes_last_seen_without_changing_first_seen ... ok
[INFO] [stdout] test players::tests::recent_players_respects_limit ... ok
[INFO] [stdout] test players::tests::repeat_upsert_refreshes_role_and_security_level ... ok
[INFO] [stdout] test players::tests::synthesize_local_dev_key_trims_and_falls_back_on_whitespace ... ok
[INFO] [stdout] test players::tests::recent_players_tiebreaks_by_id_desc_for_equal_last_seen_at ... ok
[INFO] [stdout] test players::tests::recent_players_zero_limit_returns_empty ... ok
[INFO] [stdout] test players::tests::search_players_by_handle_prefix_empty_string_matches_all ... ok
[INFO] [stdout] test players::tests::upsert_player_falls_back_to_default_handle_when_username_missing ... ok
[INFO] [stdout] test players::tests::upsert_player_with_absent_role_maps_to_user_defaults ... ok
[INFO] [stdout] test players::tests::search_players_by_handle_prefix_is_case_insensitive_prefix_match ... ok
[INFO] [stdout] test players::tests::upsert_player_persists_normalized_role_and_security_per_context ... ok
[INFO] [stdout] test players::tests::search_players_by_handle_prefix_returns_empty_for_no_match ... ok
[INFO] [stdout] test players::tests::search_players_by_handle_prefix_respects_limit ... ok
[INFO] [stdout] test players::tests::search_players_by_handle_prefix_zero_limit_returns_empty ... ok
[INFO] [stdout] test players::tests::search_players_by_handle_prefix_rejects_negative_limit ... ok
[INFO] [stdout] test players::tests::upsert_player_with_distinct_local_dev_handles_creates_distinct_rows ... ok
[INFO] [stdout] test players::tests::upsert_player_with_distinct_user_ids_creates_distinct_rows ... ok
[INFO] [stdout] test players::tests::upsert_player_with_no_identity_uses_default_local_dev_key ... ok
[INFO] [stdout] test players::tests::upsert_player_with_same_local_dev_handle_is_stable_across_repeats ... ok
[INFO] [stdout] test presence::tests::applies_presence_migration_with_documented_columns ... ok
[INFO] [stdout] test players::tests::upsert_player_with_user_id_is_stable_across_repeats ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_arrow_keys_complete ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_backspace_and_ctrl_complete ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_builder_records_body_footer_title ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_default_footer_constant_matches_spec ... ok
[INFO] [stdout] test presence::tests::get_presence_returns_none_for_unplaced_player ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_enter_completes ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_esc_completes ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_preserves_blank_lines_between_paragraphs ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_render_clips_when_height_is_short ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_render_modal_draws_border_with_title ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_render_modal_small_area_is_noop ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_default_footer_is_unset ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_render_writes_rows_under_test_backend ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_render_zero_dimensions_writes_nothing ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_renders_footer_alone_when_body_is_empty ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_renders_default_footer_below_body_with_blank_gap ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_resize_is_ignored ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_space_completes ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_unknown_is_ignored ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_uses_author_footer_override ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_wraps_body_at_supplied_width ... ok
[INFO] [stdout] test prompt::tests::arrows_backspace_ctrl_unknown_are_not_prompt_keys ... ok
[INFO] [stdout] test prompt::tests::any_key_prompt_zero_width_returns_no_rows_and_does_not_panic ... ok
[INFO] [stdout] test prompt::tests::builder_chain_combines_disabled_and_hint ... ok
[INFO] [stdout] test prompt::tests::builder_validate_passes_for_unique_keys_and_rejects_duplicates ... ok
[INFO] [stdout] test prompt::tests::cancellable_setter_round_trips_both_ways ... ok
[INFO] [stdout] test prompt::tests::char_lowercases_ascii_letters ... ok
[INFO] [stdout] test prompt::tests::char_preserves_non_letter_ascii_and_digits ... ok
[INFO] [stdout] test prompt::tests::choice_new_defaults_enabled_true_with_no_metadata ... ok
[INFO] [stdout] test prompt::tests::choice_new_lowercases_ascii_hotkey_via_from_char ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_default_no_makes_enter_decline ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_default_yes_makes_enter_confirm ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_esc_cancels_by_default ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_esc_no_op_when_cancellation_disabled ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_enter_without_default_is_noop ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_labels_are_customisable_without_changing_keys ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_n_returns_no_case_insensitive ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_renders_question_and_choices ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_resize_is_ignored ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_unknown_key_is_ignored ... ok
[INFO] [stdout] test prompt::tests::confirm_prompt_y_returns_yes_case_insensitive ... ok
[INFO] [stdout] test prompt::tests::default_matches_new ... ok
[INFO] [stdout] test prompt::tests::default_prompt_is_not_cancellable ... ok
[INFO] [stdout] test prompt::tests::default_theme_error_role_is_bold_red ... ok
[INFO] [stdout] test prompt::tests::default_theme_hotkey_role_is_bold_cyan ... ok
[INFO] [stdout] test prompt::tests::default_theme_disabled_role_is_dim_no_color ... ok
[INFO] [stdout] test prompt::tests::default_theme_muted_and_hint_are_dim ... ok
[INFO] [stdout] test prompt::tests::default_theme_normal_role_is_bare_default ... ok
[INFO] [stdout] test prompt::tests::default_theme_success_currency_carry_expected_colors ... ok
[INFO] [stdout] test prompt::tests::default_theme_title_and_emphasis_are_bold ... ok
[INFO] [stdout] test presence::tests::move_player_does_not_auto_touch_recall ... ok
[INFO] [stdout] test prompt::tests::disabled_if_false_leaves_last_choice_enabled ... ok
[INFO] [stdout] test prompt::tests::disabled_if_true_marks_last_choice_with_reason ... ok
[INFO] [stdout] test prompt::tests::disabled_if_with_no_prior_choice_is_a_no_op ... ok
[INFO] [stdout] test prompt::tests::feedback_kind_markers_are_unique_and_monochrome_safe ... ok
[INFO] [stdout] test prompt::tests::feedback_kind_style_role_maps_to_spec_roles ... ok
[INFO] [stdout] test prompt::tests::feedback_line_constructors_record_kind_and_text ... ok
[INFO] [stdout] test prompt::tests::feedback_line_info_renders_with_normal_role_not_a_loud_one ... ok
[INFO] [stdout] test prompt::tests::feedback_line_render_returns_one_row_and_leaves_extra_rows_blank ... ok
[INFO] [stdout] test prompt::tests::feedback_line_render_truncates_when_width_is_short ... ok
[INFO] [stdout] test prompt::tests::feedback_line_render_with_theme_applies_role_style ... ok
[INFO] [stdout] test prompt::tests::feedback_line_render_writes_marker_plus_text_under_test_backend ... ok
[INFO] [stdout] test prompt::tests::feedback_kind_marker_pins_concrete_strings ... ok
[INFO] [stdout] test prompt::tests::feedback_line_render_zero_dimensions_is_noop ... ok
[INFO] [stdout] test prompt::tests::footer_replaces_previous_footer ... ok
[INFO] [stdout] test prompt::tests::from_input_maps_chars_lowercased ... ok
[INFO] [stdout] test prompt::tests::from_input_maps_enter_and_esc ... ok
[INFO] [stdout] test prompt::tests::handle_direct_key_lowercase_selects_enabled_choice ... ok
[INFO] [stdout] test prompt::tests::handle_direct_key_uppercase_selects_same_enabled_choice_as_lowercase ... ok
[INFO] [stdout] test prompt::tests::handle_disabled_choice_returns_disabled_with_id_and_reason ... ok
[INFO] [stdout] test prompt::tests::handle_disabled_choice_without_reason_returns_disabled_with_none ... ok
[INFO] [stdout] test prompt::tests::handle_enter_is_a_no_op_on_direct_key_prompts ... ok
[INFO] [stdout] test prompt::tests::handle_enter_is_no_op_when_no_enabled_choices_exist ... ok
[INFO] [stdout] test prompt::tests::handle_enter_selects_highlighted_choice_in_navigation_mode ... ok
[INFO] [stdout] test prompt::tests::handle_enter_skips_disabled_seed_via_cursor_invariant ... ok
[INFO] [stdout] test prompt::tests::handle_esc_returns_cancelled_when_cancellation_enabled ... ok
[INFO] [stdout] test prompt::tests::handle_esc_returns_none_when_cancellation_disabled ... ok
[INFO] [stdout] test presence::tests::upsert_player_does_not_auto_create_presence_row ... ok
[INFO] [stdout] test prompt::tests::disabled_if_replaces_prior_disabled_reason ... ok
[INFO] [stdout] test prompt::tests::handle_non_prompt_inputs_do_not_mutate_selection ... ok
[INFO] [stdout] test prompt::tests::feedback_line_rendered_text_concatenates_marker_and_body ... ok
[INFO] [stdout] test prompt::tests::handle_ignores_non_prompt_inputs ... ok
[INFO] [stdout] test prompt::tests::move_down_advances_to_next_enabled_choice ... ok
[INFO] [stdout] test prompt::tests::handle_unmatched_key_returns_none ... ok
[INFO] [stdout] test prompt::tests::move_is_noop_when_only_one_enabled_choice ... ok
[INFO] [stdout] test prompt::tests::move_down_skips_disabled_rows ... ok
[INFO] [stdout] test prompt::tests::move_down_wraps_from_last_enabled_to_first_enabled ... ok
[INFO] [stdout] test prompt::tests::move_up_skips_disabled_rows ... ok
[INFO] [stdout] test presence::tests::transaction_scoped_presence_lookup_observes_rollback ... ok
[INFO] [stdout] test prompt::tests::move_up_walks_back_to_previous_enabled_choice ... ok
[INFO] [stdout] test prompt::tests::navigable_false_clears_cursor_for_round_trip ... ok
[INFO] [stdout] test prompt::tests::navigable_defaults_to_none_for_direct_key_prompts ... ok
[INFO] [stdout] test prompt::tests::move_up_wraps_from_first_enabled_to_last_enabled ... ok
[INFO] [stdout] test prompt::tests::navigable_on_empty_prompt_leaves_selection_none ... ok
[INFO] [stdout] test prompt::tests::navigable_skips_leading_disabled_choices_when_seeding ... ok
[INFO] [stdout] test prompt::tests::navigable_with_all_disabled_choices_leaves_selection_none ... ok
[INFO] [stdout] test prompt::tests::prompt_action_variants_construct_and_compare ... ok
[INFO] [stdout] test prompt::tests::prompt_builder_body_calls_accumulate_in_order ... ok
[INFO] [stdout] test prompt::tests::navigable_preserves_direct_key_handle ... ok
[INFO] [stdout] test prompt::tests::navigable_seeds_cursor_on_first_enabled_choice ... ok
[INFO] [stdout] test prompt::tests::prompt_builder_collects_body_choices_and_footer ... ok
[INFO] [stdout] test prompt::tests::render_modal_draws_full_border_and_inner_content ... ok
[INFO] [stdout] test prompt::tests::render_modal_inner_content_does_not_overwrite_borders ... ok
[INFO] [stdout] test prompt::tests::render_applies_reversed_modifier_to_selected_row ... ok
[INFO] [stdout] test prompt::tests::render_clips_when_height_exceeded_without_panic ... ok
[INFO] [stdout] test prompt::tests::render_does_not_apply_reversed_when_not_in_nav_mode ... ok
[INFO] [stdout] test prompt::tests::render_modal_two_by_two_draws_border_only ... ok
[INFO] [stdout] test prompt::tests::render_modal_renders_title_in_top_border ... ok
[INFO] [stdout] test prompt::tests::render_modal_without_title_renders_unbroken_top_edge ... ok
[INFO] [stdout] test prompt::tests::render_modal_one_cell_area_does_not_panic ... ok
[INFO] [stdout] test prompt::tests::render_modal_zero_area_is_a_noop ... ok
[INFO] [stdout] test prompt::tests::render_writes_disabled_marker_under_test_backend ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_disabled_without_reason_still_carries_marker ... ok
[INFO] [stdout] test prompt::tests::render_writes_rows_under_test_backend ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_disabled_row_keeps_hint_between_label_and_reason ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_includes_optional_footer_with_blank_gap ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_marker_indents_disabled_row_in_nav_mode ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_marker_only_on_first_wrapped_row_of_selected_choice ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_marker_follows_cursor_after_move_down ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_marker_skips_unrelated_rows ... ok
[INFO] [stdout] test prompt::tests::render_zero_area_is_a_noop ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_marks_disabled_choice_with_monochrome_marker_and_reason ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_drops_indent_when_width_too_narrow_for_marker ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_matches_spec_4_3_giant_spider_example ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_matches_spec_5_wandering_monk_disabled_row ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_matches_spec_9_lost_and_found_example ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_omits_prompt_label_when_no_choices ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_preserves_explicit_blank_lines_in_body ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_marks_selected_row_with_caret_in_nav_mode ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_uppercases_marker_for_lowercase_or_uppercase_input ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_mixes_enabled_and_disabled_rows_distinctly ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_wraps_long_choice_label_at_word_boundary ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_no_marker_when_not_in_nav_mode ... ok
[INFO] [stdout] test prompt::tests::resize_is_not_a_prompt_key ... ok
[INFO] [stdout] test prompt::tests::step_from_input_arrows_drive_cursor_without_vim_flag ... ok
[INFO] [stdout] test prompt::tests::step_from_input_does_not_consume_unrelated_keys ... ok
[INFO] [stdout] test prompt::tests::rendered_lines_zero_width_returns_no_rows_and_does_not_panic ... ok
[INFO] [stdout] test prompt::tests::step_from_input_ignores_j_and_k_when_vim_disabled ... ok
[INFO] [stdout] test prompt::tests::step_from_input_maps_j_and_k_when_vim_enabled ... ok
[INFO] [stdout] test presence::tests::set_presence_inserts_row_with_timestamp ... ok
[INFO] [stdout] test prompt::tests::step_from_input_returns_false_in_direct_key_mode ... ok
[INFO] [stdout] test prompt::tests::textblock_from_lines_preserves_input_order_and_blanks ... ok
[INFO] [stdout] test prompt::tests::textblock_hard_breaks_word_longer_than_width ... ok
[INFO] [stdout] test prompt::tests::textblock_strips_trailing_carriage_returns ... ok
[INFO] [stdout] test prompt::tests::textblock_with_style_records_role_for_theme_layer ... ok
[INFO] [stdout] test prompt::tests::textblock_render_zero_area_is_a_noop ... ok
[INFO] [stdout] test prompt::tests::textblock_renders_under_test_backend_with_wrapped_rows ... ok
[INFO] [stdout] test presence::tests::players_at_returns_only_current_occupants ... ok
[INFO] [stdout] test prompt::tests::textblock_preserves_explicit_blank_lines ... ok
[INFO] [stdout] test prompt::tests::theme_with_role_overrides_only_that_role ... ok
[INFO] [stdout] test prompt::tests::textblock_wraps_long_line_at_word_boundary ... ok
[INFO] [stdout] test prompt::tests::textblock_zero_width_returns_no_rows_and_does_not_panic ... ok
[INFO] [stdout] test prompt::tests::validate_choices_accepts_unique_keys ... ok
[INFO] [stdout] test prompt::tests::validate_choices_normalises_case_before_comparing ... ok
[INFO] [stdout] test prompt::tests::validate_choices_rejects_duplicate_active_keys ... ok
[INFO] [stdout] test prompt::tests::validate_choices_rejects_active_disabled_collision ... ok
[INFO] [stdout] test prompt::tests::validate_choices_reports_first_duplicate_in_declaration_order ... ok
[INFO] [stdout] test prompt::tests::validate_choices_rejects_two_disabled_with_same_key ... ok
[INFO] [stdout] test prompt::tests::validate_choices_treats_enter_and_esc_as_keys_too ... ok
[INFO] [stdout] test prompt::tests::vim_navigation_setter_round_trips_both_ways ... ok
[INFO] [stdout] test prompt::tests::with_disabled_reason_preserves_reason_and_flips_enabled ... ok
[INFO] [stdout] test prompt::tests::vim_navigation_defaults_off ... ok
[INFO] [stdout] test prompt::tests::with_hint_does_not_disable_choice ... ok
[INFO] [stdout] test prompt::tests::textblock_render_clips_when_height_exceeded ... ok
[INFO] [stdout] test prompt_screen::tests::fake_event_source_routes_cancellation_through_screen_command ... ok
[INFO] [stdout] test prompt_screen::tests::handle_input_routes_cancelled_when_cancellable ... ok
[INFO] [stdout] test prompt_screen::tests::fake_event_source_drives_screen_to_selection ... ok
[INFO] [stdout] test prompt::tests::with_style_overrides_role ... ok
[INFO] [stdout] test prompt_screen::tests::defaults_to_compact_layout ... ok
[INFO] [stdout] test prompt::tests::wrap_skips_disabled_trailing_row ... ok
[INFO] [stdout] test prompt_screen::tests::handle_input_routes_selected_through_callback ... ok
[INFO] [stdout] test prompt_screen::tests::handle_input_uppercase_hotkey_matches_lowercase_choice ... ok
[INFO] [stdout] test prompt_screen::tests::modal_builder_switches_layout ... ok
[INFO] [stdout] test prompt_screen::tests::navigation_input_does_not_invoke_callback ... ok
[INFO] [stdout] test prompt_screen::tests::render_draws_border_in_modal_layout ... ok
[INFO] [stdout] test roles::tests::as_token_returns_canonical_spelling ... ok
[INFO] [stdout] test prompt_screen::tests::render_writes_choice_label_in_compact_layout ... ok
[INFO] [stdout] test prompt_screen::tests::screen_is_object_safe_via_box_dyn ... ok
[INFO] [stdout] test roles::tests::parse_empty_or_whitespace_falls_back_to_user ... ok
[INFO] [stdout] test roles::tests::parse_canonical_tokens ... ok
[INFO] [stdout] test roles::tests::parse_is_case_insensitive ... ok
[INFO] [stdout] test roles::tests::parse_trims_whitespace ... ok
[INFO] [stdout] test roles::tests::parse_unknown_role_preserves_original_string ... ok
[INFO] [stdout] test roles::tests::security_level_mapping_matches_spec ... ok
[INFO] [stdout] test roles::tests::unknown_role_maps_to_user_security_level ... ok
[INFO] [stdout] test roles::tests::context_security_level_uses_role_mapping ... ok
[INFO] [stdout] test runtime::tests::build_rejects_empty_title ... ok
[INFO] [stdout] test runtime::tests::build_rejects_no_screens ... ok
[INFO] [stdout] test runtime::tests::build_rejects_whitespace_only_title ... ok
[INFO] [stdout] test runtime::tests::build_rejects_zero_height_min_size ... ok
[INFO] [stdout] test runtime::tests::build_rejects_zero_width_min_size ... ok
[INFO] [stdout] test runtime::tests::crossterm_event_source_constructs ... ok
[INFO] [stdout] test runtime::tests::debug_for_game_reports_save_handler_presence ... ok
[INFO] [stdout] test runtime::tests::debug_for_game_does_not_leak_screen_internals ... ok
[INFO] [stdout] test roles::tests::known_variants_round_trip_through_serde ... ok
[INFO] [stdout] test runtime::tests::game_error_is_send_and_sync ... ok
[INFO] [stdout] test roles::tests::context_with_no_role_returns_user ... ok
[INFO] [stdout] test runtime::tests::builder_chains_in_spec_8_1_order ... ok
[INFO] [stdout] test runtime::tests::built_game_save_handler_threads_into_runtime_loop ... ok
[INFO] [stdout] test runtime::tests::loop_error_exit_does_not_invoke_save_handler ... ok
[INFO] [stdout] test runtime::tests::loop_dispatches_input_and_exits_on_quit ... ok
[INFO] [stdout] test runtime::tests::loop_empty_stack_drain_invokes_save_handler_once ... ok
[INFO] [stdout] test runtime::tests::loop_event_source_error_propagates ... ok
[INFO] [stdout] test runtime::tests::loop_handler_non_save_error_is_normalised_to_save ... ok
[INFO] [stdout] test runtime::tests::loop_idle_ticks_do_not_redraw_static_screen ... ok
[INFO] [stdout] test runtime::tests::loop_handler_non_save_error_on_quit_drain_normalises_to_save ... ok
[INFO] [stdout] test runtime::tests::loop_handler_save_error_message_passes_through_unchanged ... ok
[INFO] [stdout] test runtime::tests::loop_input_redraws_even_when_command_is_none ... ok
[INFO] [stdout] test runtime::tests::loop_message_and_error_side_effects_do_not_break_the_loop ... ok
[INFO] [stdout] test runtime::tests::loop_resize_updates_terminal_size_for_next_frame ... ok
[INFO] [stdout] test runtime::tests::loop_save_callback_error_propagates ... ok
[INFO] [stdout] test runtime::tests::loop_tick_fires_when_event_source_times_out ... ok
[INFO] [stdout] test runtime::tests::loop_save_command_invokes_callback_and_continues ... ok
[INFO] [stdout] test runtime::tests::loop_stack_changes_redraw_new_top_screen ... ok
[INFO] [stdout] test runtime::tests::loop_pop_to_empty_signals_empty_stack_exit ... ok
[INFO] [stdout] test runtime::tests::loop_quit_drain_invokes_save_handler_once ... ok
[INFO] [stdout] test runtime::tests::loop_tick_redraw_command_opts_into_animation_paints ... ok
[INFO] [stdout] test runtime::tests::min_size_overrides_default ... ok
[INFO] [stdout] test runtime::tests::run_built_rejects_missing_config ... ok
[INFO] [stdout] test runtime::tests::open_world_db_if_enabled_propagates_open_failure ... ok
[INFO] [stdout] test runtime::tests::run_built_with_opener_does_not_engage_terminal_on_open_failure ... ok
[INFO] [stdout] test runtime::tests::run_propagates_validation_errors ... ok
[INFO] [stdout] test runtime::tests::run_with_io_leaves_world_db_none_when_unset ... ok
[INFO] [stdout] test runtime::tests::open_world_db_if_enabled_returns_none_when_disabled ... ok
[INFO] [stdout] test runtime::tests::run_built_rejects_missing_context ... ok
[INFO] [stdout] test runtime::tests::push_screen_preserves_order ... ok
[INFO] [stdout] test runtime::tests::run_with_io_threads_world_db_into_context ... ok
[INFO] [stdout] test runtime::tests::save_policy_default_is_per_foglet_user ... ok
[INFO] [stdout] test runtime::tests::save_policy_override_round_trips ... ok
[INFO] [stdout] test runtime::tests::terminal_restoration_runs_when_loop_exits_cleanly ... ok
[INFO] [stdout] test runtime::tests::terminal_restoration_runs_when_loop_returns_error ... ok
[INFO] [stdout] test runtime::tests::with_config_threads_config_into_built_game ... ok
[INFO] [stdout] test runtime::tests::with_foglet_context_threads_context_into_built_game ... ok
[INFO] [stdout] test runtime::tests::with_save_handler_replaces_rather_than_stacks ... ok
[INFO] [stdout] test runtime::tests::open_world_db_if_enabled_opens_db_when_enabled ... ok
[INFO] [stdout] test runtime::tests::with_save_handler_stores_handler_on_builder ... ok
[INFO] [stdout] test save::tests::cli_override_wins_over_everything_else ... ok
[INFO] [stdout] test save::tests::cli_override_with_strategy_none_still_returns_none ... ok
[INFO] [stdout] test prompt::tests::move_is_noop_in_direct_key_mode ... ok
[INFO] [stdout] test runtime::tests::defaults_match_spec_baseline ... ok
[INFO] [stdout] test save::tests::anonymous_segment_used_when_user_id_missing_in_production ... ok
[INFO] [stdout] test save::tests::crash_mid_write_leaves_previous_version_intact ... ok
[INFO] [stdout] test runtime::tests::run_with_io_skips_login_tick_hook_when_disabled ... ok
[INFO] [stdout] test save::tests::empty_fgk_save_dir_is_ignored ... ok
[INFO] [stdout] test save::tests::empty_slug_is_an_error ... ok
[INFO] [stdout] test save::tests::empty_slug_is_an_error_even_when_strategy_is_none ... ok
[INFO] [stdout] test save::tests::empty_user_id_treated_as_missing ... ok
[INFO] [stdout] test save::tests::production_path_uses_user_id_under_context_file_source ... ok
[INFO] [stdout] test save::tests::fgk_save_dir_env_used_when_no_cli_override ... ok
[INFO] [stdout] test save::tests::local_dev_path_is_relative_to_cwd ... ok
[INFO] [stdout] test save::tests::read_surfaces_deserialize_error_for_corrupt_json ... ok
[INFO] [stdout] test save::tests::production_path_used_when_context_came_from_env_vars ... ok
[INFO] [stdout] test save::tests::save_slot_apply_overwrites_in_place_and_dirties ... ok
[INFO] [stdout] test save::tests::save_slot_borrow_does_not_dirty ... ok
[INFO] [stdout] test save::tests::save_slot_borrow_mut_dirties_even_without_mutation ... ok
[INFO] [stdout] test save::tests::save_slot_borrow_mut_sets_dirty_flag ... ok
[INFO] [stdout] test save::tests::save_slot_handle_is_alias_for_clone ... ok
[INFO] [stdout] test save::tests::save_slot_handle_shares_state_with_original ... ok
[INFO] [stdout] test save::tests::read_returns_none_for_missing_file ... ok
[INFO] [stdout] test runtime::tests::run_with_io_registers_world_tick_callbacks_before_login_hook ... ok
[INFO] [stdout] test save::tests::save_slot_load_or_default_uses_default_when_missing ... ok
[INFO] [stdout] test save::tests::save_slot_load_or_default_surfaces_corrupt_save_error ... ok
[INFO] [stdout] test save::tests::save_slot_load_surfaces_deserialize_error ... ok
[INFO] [stdout] test save::tests::save_slot_load_returns_none_for_missing_file ... ok
[INFO] [stdout] test runtime::tests::run_with_io_runs_due_ticks_on_login_when_enabled ... ok
[INFO] [stdout] test save::tests::save_slot_new_round_trips_value_through_borrow ... ok
[INFO] [stdout] test save::tests::save_slot_save_failure_leaves_dirty_flag_set ... ok
[INFO] [stdout] test save::tests::save_slot_load_or_default_loads_existing_save ... ok
[INFO] [stdout] test save::tests::save_slot_save_handler_surfaces_errors_as_game_error_save ... ok
[INFO] [stdout] test save::tests::save_slot_save_clears_dirty_flag ... ok
[INFO] [stdout] test save::tests::save_slot_load_round_trips_existing_save ... ok
[INFO] [stdout] test save::tests::save_slot_save_handler_observes_post_registration_mutations ... ok
[INFO] [stdout] test save::tests::save_slot_save_handler_outlives_original_binding ... ok
[INFO] [stdout] test save::tests::save_slot_save_persists_latest_mutations ... ok
[INFO] [stdout] test save::tests::save_slot_save_handler_persists_current_contents ... ok
[INFO] [stdout] test save::tests::save_slot_starts_clean ... ok
[INFO] [stdout] test save::tests::save_slot_snapshot_does_not_dirty ... ok
[INFO] [stdout] test save::tests::strategy_none_short_circuits ... ok
[INFO] [stdout] test screen::tests::apply_error_passes_through ... ok
[INFO] [stdout] test save::tests::write_to_path_with_no_parent_errors ... ok
[INFO] [stdout] test screen::tests::apply_message_passes_through ... ok
[INFO] [stdout] test screen::tests::apply_none_is_noop ... ok
[INFO] [stdout] test screen::tests::apply_pop_last_screen_signals_empty_stack_exit ... ok
[INFO] [stdout] test screen::tests::apply_pop_on_empty_stack_signals_empty_stack_exit ... ok
[INFO] [stdout] test save::tests::write_then_read_round_trips ... ok
[INFO] [stdout] test save::tests::write_creates_missing_parent_directories ... ok
[INFO] [stdout] test screen::tests::apply_redraw_has_no_stack_side_effect ... ok
[INFO] [stdout] test screen::tests::apply_pop_shrinks_stack ... ok
[INFO] [stdout] test save::tests::save_slot_snapshot_returns_independent_clone ... ok
[INFO] [stdout] test screen::tests::apply_quit_clears_stack_and_exits ... ok
[INFO] [stdout] test screen::tests::apply_push_grows_stack ... ok
[INFO] [stdout] test screen::tests::apply_replace_on_empty_just_pushes ... ok
[INFO] [stdout] test screen::tests::apply_replace_swaps_top ... ok
[INFO] [stdout] test screen::tests::default_on_resize_is_none ... ok
[INFO] [stdout] test screen::tests::default_tick_is_none ... ok
[INFO] [stdout] test screen::tests::apply_save_leaves_stack_alone ... ok
[INFO] [stdout] test screen::tests::game_context_borrows_runtime_data ... ok
[INFO] [stdout] test screen::tests::default_handle_input_is_none ... ok
[INFO] [stdout] test save::tests::second_write_overwrites_first ... ok
[INFO] [stdout] test screen::tests::render_runs_against_test_backend ... ok
[INFO] [stdout] test screen::tests::screen_command_error_round_trips_payload ... ok
[INFO] [stdout] test screen::tests::screen_command_message_round_trips_payload ... ok
[INFO] [stdout] test screen::tests::screen_command_push_carries_screen ... ok
[INFO] [stdout] test screen::tests::screen_command_replace_carries_screen ... ok
[INFO] [stdout] test screen::tests::screen_is_object_safe ... ok
[INFO] [stdout] test screen::tests::scripted_input_drives_push_then_pop_then_quit ... ok
[INFO] [stdout] test screen::tests::scripted_save_does_not_disturb_stack_or_top ... ok
[INFO] [stdout] test save::tests::save_slot_save_round_trips_through_write_atomic ... ok
[INFO] [stdout] test screens::event_log::tests::event_log_screen_embedded_region_does_not_redraw_outside_region ... ok
[INFO] [stdout] test screens::event_log::tests::event_log_screen_empty_result_uses_empty_state_text ... ok
[INFO] [stdout] test screen::tests::game_context_with_world_db_attaches_enabled_v5_handles_only ... ok
[INFO] [stdout] test screen::tests::game_context_with_world_db_attaches_enabled_v4_handles_only ... ok
[INFO] [stdout] test screen::tests::game_context_with_world_db_leaves_disabled_v5_handles_none ... ok
[INFO] [stdout] test screen::tests::screen_command_debug_does_not_panic_for_trait_objects ... ok
[INFO] [stdout] test screens::event_log::tests::event_log_screen_formatter_runs_once_per_visible_event_and_drives_rendering ... ok
[INFO] [stdout] test screens::event_log::tests::event_log_screen_pages_forward_and_backward_across_100_events ... ok
[INFO] [stdout] test screens::event_log::tests::event_log_screen_rendering_does_not_mutate_event_rows ... ok
[INFO] [stdout] test screens::event_log::tests::event_log_screen_reads_configured_events_and_renders_within_80x24 ... ok
[INFO] [stdout] test spatial::tests::applies_places_migration_with_documented_columns ... ok
[INFO] [stdout] test spatial::tests::applies_routes_migration_with_place_fks ... ok
[INFO] [stdout] test screens::event_log::tests::event_log_screen_player_scope_excludes_other_players_events ... ok
[INFO] [stdout] test services::tests::service_context_threads_fixed_date_into_turn_spending ... ok
[INFO] [stdout] test spatial::tests::get_place_by_key_returns_present_row_and_none_when_missing ... ok
[INFO] [stdout] test spatial::tests::get_place_by_key_returns_match_or_none ... ok
[INFO] [stdout] test spatial::tests::bidirectional_routes_require_two_explicit_rows ... ok
[INFO] [stdout] test spatial::tests::directional_routes_do_not_imply_reverse_connections ... ok
[INFO] [stdout] test spatial::tests::can_create_parallel_routes_with_different_kinds ... ok
[INFO] [stdout] test spatial::tests::create_route_returns_stored_row ... ok
[INFO] [stdout] test spatial::tests::insert_place_rejects_duplicate_key ... ok
[INFO] [stdout] test screen::tests::game_context_with_world_db_leaves_disabled_v4_handles_none ... ok
[INFO] [stdout] test spatial::tests::insert_place_returns_stored_row ... ok
[INFO] [stdout] test spatial::tests::insert_place_preserves_metadata_json_byte_for_byte ... ok
[INFO] [stdout] test terminal::tests::cleanup_surfaces_teardown_error_and_marks_spent ... ok
[INFO] [stdout] test terminal::tests::arm_then_disarm_prevents_restoration ... ok
[INFO] [stdout] test terminal::tests::crossterm_backend_constructs ... ok
[INFO] [stdout] test terminal::tests::double_cleanup_is_a_noop ... ok
[INFO] [stdout] test terminal::tests::drop_calls_leave_exactly_once ... ok
[INFO] [stdout] test terminal::tests::drop_runs_on_early_return ... ok
[INFO] [stdout] test terminal::tests::drop_without_explicit_cleanup_still_restores ... ok
[INFO] [stdout] test terminal::tests::explicit_cleanup_then_drop_runs_leave_exactly_once ... ok
[INFO] [stdout] test terminal::tests::guard_cleanup_disarms_panic_hook ... ok
[INFO] [stdout] test terminal::tests::guard_drop_disarms_panic_hook ... ok
[INFO] [stdout] test terminal::tests::install_panic_hook_is_idempotent ... ok
[INFO] [stdout] test spatial::tests::get_route_between_returns_present_missing_and_direction_sensitive_results ... ok
[INFO] [stdout] test terminal::tests::new_calls_enter_once_and_marks_unclean ... ok
[INFO] [stdout] test terminal::tests::run_panic_restoration_invokes_restorer_when_armed ... ok
[INFO] [stdout] test terminal::tests::run_panic_restoration_is_noop_when_disarmed ... ok
[INFO] [stdout] test terminal::tests::second_run_panic_restoration_is_noop_after_firing ... ok
[INFO] [stdout] test terminal::tests::setup_failure_returns_error_and_skips_leave ... ok
[INFO] [stdout] test tests::version_is_non_empty ... ok
[INFO] [stdout] test terminal::tests::teardown_failure_in_drop_is_swallowed ... ok
[INFO] [stdout] test terminal::tests::manual_clean_flag_skips_leave_in_drop ... ok
[INFO] [stdout] test tests::version_reports_patch_release ... ok
[INFO] [stdout] test spatial::tests::list_places_returns_sorted_rows ... ok
[INFO] [stdout] test spatial::tests::inbound_routes_filters_to_destination_only ... ok
[INFO] [stdout] test travel::tests::request_builder_overrides_route_and_touch_recall ... ok
[INFO] [stdout] test travel::tests::request_defaults_to_unique_route_resolution_and_touch_recall ... ok
[INFO] [stdout] test spatial::tests::transaction_scoped_place_and_route_lookup_observes_rollback ... ok
[INFO] [stdout] test spatial::tests::outbound_routes_filters_to_source_only ... ok
[INFO] [stdout] test notices::tests::archive_notice_is_idempotent ... ok
[INFO] [stdout] test travel::tests::travel_error_variants_cover_specified_failure_buckets ... ok
[INFO] [stdout] test travel::tests::event_append_runs_after_post_move_callback_and_keeps_returned_outcomes ... ok
[INFO] [stdout] test travel::tests::post_move_callback_runs_after_presence_moves_and_returns_outcome ... ok
[INFO] [stdout] test travel::tests::post_move_callback_failure_rolls_back_movement_recall_cost_and_event_append ... ok
[INFO] [stdout] test travel::tests::travel_append_event_none_returns_no_event_id_and_writes_no_event ... ok
[INFO] [stdout] test notices::tests::mark_read_is_idempotent ... ok
[INFO] [stdout] test travel::tests::travel_charge_cost_tx_can_mutate_inventory_inside_travel_transaction ... ok
[INFO] [stdout] test place_recall::tests::touch_recall_inserts_then_refreshes_last_seen_at ... ok
[INFO] [stdout] test triggered_outcomes::tests::outcome_separates_feedback_from_event_draft_and_idempotency ... ok
[INFO] [stdout] test travel::tests::travel_charge_cost_tx_insufficient_stock_rolls_back_travel ... ok
[INFO] [stdout] test turns::tests::date_provider_is_usable_through_generic_bound ... ok
[INFO] [stdout] test triggered_outcomes::tests::place_arrival_context_has_stable_genre_neutral_key ... ok
[INFO] [stdout] test travel::tests::travel_cost_failure_rolls_back_presence_recall_and_events ... ok
[INFO] [stdout] test place_recall::tests::merge_recall_snapshot_preserves_unrelated_keys_and_advances_last_seen ... ok
[INFO] [stdout] test place_recall::tests::touch_recall_preserves_first_seen_at_without_merging_metadata ... ok
[INFO] [stdout] test place_recall::tests::touch_recall_updates_snapshot_json_each_time ... ok
[INFO] [stdout] test travel::tests::travel_event_append_failure_rolls_back_cost_presence_and_recall ... ok
[INFO] [stdout] test travel::tests::travel_functions_when_events_are_disabled_but_place_recall_is_enabled ... ok
[INFO] [stdout] test travel::tests::travel_functions_when_place_recall_is_disabled_but_events_are_enabled ... ok
[INFO] [stdout] test travel::tests::travel_success_updates_presence_touches_recall_and_appends_event ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_creates_row_at_configured_allowance_for_new_player ... ok
[INFO] [stdout] test turns::tests::fixed_date_provider_returns_configured_date ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_caps_carryover_at_carryover_max ... ok
[INFO] [stdout] test turns::tests::fixed_date_provider_set_advances_reported_date ... ok
[INFO] [stdout] test turns::tests::local_date_parse_rejects_malformed_inputs ... ok
[INFO] [stdout] test turns::tests::local_date_parse_accepts_canonical_iso_form ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_carries_from_most_recent_prior_row_across_skipped_days ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_creates_separate_rows_per_date ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_carries_full_prior_balance_when_below_cap ... ok
[INFO] [stdout] test travel::tests::travel_touch_recall_false_leaves_recall_unchanged ... ok
[INFO] [stdout] test travel::tests::travel_validation_failure_rolls_back_presence_recall_and_events ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_creates_separate_rows_per_player ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_does_not_carry_over_for_brand_new_player ... ok
[INFO] [stdout] test travel::tests::travel_without_route_id_rejects_ambiguous_outbound_routes ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_returns_typed_sqlite_error_on_missing_table ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_does_not_carry_over_when_max_is_zero ... ok
[INFO] [stdout] test turns::tests::ensure_today_turns_is_idempotent_and_preserves_existing_balance ... ok
[INFO] [stdout] test turns::tests::migration_creates_turn_ledger_table ... ok
[INFO] [stdout] test turns::tests::spend_turns_creates_today_row_lazily_then_decrements ... ok
[INFO] [stdout] test turns::tests::spend_turns_returns_typed_sqlite_error_on_missing_table ... ok
[INFO] [stdout] test turns::tests::spend_turns_on_can_spend_inside_existing_transaction ... ok
[INFO] [stdout] test turns::tests::spend_turns_decrements_balance_for_existing_player ... ok
[INFO] [stdout] test turns::tests::spend_turns_allows_exact_balance_spend_to_zero ... ok
[INFO] [stdout] test turns::tests::spend_turns_on_rolls_back_with_surrounding_transaction ... ok
[INFO] [stdout] test weighted::tests::explanation_reports_roll_and_filtered_entries ... ok
[INFO] [stdout] test weighted::tests::selection_is_repeatable_for_same_seed_and_entries ... ok
[INFO] [stdout] test weighted::tests::empty_and_zero_weight_tables_return_explicit_no_selection ... ok
[INFO] [stdout] test weighted::tests::selection_is_sensitive_to_seed_changes ... ok
[INFO] [stdout] test widgets::tests::centred_rect_respects_outer_offset ... ok
[INFO] [stdout] test widgets::tests::inventory_list_empty_centers_the_hint ... ok
[INFO] [stdout] test widgets::tests::inventory_list_empty_hint_uses_dim_style ... ok
[INFO] [stdout] test widgets::tests::menu_list_clamps_out_of_range_selection ... ok
[INFO] [stdout] test widgets::tests::centred_rect_matches_legacy_example_helper ... ok
[INFO] [stdout] test widgets::tests::inventory_list_with_items_renders_like_menu ... ok
[INFO] [stdout] test widgets::tests::menu_list_handles_empty_items ... ok
[INFO] [stdout] test widgets::tests::centred_rect_clamps_when_outer_is_smaller ... ok
[INFO] [stdout] test widgets::tests::menu_list_selected_row_uses_reversed_style ... ok
[INFO] [stdout] test widgets::tests::message_line_error_prefixes_and_colours_bold ... ok
[INFO] [stdout] test widgets::tests::centred_rect_centres_inside_larger_outer ... ok
[INFO] [stdout] test widgets::tests::menu_list_renders_title_and_items ... ok
[INFO] [stdout] test widgets::tests::menu_list_marks_selected_row ... ok
[INFO] [stdout] test widgets::tests::message_line_ignores_extra_rows ... ok
[INFO] [stdout] test widgets::tests::message_line_hint_prefixes_and_colours ... ok
[INFO] [stdout] test widgets::tests::message_line_info_has_no_prefix ... ok
[INFO] [stdout] test widgets::tests::message_line_truncates_to_area_width ... ok
[INFO] [stdout] test widgets::tests::render_hint_line_centres_text_in_area ... ok
[INFO] [stdout] test turns::tests::spend_turns_applies_repeatedly_against_current_balance ... ok
[INFO] [stdout] test widgets::tests::render_hint_line_handles_zero_sized_area ... ok
[INFO] [stdout] test widgets::tests::render_hint_line_uses_theme_hint_style ... ok
[INFO] [stdout] test widgets::tests::render_hint_line_only_paints_first_row ... ok
[INFO] [stdout] test widgets::tests::render_modal_handles_tiny_area_without_panic ... ok
[INFO] [stdout] test widgets::tests::render_hint_line_truncates_when_overflowing ... ok
[INFO] [stdout] test turns::tests::spend_turns_isolates_balances_per_player ... ok
[INFO] [stdout] test widgets::tests::render_modal_draws_border_title_and_padded_body ... ok
[INFO] [stdout] test widgets::tests::render_modal_omits_title_when_none ... ok
[INFO] [stdout] test world_db::tests::invalid_journal_mode_is_rejected ... ok
[INFO] [stdout] test turns::tests::spend_turns_rejects_insufficient_turns_without_changing_balance ... ok
[INFO] [stdout] test turns::tests::spend_turns_lazy_init_applies_carryover_cap ... ok
[INFO] [stdout] test turns::tests::spend_turns_zero_amount_leaves_balance_unchanged ... ok
[INFO] [stdout] test turns::tests::turn_ledger_primary_key_is_player_id_and_local_date ... ok
[INFO] [stdout] test turns::tests::spend_turns_zero_amount_at_zero_balance_remains_a_no_op ... ok
[INFO] [stdout] test world_db::tests::apply_migration_failure_does_not_record_row ... ok
[INFO] [stdout] test world_db::tests::journal_mode_is_normalized_before_apply ... ok
[INFO] [stdout] test world_db::tests::open_enables_foreign_key_enforcement ... ok
[INFO] [stdout] test world_db::tests::apply_migration_idempotency_keys_on_version_not_name ... ok
[INFO] [stdout] test world_db::tests::options_from_world_section_carries_busy_timeout ... ok
[INFO] [stdout] test world_db::tests::open_creates_world_migrations_table ... ok
[INFO] [stdout] test world_db::tests::options_from_world_section_carries_journal_mode ... ok
[INFO] [stdout] test world_db::tests::open_applies_default_busy_timeout ... ok
[INFO] [stdout] test world_db::tests::open_with_options_applies_truncate_journal_mode ... ok
[INFO] [stdout] test world_db::tests::apply_migration_records_version_and_runs_sql ... ok
[INFO] [stdout] test world_db::tests::apply_migration_is_idempotent_across_repeat_calls ... ok
[INFO] [stdout] test turns::tests::turn_ledger_rejects_duplicate_player_day_rows ... ok
[INFO] [stdout] test world_db::tests::open_with_options_applies_busy_timeout ... ok
[INFO] [stdout] test world_db::tests::open_creates_missing_parent_directories ... ok
[INFO] [stdout] test world_db::tests::open_with_options_applies_wal_journal_mode ... ok
[INFO] [stdout] test presence::tests::move_player_rolls_back_when_callback_rejects ... ok
[INFO] [stdout] test world_db::tests::opens_sqlite_under_temp_dir ... ok
[INFO] [stdout] test world_db::tests::reopening_existing_db_keeps_migrations_table_idempotent ... ok
[INFO] [stdout] test presence::tests::move_player_updates_presence_and_entered_at ... ok
[INFO] [stdout] test world_db::tests::transaction_rolls_back_on_closure_error ... ok
[INFO] [stdout] test world_ticks::tests::applies_world_tick_tasks_migration_with_documented_columns ... ok
[INFO] [stdout] test world_db::tests::transaction_commits_writes_on_ok ... ok
[INFO] [stdout] test world_ticks::tests::daily_slot_registration_rejects_invalid_slot_lists ... ok
[INFO] [stdout] test world_db::tests::spend_turn_and_emit_rolls_back_on_mutation_failure ... ok
[INFO] [stdout] test world_db::tests::spend_turn_and_emit_commits_all_three_steps_on_success ... ok
[INFO] [stdout] test world_db::tests::spend_turn_and_emit_rolls_back_on_insufficient_turns ... ok
[INFO] [stdout] test world_ticks::tests::register_tick_is_idempotent_for_same_key_and_interval ... ok
[INFO] [stdout] test world_ticks::tests::daily_slot_tick_runs_late_without_drifting_next_slot ... ok
[INFO] [stdout] test world_ticks::tests::daily_slot_tick_catches_up_across_midnight_with_cap ... ok
[INFO] [stdout] test world_ticks::tests::register_tick_persists_row_and_returns_committed_task ... ok
[INFO] [stdout] test world_ticks::tests::register_tick_rejects_non_positive_interval ... ok
[INFO] [stdout] test world_ticks::tests::old_interval_only_row_is_upgraded_and_remains_runnable ... ok
[INFO] [stdout] test world_ticks::tests::run_due_ticks_executes_only_due_tasks ... ok
[INFO] [stdout] test world_ticks::tests::run_due_ticks_limits_due_tasks_to_max_catchup_per_call ... ok
[INFO] [stdout] test world_ticks::tests::run_due_ticks_retries_failed_callback_without_advancing_last_run_at ... ok
[INFO] [stdout] test world_ticks::tests::run_due_ticks_concurrent_runners_do_not_double_invoke_tasks ... ok
[INFO] [stdout] test place_recall::tests::recall_for_player_returns_newest_first_deterministically ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 993 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.85s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/murder_motel_scaffold.rs (/opt/rustwide/target/release/build/foglet_game/34c9dcc96d0c6fea/out/murder_motel_scaffold-34c9dcc96d0c6fea)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test example_target_is_registered_on_this_crate ... FAILED
[INFO] [stdout] test scaffold_game_toml_parses_into_game_config ... FAILED
[INFO] [stdout] test scaffold_game_toml_enables_shared_world_sections ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- example_target_is_registered_on_this_crate stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'example_target_is_registered_on_this_crate' (2959) panicked at tests/murder_motel_scaffold.rs:121:5:
[INFO] [stdout] expected an [[example]] entry registering murder_motel; missing from foglet_game/Cargo.toml
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5c7fb7a14c71 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x5c7fb7a2959a - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    2:     0x5c7fb7a18eac - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]    3:     0x5c7fb79f0be6 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x5c7fb7a0cfa9 - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]    5:     0x5c7fb7941710 - test[aada8e7e76ba119b]::test_main_inner::{closure#0}
[INFO] [stdout]    6:     0x5c7fb7a0d162 - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]    7:     0x5c7fb79f0cc4 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    8:     0x5c7fb79e9819 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    9:     0x5c7fb79f189d - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]   10:     0x5c7fb7a29ccc - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]   11:     0x5c7fb79344e1 - <murder_motel_scaffold[d1cd7579bd07e850]::example_target_is_registered_on_this_crate::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   12:     0x5c7fb7934b5b - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]   13:     0x5c7fb7941d35 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]   14:     0x5c7fb793b624 - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]   15:     0x5c7fb7944dc2 - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   16:     0x5c7fb7a1416f - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   17:     0x74295a6e5dfa - <unknown>
[INFO] [stdout]   18:     0x74295a7793d4 - clone
[INFO] [stdout]   19:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- scaffold_game_toml_parses_into_game_config stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'scaffold_game_toml_parses_into_game_config' (2961) panicked at tests/murder_motel_scaffold.rs:42:31:
[INFO] [stdout] scaffold game.toml at "/opt/rustwide/workdir/../../examples/murder_motel/assets/game.toml" failed to load: failed to read game config from `/opt/rustwide/workdir/../../examples/murder_motel/assets/game.toml`: No such file or directory (os error 2)
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5c7fb7a14c71 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x5c7fb7a2959a - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    2:     0x5c7fb7a18eac - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]    3:     0x5c7fb79f0be6 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x5c7fb7a0cfa9 - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]    5:     0x5c7fb7941710 - test[aada8e7e76ba119b]::test_main_inner::{closure#0}
[INFO] [stdout]    6:     0x5c7fb7a0d162 - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]    7:     0x5c7fb79f0c92 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    8:     0x5c7fb79e9819 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    9:     0x5c7fb79f189d - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]   10:     0x5c7fb7a29ccc - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]   11:     0x5c7fb7933625 - murder_motel_scaffold[d1cd7579bd07e850]::scaffold_game_toml_parses_into_game_config::{closure#0}
[INFO] [stdout]   12:     0x5c7fb79347e2 - <murder_motel_scaffold[d1cd7579bd07e850]::scaffold_game_toml_parses_into_game_config::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   13:     0x5c7fb7934b5b - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]   14:     0x5c7fb7941d35 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]   15:     0x5c7fb793b624 - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]   16:     0x5c7fb7944dc2 - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   17:     0x5c7fb7a1416f - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   18:     0x74295a6e5dfa - <unknown>
[INFO] [stdout]   19:     0x74295a7793d4 - clone
[INFO] [stdout]   20:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- scaffold_game_toml_enables_shared_world_sections stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'scaffold_game_toml_enables_shared_world_sections' (2960) panicked at tests/murder_motel_scaffold.rs:75:31:
[INFO] [stdout] scaffold game.toml at "/opt/rustwide/workdir/../../examples/murder_motel/assets/game.toml" failed to load: failed to read game config from `/opt/rustwide/workdir/../../examples/murder_motel/assets/game.toml`: No such file or directory (os error 2)
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5c7fb7a14c71 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x5c7fb7a2959a - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    2:     0x5c7fb7a18eac - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]    3:     0x5c7fb79f0be6 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x5c7fb7a0cfa9 - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]    5:     0x5c7fb7941710 - test[aada8e7e76ba119b]::test_main_inner::{closure#0}
[INFO] [stdout]    6:     0x5c7fb7a0d162 - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]    7:     0x5c7fb79f0c92 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    8:     0x5c7fb79e9819 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    9:     0x5c7fb79f189d - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]   10:     0x5c7fb7a29ccc - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]   11:     0x5c7fb7933685 - murder_motel_scaffold[d1cd7579bd07e850]::scaffold_game_toml_enables_shared_world_sections::{closure#0}
[INFO] [stdout]   12:     0x5c7fb7934a90 - <murder_motel_scaffold[d1cd7579bd07e850]::scaffold_game_toml_enables_shared_world_sections::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   13:     0x5c7fb7934b5b - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]   14:     0x5c7fb7941d35 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]   15:     0x5c7fb793b624 - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]   16:     0x5c7fb7944dc2 - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   17:     0x5c7fb7a1416f - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   18:     0x74295a6e5dfa - <unknown>
[INFO] [stdout]   19:     0x74295a7793d4 - clone
[INFO] [stdout]   20:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     example_target_is_registered_on_this_crate
[INFO] [stdout]     scaffold_game_toml_enables_shared_world_sections
[INFO] [stdout]     scaffold_game_toml_parses_into_game_config
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 0 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--test murder_motel_scaffold`
[INFO] running `Command { std: "docker" "inspect" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b", kill_on_drop: false }`
[INFO] [stdout] 967690dd5702cadb2a6c64dd92f158bbb3a8bba6103ccd0d0f0dd9d8f7a6b03b
