[INFO] cloning repository https://github.com/SHUKE-LABS/leg [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/SHUKE-LABS/leg" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHUKE-LABS%2Fleg", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHUKE-LABS%2Fleg'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] b5444f9f409a6edbab7cd02ed776a7df36e6e412 [INFO] testing SHUKE-LABS/leg against 1.100.0-beta.1 for beta-1.100-2 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHUKE-LABS%2Fleg" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/SHUKE-LABS/leg [INFO] finished tweaking git repo https://github.com/SHUKE-LABS/leg [INFO] tweaked toml for git repo https://github.com/SHUKE-LABS/leg written to /workspace/builds/worker-4-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/SHUKE-LABS/leg on toolchain 1.100.0-beta.1 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/SHUKE-LABS/leg 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-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }` [INFO] [stdout] e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192 [INFO] running `Command { std: "docker" "start" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192", 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" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192" "/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" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192", 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" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling shlex v2.0.1 [INFO] [stderr] Compiling find-msvc-tools v0.1.12 [INFO] [stderr] Compiling proc-macro2 v1.0.107 [INFO] [stderr] Compiling quote v1.0.47 [INFO] [stderr] Compiling zeroize v1.9.0 [INFO] [stderr] Compiling serde_core v1.0.229 [INFO] [stderr] Compiling httparse v1.10.1 [INFO] [stderr] Compiling crc32fast v1.5.1 [INFO] [stderr] Compiling log v0.4.34 [INFO] [stderr] Compiling rustls v0.23.43 [INFO] [stderr] Compiling http v1.5.0 [INFO] [stderr] Compiling base64 v0.23.1 [INFO] [stderr] Compiling serde_json v1.0.151 [INFO] [stderr] Compiling miniz_oxide v0.9.1 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling once_cell v1.21.4 [INFO] [stderr] Compiling rustls-pki-types v1.15.1 [INFO] [stderr] Compiling utf8-zero v0.8.1 [INFO] [stderr] Compiling cc v1.4.5 [INFO] [stderr] Compiling memchr v2.8.3 [INFO] [stderr] Compiling webpki-roots v1.0.9 [INFO] [stderr] Compiling ureq-proto v0.6.1 [INFO] [stderr] Compiling flate2 v1.1.10 [INFO] [stderr] Compiling syn v3.0.5 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling serde_derive v1.0.229 [INFO] [stderr] Compiling serde v1.0.229 [INFO] [stderr] Compiling rustls-webpki v0.103.15 [INFO] [stderr] Compiling ureq v3.4.0 [INFO] [stderr] Compiling leg v0.23.2 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 34.66s [INFO] running `Command { std: "docker" "inspect" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192", 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" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling leg v0.23.2 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 11.20s [INFO] running `Command { std: "docker" "inspect" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192", 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" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.12s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/build/leg/e7c757b1f43ab513/out/leg-e7c757b1f43ab513) [INFO] [stdout] [INFO] [stdout] running 281 tests [INFO] [stdout] test cli::tests::ask_parses_repeatable_images_before_and_after_the_prompt ... ok [INFO] [stdout] test cli::tests::ask_with_blank_prompt_is_usage_error ... ok [INFO] [stdout] test cli::tests::execute_ask_propagates_config_error_without_calling_the_provider ... ok [INFO] [stdout] test cli::stream::tests::buffered_transport_emits_start_and_authoritative_terminal_envelope ... ok [INFO] [stdout] test cli::tests::execute_log_show_on_empty_log_writes_nothing ... ok [INFO] [stdout] test cli::tests::execute_exchange_core_envelope_mode_error_still_writes_full_error_envelope ... ok [INFO] [stdout] test cli::stream::tests::writer_refuses_records_after_turn_end ... ok [INFO] [stdout] test cli::stream::tests::failed_required_session_recording_is_an_error_terminal_outcome ... ok [INFO] [stdout] test cli::tests::help_flags_parse ... ok [INFO] [stdout] test cli::tests::execute_log_show_summarizes_tool_round_thinking_without_payloads ... ok [INFO] [stdout] test cli::stream::tests::readme_contract_and_help_examples_are_parsable_ndjson ... ok [INFO] [stdout] test cli::tests::execute_exchange_core_plain_text_success_writes_only_the_reply_body ... ok [INFO] [stdout] test cli::stream::tests::provider_failure_emits_one_error_terminal_record ... ok [INFO] [stdout] test cli::tests::execute_exchange_core_plain_text_failure_writes_nothing_and_returns_error ... ok [INFO] [stdout] test cli::tests::execute_log_show_writes_a_block_per_exchange ... ok [INFO] [stdout] test cli::tests::log_unknown_subcommand_is_usage_error ... ok [INFO] [stdout] test cli::tests::log_without_subcommand_is_usage_error ... ok [INFO] [stdout] test cli::tests::model_flag_without_value_is_usage_error ... ok [INFO] [stdout] test cli::tests::model_override_reaches_the_outgoing_claude_request ... ok [INFO] [stdout] test cli::tests::no_arguments_is_a_no_op ... ok [INFO] [stdout] test cli::tests::help_text_documents_usage_env_and_failure_contract ... ok [INFO] [stdout] test cli::tests::log_replay_rejects_zero_index ... ok [INFO] [stdout] test cli::tests::log_show_parses_optional_file ... ok [INFO] [stdout] test cli::tests::log_replay_parses_optional_file_and_index ... ok [INFO] [stdout] test cli::tests::execute_exchange_core_envelope_mode_success_writes_full_response_envelope ... ok [INFO] [stdout] test cli::tests::ask_parses_model_override_before_or_after_prompt ... ok [INFO] [stdout] test cli::tests::log_show_rejects_index_flag ... ok [INFO] [stdout] test cli::tests::ask_with_extra_positional_argument_is_usage_error ... ok [INFO] [stdout] test cli::tests::ask_without_prompt_is_usage_error ... ok [INFO] [stdout] test cli::tests::image_flag_without_path_is_usage_error ... ok [INFO] [stdout] test cli::tests::log_replay_preserves_image_blocks_in_the_provider_request_and_trail ... ok [INFO] [stdout] test cli::tests::log_replay_reruns_a_tool_bearing_prompt_through_the_loop ... ok [INFO] [stdout] test cli::tests::open_append_sink_on_an_unopenable_path_falls_back_to_noop_without_erroring ... ok [INFO] [stdout] test cli::tests::ask_parses_positional_prompt ... ok [INFO] [stdout] test cli::tests::parse_exchange_request_trims_trailing_newline_only_preserves_trailing_spaces ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_bare_defaults_both_paths_to_none ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_accepts_in_and_out ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_accepts_a_preallocated_native_session_id ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_missing_in_value_is_usage_error ... ok [INFO] [stdout] test cli::tests::parse_exchange_request_valid_envelope_passes_through_unchanged ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_accepts_session_flags_in_either_order ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_rejects_conflicting_or_incomplete_session_flags ... ok [INFO] [stdout] test cli::tests::rehydrate_denied_tool_result_as_an_error ... ok [INFO] [stdout] test cli::tests::replay_target_reports_a_bad_index_before_loading_config ... ok [INFO] [stdout] test cli::tests::run_ask_propagates_delivery_failure_without_writing_stdout ... ok [INFO] [stdout] test cli::tests::run_ask_emits_request_and_response_ok_events_to_the_sink ... ok [INFO] [stdout] test cli::tests::run_ask_prints_only_reply_text_on_success ... ok [INFO] [stdout] test cli::tests::run_ask_iterates_tool_use_and_prints_only_the_final_text ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_accepts_stream_json_with_session_id_out ... ok [INFO] [stdout] test cli::tests::parse_exchange_request_plain_text_synthesizes_a_request ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_rejects_invalid_or_conflicting_preallocated_ids ... ok [INFO] [stdout] test cli::tests::preallocated_session_trail_refuses_an_existing_file_without_overwriting_it ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_unexpected_argument_is_usage_error ... ok [INFO] [stdout] test cli::tests::execute_exchange_core_runs_the_loop_inside_one_envelope ... ok [INFO] [stdout] test cli::tests::parse_args_exchange_rejects_stream_json_with_out ... ok [INFO] [stdout] test cli::tests::session_repl_emits_session_start_turn_and_end_events ... ok [INFO] [stdout] test cli::tests::session_repl_accumulates_history_and_prints_replies ... ok [INFO] [stdout] test cli::tests::select_and_rehydrate_requires_session_id_when_ambiguous ... ok [INFO] [stdout] test cli::tests::select_and_rehydrate_restores_conversation_and_next_turn_index ... ok [INFO] [stdout] test cli::tests::run_ask_with_image_content_sends_and_records_the_full_user_turn ... ok [INFO] [stdout] test cli::tests::select_and_rehydrate_errors_on_empty_trail ... ok [INFO] [stdout] test cli::tests::session_bare_parses_with_no_resume ... ok [INFO] [stdout] test cli::tests::run_ask_records_tool_events_between_request_and_outcome ... ok [INFO] [stdout] test cli::tests::run_ask_wire_lines_match_batons_field_order_and_omitted_fields ... ok [INFO] [stdout] test cli::tests::select_and_rehydrate_restores_tool_blocks_from_a_real_trail ... ok [INFO] [stdout] test cli::tests::select_exchange_defaults_to_last_and_validates_range ... ok [INFO] [stdout] test cli::tests::session_repl_ignores_blank_lines_and_exits_on_exit_command ... ok [INFO] [stdout] test cli::tests::session_repl_records_framed_tool_events_within_the_turn ... ok [INFO] [stdout] test cli::tests::session_repl_sends_full_prior_history_on_a_later_turn ... ok [INFO] [stdout] test cli::tests::session_repl_warns_and_drops_dangling_tool_use_when_capped ... ok [INFO] [stdout] test cli::tests::session_resume_of_a_trail_without_tool_rounds_keeps_text_turns ... ok [INFO] [stdout] test cli::tests::session_repl_warns_only_on_max_tokens ... ok [INFO] [stdout] test cli::tests::session_resume_rehydrates_tool_rounds_exactly_as_the_live_history ... ok [INFO] [stdout] test cli::tests::unrecognised_argument_is_usage_error ... ok [INFO] [stdout] test cli::tests::session_resume_round_trips_history_and_turn_index_through_a_real_trail ... ok [INFO] [stdout] test cli::tests::session_resume_strips_the_capped_replys_unanswered_tool_use ... ok [INFO] [stdout] test cli::tests::version_flags_parse ... ok [INFO] [stdout] test cli::tests::session_repl_rolls_back_failed_turn_and_continues ... ok [INFO] [stdout] test cli::tests::session_repl_runs_the_tool_loop_and_keeps_its_rounds_in_history ... ok [INFO] [stdout] test cli::tests::session_reply_message_uses_placeholder_for_a_capped_tool_only_reply ... ok [INFO] [stdout] test cli::tests::session_resume_echoes_thinking_signature_on_the_next_tool_continuation ... ok [INFO] [stdout] test cli::tests::session_resume_parses_file_and_optional_session_id ... ok [INFO] [stdout] test cli::tests::session_without_resume_rejects_bare_session_flag ... ok [INFO] [stdout] test cli::tests::session_resume_selects_the_named_session_among_tool_sessions ... ok [INFO] [stdout] test config::tests::applies_defaults_when_only_api_key_present ... ok [INFO] [stdout] test config::tests::api_key_takes_precedence_over_subscription_oauth_token ... ok [INFO] [stdout] test config::tests::openai_protocols_share_credentials_base_url_and_model_settings ... ok [INFO] [stdout] test config::tests::openai_protocols_use_their_shared_defaults ... ok [INFO] [stdout] test config::tests::rejects_unknown_provider_and_missing_or_blank_openai_credentials ... ok [INFO] [stdout] test config::tests::zero_timeout_is_rejected ... ok [INFO] [stdout] test config::tests::retry_count_zero_is_valid_and_invalid_values_are_rejected ... ok [INFO] [stdout] test events::tests::noop_sink_discards_events ... ok [INFO] [stdout] test config::tests::zero_max_tokens_is_rejected ... ok [INFO] [stdout] test config::tests::zero_or_non_integer_bash_timeout_is_rejected ... ok [INFO] [stdout] test events::tests::response_ok_event_omits_absent_optional_fields ... ok [INFO] [stdout] test config::tests::zero_or_non_integer_max_tool_rounds_are_rejected ... ok [INFO] [stdout] test config::tests::rejects_subscription_oauth_tokens ... ok [INFO] [stdout] test config::tests::overrides_are_honored ... ok [INFO] [stdout] test events::tests::session_request_event_carries_session_framing ... ok [INFO] [stdout] test events::tests::request_event_serializes_with_schema_and_replay_fields ... ok [INFO] [stdout] test events::tests::response_error_event_serializes_kind_and_message ... ok [INFO] [stdout] test config::tests::blank_credential_is_config_error_without_fallthrough ... ok [INFO] [stdout] test config::tests::oauth_token_precedence_over_missing_api_key ... ok [INFO] [stdout] test events::tests::session_start_and_end_serialize_with_session_id ... ok [INFO] [stdout] test log::tests::ask_exchange_is_byte_compatible_with_batons_trail_fixture ... ok [INFO] [stdout] test config::tests::missing_credential_is_config_error ... ok [INFO] [stdout] test image_input::tests::detects_supported_image_formats_from_file_signatures ... ok [INFO] [stdout] test image_input::tests::loads_image_as_messages_api_base64_block ... ok [INFO] [stdout] test config::tests::blank_optional_vars_fall_back_to_defaults ... ok [INFO] [stdout] test events::tests::tool_call_event_serializes_its_field_names ... ok [INFO] [stdout] test events::tests::writer_sink_writes_one_json_line_per_event ... ok [INFO] [stdout] test log::tests::dangling_outcome_with_no_pending_request_is_warned ... ok [INFO] [stdout] test log::tests::format_exchange_renders_ok_and_error_blocks ... ok [INFO] [stdout] test image_input::tests::rejects_images_above_the_base64_size_limit_before_reading_them ... ok [INFO] [stdout] test events::tests::tool_result_event_serializes_completed_failed_and_denied_payloads ... ok [INFO] [stdout] test events::tests::tool_round_event_serializes_its_field_names ... ok [INFO] [stdout] test image_input::tests::rejects_unsupported_image_data_with_a_clear_error ... ok [INFO] [stdout] test log::tests::format_exchange_summarizes_image_and_thinking_blocks ... ok [INFO] [stdout] test log::tests::legacy_tool_lines_without_a_tool_name_still_parse ... ok [INFO] [stdout] test log::tests::malformed_json_line_is_a_parse_error ... ok [INFO] [stdout] test log::tests::format_exchange_renders_tool_pairs_between_prompt_and_reply ... ok [INFO] [stdout] test log::tests::format_ts_renders_utc_civil_date ... ok [INFO] [stdout] test log::tests::parses_error_outcome ... ok [INFO] [stdout] test log::tests::parse_sessions_attaches_tool_lines_to_their_turn ... ok [INFO] [stdout] test log::tests::parse_sessions_leaves_torn_turn_outcome_none ... ok [INFO] [stdout] test log::tests::session_exchange_is_byte_compatible_with_batons_trail_fixture ... ok [INFO] [stdout] test log::tests::parses_valid_two_line_exchange ... ok [INFO] [stdout] test log::tests::tool_events_pair_by_id_within_their_exchange ... ok [INFO] [stdout] test log::tests::tool_lines_that_cannot_be_placed_are_warned ... ok [INFO] [stdout] test log::tests::torn_tool_result_tail_is_tolerated ... ok [INFO] [stdout] test log::tests::trailing_partial_line_is_tolerated ... ok [INFO] [stdout] test message::tests::round_trips_minimal_envelope ... ok [INFO] [stdout] test log::tests::trailing_request_with_no_outcome_is_not_yielded ... ok [INFO] [stdout] test model::tests::conversation_pop_removes_most_recent_turn ... ok [INFO] [stdout] test message::tests::round_trips_in_reply_to_none_and_some ... ok [INFO] [stdout] test log::tests::unknown_event_tags_are_skipped ... ok [INFO] [stdout] test model::tests::conversation_starts_empty ... ok [INFO] [stdout] test log::tests::parse_sessions_partitions_by_session_id_and_pairs_turns ... ok [INFO] [stdout] test log::tests::parse_sessions_skips_sessionless_ask_lines ... ok [INFO] [stdout] test message::tests::unknown_fields_are_ignored_on_read ... ok [INFO] [stdout] test model::tests::content_blocks_serialize_with_wire_type_tags_and_round_trip ... ok [INFO] [stdout] test model::tests::conversation_accumulates_turns_in_order ... ok [INFO] [stdout] test message::tests::round_trips_without_wrapped_exchange ... ok [INFO] [stdout] test message::tests::round_trips_wrapped_exchange_with_content_blocks ... ok [INFO] [stdout] test message::tests::round_trips_wrapped_exchange_with_schema_discriminator ... ok [INFO] [stdout] test message::tests::round_trips_every_kind_variant ... ok [INFO] [stdout] test participant::tests::fresh_message_id_is_unique_across_calls ... ok [INFO] [stdout] test model::tests::reply_new_stores_text ... ok [INFO] [stdout] test participant::tests::success_reply_swaps_addressing_and_nests_ok_outcome ... ok [INFO] [stdout] test model::tests::prompt_new_accepts_str_and_string ... ok [INFO] [stdout] test model::tests::text_helpers_ignore_tool_blocks ... ok [INFO] [stdout] test model::tests::stop_reason_round_trips_known_and_unknown_wire_values ... ok [INFO] [stdout] test model::tests::message_constructors_tag_the_role ... ok [INFO] [stdout] test model::tests::role_wire_values ... ok [INFO] [stdout] test tools::bash::tests::configured_timeout_is_reflected_in_the_tool_spec ... ok [INFO] [stdout] test participant::tests::provider_failure_is_delivered_as_error_envelope_not_a_panic_or_err ... ok [INFO] [stdout] test tools::bash::tests::rejects_invalid_arguments_and_reports_missing_bash ... ok [INFO] [stdout] test tools::bash::tests::spec_declares_command_description_and_timeout ... ok [INFO] [stdout] test tools::edit::tests::empty_or_identical_strings_are_rejected ... ok [INFO] [stdout] test tools::edit::tests::long_diff_is_capped_with_a_truncation_marker ... ok [INFO] [stdout] test tools::edit::tests::multiple_matches_without_replace_all_is_an_error ... ok [INFO] [stdout] test tools::edit::tests::loop_turn_edits_a_file ... ok [INFO] [stdout] test tools::edit::tests::non_boolean_replace_all_is_rejected ... ok [INFO] [stdout] test tools::edit::tests::no_match_is_an_error_and_leaves_the_file ... ok [INFO] [stdout] test tools::edit::tests::replace_all_replaces_every_occurrence ... ok [INFO] [stdout] test tools::edit::tests::replaces_a_unique_exact_match ... ok [INFO] [stdout] test tools::edit::tests::returns_a_unified_diff_with_one_line_of_context ... ok [INFO] [stdout] test tools::edit::tests::overlapping_matches_are_ambiguous ... ok [INFO] [stdout] test tools::edit::tests::spec_names_args ... ok [INFO] [stdout] test tools::edit::tests::only_the_exact_match_counts ... ok [INFO] [stdout] test tools::pretool::tests::empty_output_and_allow_decision_allow_dispatch ... ok [INFO] [stdout] test tools::pretool::tests::deny_decision_preserves_its_reason ... ok [INFO] [stdout] test tools::pretool::tests::malformed_or_incomplete_decisions_fail_closed ... ok [INFO] [stdout] test tools::bash::tests::reports_signal_termination_as_128_plus_signal ... ok [INFO] [stdout] test tools::process::tests::full_output_is_preserved_without_truncation ... ok [INFO] [stdout] test tools::process::tests::line_cap_keeps_first_and_last_thousand_lines ... ok [INFO] [stdout] test tools::read::tests::byte_cap_reached_first_drops_the_cut_line_whole ... ok [INFO] [stdout] test tools::read::tests::equivalent_paths_record_one_read_set_entry_and_failures_none ... ok [INFO] [stdout] test tools::read::tests::fits_within_limits_returns_whole_file_without_notice ... ok [INFO] [stdout] test tools::edit::tests::diff_at_the_cap_is_not_truncated ... ok [INFO] [stdout] test tools::read::tests::limit_alone_stops_early_with_more_lines_notice ... ok [INFO] [stdout] test tools::read::tests::huge_offset_and_limit_do_not_wrap ... ok [INFO] [stdout] test tools::read::tests::line_cap_reached_first ... ok [INFO] [stdout] test tools::read::tests::loop_turn_receives_file_content_as_tool_result ... ok [INFO] [stdout] test tools::read::tests::missing_file_is_an_error_naming_path_and_enoent ... ok [INFO] [stdout] test tools::process::tests::byte_cap_keeps_head_and_tail_and_exact_omitted_count ... ok [INFO] [stdout] test tools::bash::tests::runs_command_in_caller_directory_and_captures_streams_and_exit_code ... ok [INFO] [stdout] test tools::read::tests::offset_alone_reads_to_end_of_file ... ok [INFO] [stdout] test tools::read::tests::offset_boundary_counts_the_trailing_newline_element ... ok [INFO] [stdout] test tools::read::tests::over_limit_notice_has_no_shell_command_or_path ... ok [INFO] [stdout] test tools::read::tests::offset_and_limit_select_a_window ... ok [INFO] [stdout] test tools::read::tests::limit_never_lifts_the_cap ... ok [INFO] [stdout] test tools::pretool::tests::unix::hook_process_deny_and_allow_decisions_are_enforced ... ok [INFO] [stdout] test cli::tests::run_ask_records_the_request_event_before_invoking_the_transport ... ok [INFO] [stdout] test tools::pretool::tests::unix::sends_the_pretool_event_and_tool_context_on_stdin ... ok [INFO] [stdout] test tools::pretool::tests::unix::hook_spawn_nonzero_and_timeout_fail_closed ... ok [INFO] [stdout] test tools::tests::dispatch_reports_unknown_tool_and_handler_error_as_is_error ... ok [INFO] [stdout] test tools::tests::loop_executes_registered_handler_and_feeds_back_tool_result ... ok [INFO] [stdout] test tools::read::tests::unreadable_file_is_an_error ... ok [INFO] [stdout] test tools::read::tests::trailing_newline_is_not_charged_to_the_byte_cap ... ok [INFO] [stdout] test tools::read::tests::single_line_over_byte_cap_returns_no_file_bytes ... ok [INFO] [stdout] test tools::tests::fallible_stream_observer_stops_dispatch_after_a_result_write_failure ... ok [INFO] [stdout] test tools::bash::tests::removes_leg_credentials_but_preserves_other_environment_variables ... ok [INFO] [stdout] test tools::tests::loop_runs_more_than_fifty_rounds_when_uncapped ... ok [INFO] [stdout] test tools::tests::loop_stops_after_configured_round_limit_without_another_request ... ok [INFO] [stdout] test tools::tests::loop_without_tool_use_makes_a_single_call ... ok [INFO] [stdout] test tools::write::tests::loop_turn_writes_a_file ... ok [INFO] [stdout] test tools::tests::run_observed_reports_each_call_then_its_result_in_order ... ok [INFO] [stdout] test tools::write::tests::creates_a_missing_file ... ok [INFO] [stdout] test tools::write::tests::failed_read_does_not_permit_overwrite ... ok [INFO] [stdout] test tools::write::tests::creates_nested_missing_parent_directories ... ok [INFO] [stdout] test transport::claude::tests::api_error_type_on_server_status_stays_server_and_is_displayed ... ok [INFO] [stdout] test tools::write::tests::spec_names_args_and_read_first_rule ... ok [INFO] [stdout] test tools::write::tests::rejects_overwrite_of_an_unread_file ... ok [INFO] [stdout] test transport::claude::tests::decodes_max_tokens_stop_reason_without_rejecting_reply ... ok [INFO] [stdout] test tools::tests::registry_without_pre_tool_hook_preserves_dispatch ... ok [INFO] [stdout] test tools::write::tests::overwrites_a_file_read_earlier ... ok [INFO] [stdout] test transport::claude::tests::decodes_image_and_thinking_blocks_in_order ... ok [INFO] [stdout] test tools::write::tests::read_set_is_keyed_by_resolved_absolute_path ... ok [INFO] [stdout] test transport::claude::tests::extracts_assistant_text_from_valid_response ... ok [INFO] [stdout] test transport::claude::tests::later_round_bad_request_is_delivered_without_retry ... ok [INFO] [stdout] test transport::claude::tests::non_retryable_http_status_does_not_retry ... ok [INFO] [stdout] test transport::claude::tests::other_status_maps_to_api_variant ... ok [INFO] [stdout] test transport::claude::tests::decodes_token_usage_from_response ... ok [INFO] [stdout] test transport::claude::tests::error_body_without_json_falls_back_to_raw_text ... ok [INFO] [stdout] test transport::claude::tests::malformed_success_body_is_decode_error ... ok [INFO] [stdout] test transport::claude::tests::keeps_text_and_tool_use_blocks_in_order ... ok [INFO] [stdout] test transport::claude::tests::malformed_tool_use_block_is_decode_error ... ok [INFO] [stdout] test tools::read::tests::spec_names_args_caps_and_continuation ... ok [INFO] [stdout] test transport::claude::tests::request_carries_configured_max_tokens ... ok [INFO] [stdout] test transport::claude::tests::request_omits_system_field_when_system_prompt_is_none ... ok [INFO] [stdout] test transport::claude::tests::partial_usage_block_records_present_field_only ... ok [INFO] [stdout] test transport::claude::tests::request_omits_tools_key_when_list_is_empty ... ok [INFO] [stdout] test transport::claude::tests::request_includes_system_field_when_system_prompt_is_some ... ok [INFO] [stdout] test transport::claude::tests::request_includes_tools_when_configured ... ok [INFO] [stdout] test transport::claude::tests::rate_limit_error_type_overrides_server_status ... ok [INFO] [stdout] test transport::claude::tests::request_oauth_credential_emits_bearer_header_and_no_api_key ... ok [INFO] [stdout] test transport::claude::tests::send_conversation_serializes_full_history_in_order ... ok [INFO] [stdout] test transport::claude::tests::serializes_image_and_thinking_blocks_with_messages_api_shapes ... ok [INFO] [stdout] test transport::claude::tests::response_body_read_failure_is_not_retried ... ok [INFO] [stdout] test transport::claude::tests::request_uses_configured_endpoint_model_key_and_version ... ok [INFO] [stdout] test transport::claude::tests::retryable_statuses_retry_and_keep_the_total_attempt_count ... ok [INFO] [stdout] test transport::claude::tests::skips_unknown_block_types ... ok [INFO] [stdout] test transport::claude::tests::success_with_no_text_or_tool_use_is_decode_error ... ok [INFO] [stdout] test transport::claude::tests::success_without_stop_reason_remains_backward_compatible ... ok [INFO] [stdout] test transport::claude::tests::streaming_provider_error_is_emitted_and_returned ... ok [INFO] [stdout] test transport::claude::tests::success_without_usage_block_records_absent_tokens ... ok [INFO] [stdout] test transport::claude::tests::server_error_maps_to_server_variant_with_status ... ok [INFO] [stdout] test transport::claude::tests::text_only_request_body_is_byte_identical ... ok [INFO] [stdout] test transport::claude::tests::tool_only_reply_parses_with_tool_use_stop_reason ... ok [INFO] [stdout] test transport::claude::tests::streaming_assembles_a_reply_identical_to_the_buffered_path ... ok [INFO] [stdout] test transport::claude::tests::timeout_transport_error ... ok [INFO] [stdout] test transport::claude::tests::too_many_requests_maps_to_rate_limited ... ok [INFO] [stdout] test transport::claude::tests::tool_result_follow_up_serializes_block_arrays ... ok [INFO] [stdout] test transport::claude::tests::unauthorized_maps_to_auth_error ... ok [INFO] [stdout] test transport::openai::chat_completions::tests::maps_user_images_to_chat_completions_image_url_parts ... ok [INFO] [stdout] test transport::http::tests::classifies_only_connection_level_ureq_errors_as_retryable ... ok [INFO] [stdout] test transport::openai::chat_completions::tests::incrementally_assembles_function_arguments_and_serializes_history ... ok [INFO] [stdout] test transport::openai::chat_completions::tests::rejects_provider_specific_thinking_blocks_in_history ... ok [INFO] [stdout] test transport::openai::chat_completions::tests::streams_text_usage_and_openai_auth ... ok [INFO] [stdout] test transport::openai::common::tests::maps_openai_authentication_and_rate_limit_errors ... ok [INFO] [stdout] test transport::retry::tests::backoff_ceiling_doubles_then_caps ... ok [INFO] [stdout] test transport::retry::tests::full_jitter_stays_inside_its_delay_ceiling ... ok [INFO] [stdout] test transport::retry::tests::other_client_errors_and_response_read_failures_do_not_retry ... ok [INFO] [stdout] test transport::retry::tests::retries_only_the_eligible_statuses ... ok [INFO] [stdout] test transport::retry::tests::retry_after_supports_seconds_and_http_dates_and_is_capped ... ok [INFO] [stdout] test transport::retry::tests::retry_budget_caps_status_retries_and_keeps_attempts ... ok [INFO] [stdout] test transport::openai::responses::tests::assembles_function_call_events_and_maps_responses_history ... ok [INFO] [stdout] test transport::openai::responses::tests::rejects_provider_specific_thinking_blocks_in_history ... ok [INFO] [stdout] test transport::openai::responses::tests::streams_output_text_and_maps_user_images ... ok [INFO] [stdout] test transport::retry::tests::zero_retry_budget_disables_retries ... ok [INFO] [stdout] test transport::retry::tests::retries_connection_failures_and_counts_attempts ... ok [INFO] [stdout] test transport::retry::tests::retry_after_overrides_backoff_and_obeys_the_cap ... ok [INFO] [stdout] test transport::retry::tests::streaming_retry_does_not_emit_the_retry_response_body ... ok [INFO] [stdout] test image_input::tests::validates_both_per_image_and_combined_request_limits ... ok [INFO] [stdout] test tools::bash::tests::caps_each_stream_by_line_and_byte_limits_and_reports_omitted_bytes ... ok [INFO] [stdout] test cli::tests::configured_bash_timeout_flows_through_registry_to_spec_and_handler ... ok [INFO] [stdout] test tools::bash::tests::configured_default_timeout_is_used_when_timeout_is_omitted ... ok [INFO] [stdout] test tools::bash::tests::explicit_timeout_keeps_partial_output_and_returns_124 ... ok [INFO] [stdout] test tools::bash::tests::stops_waiting_after_the_pipe_drain_guard ... ok [INFO] [stdout] test tools::bash::tests::timeout_terminates_background_descendants ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 281 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.11s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/build/leg/b59c8a7649dd62a8/out/leg-b59c8a7649dd62a8) [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/exchange_agent_cmd.rs (/opt/rustwide/target/debug/build/leg/62ca69ea6f773ebb/out/exchange_agent_cmd-62ca69ea6f773ebb) [INFO] [stdout] [INFO] [stdout] running 4 tests [INFO] [stdout] test plain_text_provider_failure_leaves_stdout_empty_and_exits_nonzero ... ok [INFO] [stdout] test envelope_mode_round_trips_through_in_and_out_files ... ok [INFO] [stdout] test envelope_mode_provider_failure_preserves_error_envelope_and_exits_nonzero ... ok [INFO] [stdout] test plain_text_success_writes_only_the_raw_reply_body ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s [INFO] [stdout] [INFO] [stderr] Running tests/headless_e2e.rs (/opt/rustwide/target/debug/build/leg/6ea61537216bee86/out/headless_e2e-6ea61537216bee86) [INFO] [stdout] [INFO] [stdout] running 39 tests [INFO] [stdout] test exchange_stream_json_flushes_a_text_delta_before_provider_completion ... ok [INFO] [stdout] test exchange_event_log_open_failure_warns_without_changing_the_reply ... ok [INFO] [stdout] test exchange_stream_json_broken_stdout_stops_before_tool_dispatch ... ok [INFO] [stdout] test ask_provider_failure_leaves_stdout_empty_and_exits_nonzero ... ok [INFO] [stdout] test exchange_does_not_create_a_trail_when_event_log_is_unset_or_blank ... ok [INFO] [stdout] test exchange_stream_json_correlates_envelope_input_ids ... ok [INFO] [stdout] test exchange_event_log_write_failure_warns_without_changing_the_reply ... ok [INFO] [stdout] test exchange_unknown_session_fails_before_any_provider_request ... ok [INFO] [stdout] test exchange_stream_json_new_and_named_sessions_restore_successful_history ... ok [INFO] [stdout] test exchange_stream_json_warns_once_for_max_tokens_truncation ... ok [INFO] [stdout] test exchange_named_session_restores_tool_history_and_writes_its_id ... ok [INFO] [stdout] test exchange_failed_named_session_turn_is_stored_and_resumable ... ok [INFO] [stdout] test max_retries_zero_fails_after_one_transient_attempt ... ok [INFO] [stdout] test exchange_stream_json_exposes_failed_new_session_without_restoring_failed_turn ... ok [INFO] [stdout] test exchange_stream_json_marks_tool_round_limit_cap_without_dispatching_capped_tools ... ok [INFO] [stdout] test session_flushes_text_before_the_provider_finishes_streaming ... ok [INFO] [stdout] test session_stream_error_is_reported_and_recorded ... ok [INFO] [stdout] test exchange_new_session_resolves_store_directory_precedence ... ok [INFO] [stdout] test openai_chat_completions_drives_tool_loop_trail_and_resume ... ok [INFO] [stdout] test sigint_cancels_midstream_and_keeps_the_session_resumable ... ok [INFO] [stdout] test exchange_drives_read_edit_bash_and_emits_one_envelope ... ok [INFO] [stdout] test pretool_hook_deny_skips_bash_and_records_denied_result ... ok [INFO] [stdout] test ask_drives_read_edit_bash_and_records_the_tool_trail ... ok [INFO] [stdout] test sigterm_abandons_an_in_flight_provider_request ... ok [INFO] [stdout] test openai_responses_drives_tool_loop_trail_and_resume ... ok [INFO] [stdout] test exchange_stream_json_records_pretool_denial_consistently_with_trail ... ok [INFO] [stdout] test exchange_stream_json_preserves_text_tool_text_order_for_all_providers ... ok [INFO] [stdout] test second_signal_exits_immediately_and_kills_bash_process_group ... ok [INFO] [stdout] test sigint_stops_bash_and_records_interrupted_outcome ... ok [INFO] [stdout] test sigterm_cancels_midstream_and_keeps_the_session_resumable ... ok [INFO] [stdout] test pretool_hook_allow_runs_bash ... ok [INFO] [stdout] test plain_text_exchange_drives_read_edit_bash_and_records_the_trail ... ok [INFO] [stdout] test sigterm_exits_session_while_waiting_for_input ... ok [INFO] [stdout] test sigterm_stops_bash_and_records_interrupted_outcome ... ok [INFO] [stdout] test interrupted_session_trail_can_be_resumed ... ok [INFO] [stdout] test unset_pretool_hook_preserves_normal_tool_dispatch ... ok [INFO] [stdout] test stream_exchange_signals_keep_tool_cleanup_and_emit_interrupted_terminal ... ok [INFO] [stdout] test ask_retries_transient_provider_failure_and_records_attempts ... ok [INFO] [stdout] test exchange_stream_json_prestart_errors_emit_no_records_or_provider_requests ... ok [INFO] [stderr] Doc-tests leg [INFO] [stdout] [INFO] [stdout] test result: ok. 39 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.03s [INFO] [stdout] [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" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192", kill_on_drop: false }` [INFO] [stdout] e2f8694a77ff7a9537fab3bd9cbc546c472e99cb69ac0a7fc09a9e90f4900192