[INFO] fetching crate room-ralph 3.6.0... [INFO] testing room-ralph-3.6.0 against master#562dee4820c458d823175268e41601d4c060588a for pr-154210-1 [INFO] extracting crate room-ralph 3.6.0 into /workspace/builds/worker-0-tc1/source [INFO] started tweaking crates.io crate room-ralph 3.6.0 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate room-ralph 3.6.0 [INFO] tweaked toml for crates.io crate room-ralph 3.6.0 written to /workspace/builds/worker-0-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate room-ralph 3.6.0 on toolchain 562dee4820c458d823175268e41601d4c060588a [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate room-ralph 3.6.0 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded clap_derive v4.6.0 [INFO] [stderr] Downloaded clap_lex v1.1.0 [INFO] [stderr] Downloaded clap v4.6.0 [INFO] [stderr] Downloaded room-protocol v3.5.1 [INFO] [stderr] Downloaded clap_builder v4.6.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 64ee9019d46ecb442b453cbb0366b7796ebc3ac49620961589f832c5dacbaa9b [INFO] running `Command { std: "docker" "start" "-a" "64ee9019d46ecb442b453cbb0366b7796ebc3ac49620961589f832c5dacbaa9b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "64ee9019d46ecb442b453cbb0366b7796ebc3ac49620961589f832c5dacbaa9b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "64ee9019d46ecb442b453cbb0366b7796ebc3ac49620961589f832c5dacbaa9b", kill_on_drop: false }` [INFO] [stdout] 64ee9019d46ecb442b453cbb0366b7796ebc3ac49620961589f832c5dacbaa9b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] b3d7960e2a77aa3f3c30d6d93bab09847872181dfda889838948671dfd3fb4c6 [INFO] running `Command { std: "docker" "start" "-a" "b3d7960e2a77aa3f3c30d6d93bab09847872181dfda889838948671dfd3fb4c6", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.183 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling clap_lex v1.1.0 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling anstream v1.0.0 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling nu-ansi-term v0.50.3 [INFO] [stderr] Compiling tracing-log v0.2.0 [INFO] [stderr] Compiling clap_builder v4.6.0 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling socket2 v0.6.3 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling uuid v1.22.0 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling matchers v0.2.0 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling clap_derive v4.6.0 [INFO] [stderr] Compiling tokio-macros v2.6.1 [INFO] [stderr] Compiling tokio v1.50.0 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling tracing-subscriber v0.3.23 [INFO] [stderr] Compiling clap v4.6.0 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling room-protocol v3.5.1 [INFO] [stderr] Compiling room-ralph v3.6.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 25.12s [INFO] running `Command { std: "docker" "inspect" "b3d7960e2a77aa3f3c30d6d93bab09847872181dfda889838948671dfd3fb4c6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b3d7960e2a77aa3f3c30d6d93bab09847872181dfda889838948671dfd3fb4c6", kill_on_drop: false }` [INFO] [stdout] b3d7960e2a77aa3f3c30d6d93bab09847872181dfda889838948671dfd3fb4c6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] dd84a1835e1858f37c77ba151bddeecec8effced92cb3b30e859e6f20eaeece9 [INFO] running `Command { std: "docker" "start" "-a" "dd84a1835e1858f37c77ba151bddeecec8effced92cb3b30e859e6f20eaeece9", kill_on_drop: false }` [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling linux-raw-sys v0.12.1 [INFO] [stderr] Compiling tempfile v3.27.0 [INFO] [stderr] Compiling room-ralph v3.6.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 6.84s [INFO] running `Command { std: "docker" "inspect" "dd84a1835e1858f37c77ba151bddeecec8effced92cb3b30e859e6f20eaeece9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "dd84a1835e1858f37c77ba151bddeecec8effced92cb3b30e859e6f20eaeece9", kill_on_drop: false }` [INFO] [stdout] dd84a1835e1858f37c77ba151bddeecec8effced92cb3b30e859e6f20eaeece9 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] c5f1dd8150ee141a2c99adc33ed71bbd48b2a4424299325e204c8229bb99ab28 [INFO] running `Command { std: "docker" "start" "-a" "c5f1dd8150ee141a2c99adc33ed71bbd48b2a4424299325e204c8229bb99ab28", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.12s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/room_ralph-2ed0e836a7145c4e) [INFO] [stdout] [INFO] [stdout] running 187 tests [INFO] [stdout] test agent_meta::tests::meta_path_returns_expected ... ok [INFO] [stdout] test agent_meta::tests::serialization_skips_none_fields ... ok [INFO] [stdout] test claude::tests::build_command_both_allowed_and_disallowed ... ok [INFO] [stdout] test claude::tests::build_command_empty_allowed_tools ... ok [INFO] [stdout] test claude::tests::build_command_base_args ... ok [INFO] [stdout] test claude::tests::build_command_empty_disallowed_tools ... ok [INFO] [stdout] test claude::tests::build_command_strips_claudecode_env_vars ... ok [INFO] [stdout] test claude::tests::build_command_with_add_dirs ... ok [INFO] [stdout] test claude::tests::build_command_with_dirs_and_tools ... ok [INFO] [stdout] test claude::tests::build_command_with_allowed_tools ... ok [INFO] [stdout] test claude::tests::detect_context_exhaustion_false_on_unrelated ... ok [INFO] [stdout] test claude::tests::extract_response_empty_input ... ok [INFO] [stdout] test claude::tests::extract_response_from_result_field ... ok [INFO] [stdout] test claude::tests::merge_no_profile_passes_through ... ok [INFO] [stdout] test claude::tests::merge_profile_deduplicates_allow ... ok [INFO] [stdout] test claude::tests::merge_profile_only_no_overrides ... ok [INFO] [stdout] test claude::tests::merge_profile_with_extra_allow ... ok [INFO] [stdout] test claude::tests::profile_coder_has_full_access ... ok [INFO] [stdout] test claude::tests::merge_profile_with_extra_disallow ... ok [INFO] [stdout] test claude::tests::profile_coordinator_blocks_writes ... ok [INFO] [stdout] test claude::tests::profile_display_roundtrip ... ok [INFO] [stdout] test claude::tests::profile_notion_has_notion_tools_and_blocks_push ... ok [INFO] [stdout] test agent_meta::tests::write_to_nonexistent_dir_fails ... ok [INFO] [stdout] test agent_meta::tests::cleanup_missing_file_no_error ... ok [INFO] [stdout] test claude::tests::profile_parse_all_variants ... ok [INFO] [stdout] test claude::tests::profile_parse_case_insensitive ... ok [INFO] [stdout] test claude::tests::detect_context_exhaustion_patterns ... ok [INFO] [stdout] test claude::tests::extract_response_from_content_field ... ok [INFO] [stdout] test claude::tests::profile_reviewer_blocks_writes ... ok [INFO] [stdout] test claude::tests::extract_response_from_error_field ... ok [INFO] [stdout] test claude::tests::build_command_with_disallowed_tools ... ok [INFO] [stdout] test claude::tests::extract_response_non_json ... ok [INFO] [stdout] test agent_meta::tests::write_and_read_roundtrip ... ok [INFO] [stdout] test claude::tests::detect_context_exhaustion_exit_zero ... ok [INFO] [stdout] test claude::tests::resolve_cli_none_disables_restrictions ... ok [INFO] [stdout] test claude::tests::extract_response_json_without_known_fields ... ok [INFO] [stdout] test claude::tests::merge_profile_deduplicates_disallow ... ok [INFO] [stdout] test claude::tests::resolve_cli_takes_precedence_over_env ... ok [INFO] [stdout] test claude::tests::resolve_cli_none_case_insensitive ... ok [INFO] [stdout] test claude::tests::resolve_cli_overrides_defaults ... ok [INFO] [stdout] test claude::tests::profile_parse_invalid ... ok [INFO] [stdout] test claude::tests::profile_reader_is_minimal ... ok [INFO] [stdout] test agent_meta::tests::cleanup_removes_file ... ok [INFO] [stdout] test agent_meta::tests::read_missing_returns_none ... ok [INFO] [stdout] test claude::tests::resolve_defaults_when_empty ... ok [INFO] [stdout] test claude::tests::resolve_disallowed_cli_none_clears ... ok [INFO] [stdout] test claude::tests::resolve_disallowed_cli_overrides ... ok [INFO] [stdout] test claude::tests::resolve_disallowed_cli_takes_precedence_over_env ... ok [INFO] [stdout] test claude::tests::merge_profile_both_overrides ... ok [INFO] [stdout] test claude::tests::resolve_disallowed_env_empty_uses_defaults ... ok [INFO] [stdout] test claude::tests::resolve_disallowed_defaults_empty ... ok [INFO] [stdout] test claude::tests::resolve_disallowed_env_none_clears ... ok [INFO] [stdout] test claude::tests::resolve_disallowed_env_overrides ... ok [INFO] [stdout] test claude::tests::resolve_disallowed_env_trims_whitespace ... ok [INFO] [stdout] test claude::tests::resolve_env_empty_string_uses_defaults ... ok [INFO] [stdout] test claude::tests::resolve_env_none_disables_restrictions ... ok [INFO] [stdout] test claude::tests::resolve_env_overrides_defaults ... ok [INFO] [stdout] test claude::tests::resolve_env_trims_whitespace ... ok [INFO] [stdout] test loop_runner::tests::format_duration_hours ... ok [INFO] [stdout] test claude::tests::stripped_env_vars_contains_expected_entries ... ok [INFO] [stdout] test loop_runner::tests::format_duration_minutes_and_seconds ... ok [INFO] [stdout] test loop_runner::tests::format_duration_seconds_only ... ok [INFO] [stdout] test loop_runner::tests::format_heartbeat_large_iteration ... ok [INFO] [stdout] test loop_runner::tests::format_heartbeat_with_issue ... ok [INFO] [stdout] test loop_runner::tests::format_heartbeat_without_issue ... ok [INFO] [stdout] test loop_runner::tests::format_heartbeat_zero_uptime ... ok [INFO] [stdout] test monitor::tests::context_limit_default ... ok [INFO] [stdout] test monitor::tests::format_usage_summary_over_threshold ... ok [INFO] [stdout] test monitor::tests::format_usage_summary_under_threshold ... ok [INFO] [stdout] test monitor::tests::log_usage_appends_to_existing_section ... ok [INFO] [stdout] test monitor::tests::log_usage_creates_section_in_new_file ... ok [INFO] [stdout] test monitor::tests::parse_cost_cost_usd_path ... ok [INFO] [stdout] test monitor::tests::log_usage_restart_annotation ... ok [INFO] [stdout] test monitor::tests::log_usage_no_restart_under_threshold ... ok [INFO] [stdout] test monitor::tests::parse_cost_empty_returns_zero ... ok [INFO] [stdout] test monitor::tests::parse_cost_no_cost_returns_zero ... ok [INFO] [stdout] test monitor::tests::parse_cost_result_nested ... ok [INFO] [stdout] test monitor::tests::parse_cost_total_cost_path ... ok [INFO] [stdout] test monitor::tests::parse_cost_usage_total_cost ... ok [INFO] [stdout] test monitor::tests::parse_output_tokens_empty_returns_zero ... ok [INFO] [stdout] test monitor::tests::parse_output_tokens_nested ... ok [INFO] [stdout] test monitor::tests::parse_output_tokens_statistics ... ok [INFO] [stdout] test monitor::tests::parse_output_tokens_missing_returns_zero ... ok [INFO] [stdout] test monitor::tests::parse_output_tokens_top_level ... ok [INFO] [stdout] test monitor::tests::parse_usage_empty_string_returns_zero ... ok [INFO] [stdout] test monitor::tests::parse_usage_invalid_json_returns_zero ... ok [INFO] [stdout] test monitor::tests::parse_usage_missing_returns_zero ... ok [INFO] [stdout] test monitor::tests::parse_usage_nested_under_result ... ok [INFO] [stdout] test monitor::tests::parse_usage_null_tokens_returns_zero ... ok [INFO] [stdout] test monitor::tests::parse_usage_statistics_path ... ok [INFO] [stdout] test monitor::tests::parse_usage_top_level ... ok [INFO] [stdout] test monitor::tests::resolve_path_missing_returns_none ... ok [INFO] [stdout] test monitor::tests::resolve_path_nested ... ok [INFO] [stdout] test monitor::tests::resolve_path_single_segment ... ok [INFO] [stdout] test monitor::tests::should_restart_at_limit ... ok [INFO] [stdout] test monitor::tests::should_restart_at_threshold ... ok [INFO] [stdout] test monitor::tests::should_restart_just_below_threshold ... ok [INFO] [stdout] test monitor::tests::should_restart_over_threshold ... ok [INFO] [stdout] test monitor::tests::should_restart_under_threshold ... ok [INFO] [stdout] test monitor::tests::should_restart_zero_tokens ... ok [INFO] [stdout] test monitor::tests::threshold_tokens_default ... ok [INFO] [stdout] test monitor::tests::usage_pct_fifty ... ok [INFO] [stdout] test monitor::tests::usage_pct_hundred ... ok [INFO] [stdout] test monitor::tests::usage_pct_seventy_five ... ok [INFO] [stdout] test monitor::tests::usage_pct_zero ... ok [INFO] [stdout] test personalities::tests::all_returns_five_personalities ... ok [INFO] [stdout] test personalities::tests::all_names_returns_five ... ok [INFO] [stdout] test personalities::tests::coder_profile_is_coder ... ok [INFO] [stdout] test personalities::tests::coordinator_profile_is_coordinator ... ok [INFO] [stdout] test personalities::tests::documenter_profile_is_notion ... ok [INFO] [stdout] test personalities::tests::each_personality_has_non_empty_description ... ok [INFO] [stdout] test personalities::tests::each_personality_has_non_empty_prompt ... ok [INFO] [stdout] test personalities::tests::lookup_all_builtins ... ok [INFO] [stdout] test personalities::tests::format_list_contains_all_names ... ok [INFO] [stdout] test personalities::tests::lookup_case_insensitive ... ok [INFO] [stdout] test personalities::tests::researcher_defaults_to_sonnet ... ok [INFO] [stdout] test personalities::tests::resolve_builtin_name ... ok [INFO] [stdout] test personalities::tests::resolve_file_path ... ok [INFO] [stdout] test personalities::tests::resolve_file_path_for_unknown_name ... ok [INFO] [stdout] test personalities::tests::researcher_profile_is_reader ... ok [INFO] [stdout] test personalities::tests::resolve_from_str_builtin ... ok [INFO] [stdout] test personalities::tests::lookup_unknown_returns_none ... ok [INFO] [stdout] test personalities::tests::coder_defaults_to_opus ... ok [INFO] [stdout] test personalities::tests::reviewer_profile_is_reviewer ... ok [INFO] [stdout] test progress::tests::progress_file_path_with_issue ... ok [INFO] [stdout] test progress::tests::read_progress_missing_file_returns_none ... ok [INFO] [stdout] test progress::tests::delete_progress_removes_file ... ok [INFO] [stdout] test progress::tests::progress_file_path_empty_issue_uses_username ... ok [INFO] [stdout] test progress::tests::log_usage_to_file_delegates_to_monitor ... ok [INFO] [stdout] test progress::tests::write_progress_short_response_not_truncated ... ok [INFO] [stdout] test progress::tests::write_progress_overwrites_existing_file ... ok [INFO] [stdout] test progress::tests::write_progress_creates_file_with_metadata ... ok [INFO] [stdout] test personalities::tests::resolve_from_str_file ... ok [INFO] [stdout] test progress::tests::delete_progress_nonexistent_is_ok ... ok [INFO] [stdout] test progress::tests::progress_file_path_without_issue_uses_username ... ok [INFO] [stdout] test progress::tests::read_progress_empty_file_returns_some_empty ... ok [INFO] [stdout] test progress::tests::read_progress_existing_file ... ok [INFO] [stdout] test prompt::tests::build_prompt_default_system_context ... ok [INFO] [stdout] test prompt::tests::build_prompt_no_issue_gives_generic_instruction ... ok [INFO] [stdout] test prompt::tests::build_prompt_with_messages ... ok [INFO] [stdout] test room::tests::extract_token_from_valid_json ... ok [INFO] [stdout] test room::tests::extract_token_fails_on_garbage ... ok [INFO] [stdout] test progress::tests::write_read_roundtrip ... ok [INFO] [stdout] test progress::tests::write_progress_without_issue ... ok [INFO] [stdout] test prompt::tests::build_prompt_with_progress_file ... ok [INFO] [stdout] test prompt::tests::build_prompt_personality_with_custom_prompt ... ok [INFO] [stdout] test progress::tests::write_progress_truncates_long_response ... ok [INFO] [stdout] test room::tests::detect_token_expiry_patterns ... ok [INFO] [stdout] test room::tests::extract_token_from_multiline ... ok [INFO] [stdout] test prompt::tests::build_prompt_no_personality_produces_default ... ok [INFO] [stdout] test room::tests::is_username_taken_rejects_unrelated_errors ... ok [INFO] [stdout] test prompt::tests::build_prompt_with_personality_text ... ok [INFO] [stdout] test room::tests::is_username_taken_detects_already_in_use ... ok [INFO] [stdout] test room::tests::legacy_token_file_path_format ... ok [INFO] [stdout] test room::tests::is_username_taken_detects_already_taken ... ok [INFO] [stdout] test room::tests::log_file_path_format ... ok [INFO] [stdout] test room::tests::room_token_env_constant_value ... ok [INFO] [stdout] test room::tests::join_room_ignores_empty_room_token_env ... ok [INFO] [stdout] test room::tests::join_room_uses_room_token_env_when_set ... ok [INFO] [stdout] test room::tests::set_status_message_empty_clears_status ... ok [INFO] [stdout] test room::tests::set_status_message_with_status_text ... ok [INFO] [stdout] test room::tests::token_file_path_format ... ok [INFO] [stdout] test room::tests::watch_room_nonexistent_socket_returns_error ... ok [INFO] [stdout] test tests::allow_all_coexists_with_profile ... ok [INFO] [stdout] test tests::heartbeat_interval_flag_overrides_env ... ok [INFO] [stdout] test tests::allow_all_flag_defaults_to_false ... ok [INFO] [stdout] test tests::allow_all_from_env_var ... ok [INFO] [stdout] test tests::cli_args_take_precedence_over_env ... ok [INFO] [stdout] test tests::env_vars_used_when_args_omitted ... ok [INFO] [stdout] test tests::heartbeat_interval_defaults_to_five ... ok [INFO] [stdout] test tests::heartbeat_interval_from_flag ... ok [INFO] [stdout] test tests::socket_flag_overrides_env ... ok [INFO] [stdout] test tests::heartbeat_interval_from_env ... ok [INFO] [stdout] test tests::profile_defaults_to_none ... ok [INFO] [stdout] test tests::profile_flag_overrides_env ... ok [INFO] [stdout] test tests::allow_all_flag_sets_true ... ok [INFO] [stdout] test tests::profile_flag_parses_valid ... ok [INFO] [stdout] test tests::profile_flag_rejects_invalid ... ok [INFO] [stdout] test tests::profile_from_env_var ... ok [INFO] [stdout] test tests::socket_defaults_to_none ... ok [INFO] [stdout] test tests::socket_flag_sets_path ... ok [INFO] [stdout] test tests::socket_from_env_var ... ok [INFO] [stdout] test tests::partial_env_with_partial_args ... ok [INFO] [stdout] test tests::model_default_used_without_env_or_flag ... ok [INFO] [stdout] test tests::issue_env_is_optional ... ok [INFO] [stdout] test tests::heartbeat_interval_zero_disables ... ok [INFO] [stdout] test tests::missing_required_without_env_fails ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 187 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/room_ralph-89b1d077e66df922) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running tests/integration.rs (/opt/rustwide/target/debug/deps/integration-3984c809ee08cddc) [INFO] [stdout] [INFO] [stdout] running 17 tests [INFO] [stdout] test live_broker_join_and_announce ... ignored, requires a running broker: `room ralph-live-test host &` [INFO] [stdout] test log_file_created_after_run ... ignored, requires claude binary or running broker [INFO] [stdout] test max_iter_one_stops_after_single_iteration ... ignored, requires claude binary or running broker [INFO] [stdout] test max_iter_zero_runs_until_signal ... ignored, requires claude binary or running broker [INFO] [stdout] test multi_iteration_max_iter_three ... ignored, requires claude binary or running broker [INFO] [stdout] test poll_messages_parses_ndjson ... ignored, requires claude binary or running broker [INFO] [stdout] test progress_file_records_issue_number ... ignored, requires claude binary or running broker [INFO] [stdout] test send_message_succeeds_with_mock ... ignored, requires claude binary or running broker [INFO] [stdout] test list_personalities_returns_all_builtins ... ok [INFO] [stdout] test token_obtained_from_room_join ... ignored, requires claude binary or running broker [INFO] [stdout] test token_expiry_detected_across_formats ... ok [INFO] [stdout] test dry_run_prints_prompt_and_exits ... ok [INFO] [stdout] test personality_builtin_in_dry_run ... ok [INFO] [stdout] test personality_file_appears_in_dry_run_output ... ok [INFO] [stdout] test allow_all_dry_run_succeeds ... ok [INFO] [stdout] test claude_failure_continues_loop ... ok [INFO] [stdout] test context_exhaustion_writes_progress ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 8 passed; 0 failed; 9 ignored; 0 measured; 0 filtered out; finished in 0.10s [INFO] [stdout] [INFO] [stderr] Doc-tests room_ralph [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "c5f1dd8150ee141a2c99adc33ed71bbd48b2a4424299325e204c8229bb99ab28", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c5f1dd8150ee141a2c99adc33ed71bbd48b2a4424299325e204c8229bb99ab28", kill_on_drop: false }` [INFO] [stdout] c5f1dd8150ee141a2c99adc33ed71bbd48b2a4424299325e204c8229bb99ab28