[INFO] cloning repository https://github.com/douglaz/multibackend-orchestration
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/douglaz/multibackend-orchestration" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdouglaz%2Fmultibackend-orchestration", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdouglaz%2Fmultibackend-orchestration'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 67ed2ccb9bdc2e1e4a453d0e48d2a2bee8911b7b
[INFO] testing douglaz/multibackend-orchestration against 1.94.0 for beta-1.95-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdouglaz%2Fmultibackend-orchestration" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/douglaz/multibackend-orchestration
[INFO] finished tweaking git repo https://github.com/douglaz/multibackend-orchestration
[INFO] tweaked toml for git repo https://github.com/douglaz/multibackend-orchestration written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/douglaz/multibackend-orchestration on toolchain 1.94.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.94.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/douglaz/multibackend-orchestration 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.94.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded serial_test v3.4.0
[INFO] [stderr]   Downloaded futures-task v0.3.32
[INFO] [stderr]   Downloaded serial_test_derive v3.4.0
[INFO] [stderr]   Downloaded futures-sink v0.3.32
[INFO] [stderr]   Downloaded futures-macro v0.3.32
[INFO] [stderr]   Downloaded futures-core v0.3.32
[INFO] [stderr]   Downloaded slab v0.4.12
[INFO] [stderr]   Downloaded futures-executor v0.3.32
[INFO] [stderr]   Downloaded fs2 v0.4.3
[INFO] [stderr]   Downloaded zmij v1.0.19
[INFO] [stderr]   Downloaded sdd v3.0.10
[INFO] [stderr]   Downloaded ryu v1.0.23
[INFO] [stderr]   Downloaded scc v2.4.0
[INFO] [stderr]   Downloaded unsafe-libyaml v0.2.11
[INFO] [stderr]   Downloaded serde_yaml v0.9.34+deprecated
[INFO] [stderr]   Downloaded futures-util v0.3.32
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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" "+1.94.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 67fa1cd3c628265e9220ba820c1c1aa3ccf7dc2b5fad29c86ab444187f7904d4
[INFO] running `Command { std: "docker" "start" "-a" "67fa1cd3c628265e9220ba820c1c1aa3ccf7dc2b5fad29c86ab444187f7904d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "67fa1cd3c628265e9220ba820c1c1aa3ccf7dc2b5fad29c86ab444187f7904d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "67fa1cd3c628265e9220ba820c1c1aa3ccf7dc2b5fad29c86ab444187f7904d4", kill_on_drop: false }`
[INFO] [stdout] 67fa1cd3c628265e9220ba820c1c1aa3ccf7dc2b5fad29c86ab444187f7904d4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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" "+1.94.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 8fb097b5064acd1917c252821d449892bb1cb9eb12863fe8d7c4556d217ea2b7
[INFO] running `Command { std: "docker" "start" "-a" "8fb097b5064acd1917c252821d449892bb1cb9eb12863fe8d7c4556d217ea2b7", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling libc v0.2.180
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling memchr v2.7.6
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]    Compiling regex-syntax v0.8.9
[INFO] [stderr]    Compiling indexmap v2.13.0
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling linux-raw-sys v0.11.0
[INFO] [stderr]    Compiling zmij v1.0.19
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling cfg_aliases v0.2.1
[INFO] [stderr]    Compiling nix v0.29.0
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling clap_lex v0.7.7
[INFO] [stderr]    Compiling itoa v1.0.17
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling clap_builder v4.5.57
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling iana-time-zone v0.1.65
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling env_home v0.1.0
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling socket2 v0.6.2
[INFO] [stderr]    Compiling fs2 v0.4.3
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling tempfile v3.24.0
[INFO] [stderr]    Compiling which v7.0.3
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling tokio v1.49.0
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling clap v4.5.57
[INFO] [stderr]    Compiling serde v1.0.228
[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 chrono v0.4.43
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling ralph v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 08s
[INFO] running `Command { std: "docker" "inspect" "8fb097b5064acd1917c252821d449892bb1cb9eb12863fe8d7c4556d217ea2b7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8fb097b5064acd1917c252821d449892bb1cb9eb12863fe8d7c4556d217ea2b7", kill_on_drop: false }`
[INFO] [stdout] 8fb097b5064acd1917c252821d449892bb1cb9eb12863fe8d7c4556d217ea2b7
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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" "+1.94.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] ad3c16d5eb6179e9ee051847d0dfcc11df46eea1a009fa364fbb34df1bcb8a44
[INFO] running `Command { std: "docker" "start" "-a" "ad3c16d5eb6179e9ee051847d0dfcc11df46eea1a009fa364fbb34df1bcb8a44", kill_on_drop: false }`
[INFO] [stderr]    Compiling sdd v3.0.10
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling serial_test_derive v3.4.0
[INFO] [stderr]    Compiling scc v2.4.0
[INFO] [stderr]    Compiling serial_test v3.4.0
[INFO] [stderr]    Compiling ralph v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 56.58s
[INFO] running `Command { std: "docker" "inspect" "ad3c16d5eb6179e9ee051847d0dfcc11df46eea1a009fa364fbb34df1bcb8a44", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ad3c16d5eb6179e9ee051847d0dfcc11df46eea1a009fa364fbb34df1bcb8a44", kill_on_drop: false }`
[INFO] [stdout] ad3c16d5eb6179e9ee051847d0dfcc11df46eea1a009fa364fbb34df1bcb8a44
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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" "+1.94.0" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 85193a93c1fe1ae4fd1f76b6ecb4ecf8e7334edc80df41695cb32756a35c63ee
[INFO] running `Command { std: "docker" "start" "-a" "85193a93c1fe1ae4fd1f76b6ecb4ecf8e7334edc80df41695cb32756a35c63ee", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.24s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/ralph-14a521f5e56d271c)
[INFO] [stdout] 
[INFO] [stdout] running 1037 tests
[INFO] [stdout] test backend::claude::tests::effective_args_claude_with_model_still_has_single_stream_json_pair ... ok
[INFO] [stdout] test backend::claude::tests::effective_args_claude_without_model_has_single_stream_json_pair ... ok
[INFO] [stdout] test backend::claude::tests::ensure_stream_json_args_strips_flag_and_equals_variants ... ok
[INFO] [stdout] test backend::codex::tests::parse_codex_model_effort_no_suffix ... ok
[INFO] [stdout] test backend::codex::tests::parse_codex_model_effort_strips_low ... ok
[INFO] [stdout] test backend::claude::tests::ensure_stream_json_args_is_idempotent ... ok
[INFO] [stdout] test backend::codex::tests::parse_codex_model_effort_strips_xhigh ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_claude_cli_verbose_no_result_uses_assistant_text ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_claude_cli_verbose_prefers_result_over_assistant ... ok
[INFO] [stdout] test backend::codex::tests::parse_codex_model_effort_unknown_suffix ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_claude_cli_verbose_result_overrides_concatenated_narration ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_claude_cli_verbose_falls_back_to_result_text ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_goose_cli_extracts_text_and_tokens ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_codex_cli_separates_multiple_agent_messages ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_codex_cli_extracts_text_and_metadata ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_codex_cli_filters_reasoning_items ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_claude_cli_verbose_extracts_text_and_metadata ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_extracts_json_after_non_json_preamble ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_markdown_with_json_block_still_returns_raw ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_multiline_json_without_preamble ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_goose_cli_token_streaming_preserves_fenced_json ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_message_event_requires_assistant_role_for_text ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_markdown_with_embedded_json_returns_raw ... ok
[INFO] [stdout] test backend::claude::tests::ensure_stream_json_adds_verbose_when_print_flag_present ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_opencode_cli_extracts_text_and_metadata ... ok
[INFO] [stdout] test backend::claude::tests::ensure_stream_json_no_duplicate_verbose ... ok
[INFO] [stdout] test backend::claude::tests::ensure_stream_json_no_verbose_without_print ... ok
[INFO] [stdout] test backend::codex::tests::parse_codex_model_effort_strips_medium ... ok
[INFO] [stdout] test backend::output_normalizer::tests::stream_json_errors_when_events_exist_without_text_deltas ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_429_error_before_response_json ... ok
[INFO] [stdout] test backend::output_normalizer::tests::stream_json_extracts_usage_from_summary_event ... ok
[INFO] [stdout] test backend::output_normalizer::tests::stream_json_skips_unknown_events_and_malformed_lines ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_claude_cli_verbose_multiple_results_keeps_longest ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_pipe_multiline_json_with_preamble ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_single_json_with_type_field_routes_to_single ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_goose_cli_multiple_text_messages ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_routes_stream_json_when_first_line_is_stream_event ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_goose_cli_filters_reasoning_and_notifications ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_stream_events_extracts_session_and_text ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_opencode_cli_multiple_text_events ... ok
[INFO] [stdout] test backend::tests::backend_registry_rejects_disabled_backend ... ok
[INFO] [stdout] test backend::tests::assign_feature_backends_uses_openrouter_when_codex_disabled ... ok
[INFO] [stdout] test backend::tests::backend_registry_timeout_for_role_falls_back_to_default_for_unknown_or_invalid_spec ... ok
[INFO] [stdout] test backend::tests::backend_registry_creates_openrouter_backend_for_modeled_spec ... ok
[INFO] [stdout] test backend::tests::backend_registry_timeout_for_role_uses_backend_role_override_for_bare_and_modeled_specs ... ok
[INFO] [stdout] test backend::codex::tests::parse_codex_model_effort_strips_high ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_returns_raw_text_when_no_json_events_exist ... ok
[INFO] [stdout] test backend::tests::effective_args_claude_with_existing_resume_replaces_cleanly ... ok
[INFO] [stdout] test backend::tests::effective_args_codex_produces_exact_token_sequence ... ok
[INFO] [stdout] test backend::tests::effective_args_claude_produces_exact_token_sequence ... ok
[INFO] [stdout] test backend::tests::effective_args_claude_requires_p_flag ... ok
[INFO] [stdout] test backend::tests::effective_args_codex_idempotent ... ok
[INFO] [stdout] test backend::tests::effective_args_claude_rewrites_for_resume ... ok
[INFO] [stdout] test backend::tests::effective_args_claude_idempotent ... ok
[INFO] [stdout] test backend::tests::effective_args_codex_requires_exec_in_base_form ... ok
[INFO] [stdout] test backend::tests::effective_args_codex_rewrites_for_resume ... ok
[INFO] [stdout] test backend::tests::effective_args_no_session_openrouter_rewrites_output_format_to_stream_json ... ok
[INFO] [stdout] test backend::output_normalizer::tests::stream_json_concatenates_deltas_in_order_and_extracts_metadata ... ok
[INFO] [stdout] test backend::tests::effective_args_no_session_adds_json_output ... ok
[INFO] [stdout] test backend::tests::effective_args_codex_with_existing_resume_replaces_cleanly ... ok
[INFO] [stdout] test backend::tests::effective_args_openrouter_rewrites_for_resume_and_preserves_other_flags ... ok
[INFO] [stdout] test backend::tests::effective_args_openrouter_resume_rewrite_is_idempotent ... ok
[INFO] [stdout] test backend::tests::is_backend_available_returns_true_for_enabled_backend ... ok
[INFO] [stdout] test backend::tests::is_backend_available_returns_false_for_unknown_backend ... ok
[INFO] [stdout] test backend::tests::is_backend_available_returns_false_for_empty_string ... ok
[INFO] [stdout] test backend::tests::is_backend_available_with_recalculation_workflow ... ok
[INFO] [stdout] test backend::tests::opposite_falls_back_to_openrouter_when_codex_disabled ... ok
[INFO] [stdout] test backend::tests::effective_args_codex_requires_trailing_dash ... ok
[INFO] [stdout] test backend::tests::effective_args_no_session_no_json_returns_unchanged ... ok
[INFO] [stdout] test backend::tests::cli_backend_strips_claudecode_from_subprocess_env ... ok
[INFO] [stdout] test backend::tests::cli_backend_execute_uses_configured_cwd ... ok
[INFO] [stdout] test backend::tests::parse_backend_spec_accepts_name_with_model ... ok
[INFO] [stdout] test backend::tests::opposite_returns_codex_for_claude_when_codex_enabled ... ok
[INFO] [stdout] test backend::tests::parse_backend_spec_rejects_empty_model ... ok
[INFO] [stdout] test backend::tests::parse_backend_spec_accepts_optional_name_with_model ... ok
[INFO] [stdout] test backend::tests::parse_backend_spec_accepts_bare_name ... ok
[INFO] [stdout] test backend::tests::parse_backend_spec_rejects_missing_name_after_optional_prefix ... ok
[INFO] [stdout] test backend::tests::parse_backend_spec_rejects_missing_opening_paren ... ok
[INFO] [stdout] test backend::tests::parse_backend_spec_accepts_optional_bare_name ... ok
[INFO] [stdout] test backend::tests::parse_backend_spec_rejects_empty_name ... ok
[INFO] [stdout] test backend::tests::parse_backend_spec_rejects_missing_closing_paren ... ok
[INFO] [stdout] test backend::tmux::tests::create_window_with_retry_succeeds_on_first_try ... ok
[INFO] [stdout] test backend::tmux::tests::create_window_with_retry_retries_on_missing_session ... ok
[INFO] [stdout] test backend::tmux::tests::ensure_session_creates_when_missing ... ok
[INFO] [stdout] test backend::tmux::tests::ensure_session_skips_creation_when_session_exists ... ok
[INFO] [stdout] test backend::tmux::tests::format_window_label_basic ... ok
[INFO] [stdout] test backend::tmux::tests::create_window_returns_identifier ... ok
[INFO] [stdout] test backend::tmux::tests::has_session_returns_false_when_session_missing ... ok
[INFO] [stdout] test backend::tmux::tests::has_session_returns_true_when_session_exists ... ok
[INFO] [stdout] test backend::tmux::tests::has_window_returns_false_when_session_missing ... ok
[INFO] [stdout] test backend::tmux::tests::has_window_returns_false_when_window_missing ... ok
[INFO] [stdout] test backend::tmux::tests::has_window_returns_true_when_window_exists ... ok
[INFO] [stdout] test backend::tmux::tests::kill_window_best_effort_does_not_panic_on_error ... ok
[INFO] [stdout] test backend::tmux::tests::kill_window_best_effort_succeeds_silently ... ok
[INFO] [stdout] test backend::tmux::tests::kill_window_invokes_kill_window ... ok
[INFO] [stdout] test backend::tmux::tests::sanitize_tmux_label_collapses_replacement_dashes ... ok
[INFO] [stdout] test backend::tmux::tests::sanitize_tmux_label_strips_invalid_chars ... ok
[INFO] [stdout] test backend::tmux::tests::sanitize_tmux_label_strips_trailing_dash ... ok
[INFO] [stdout] test backend::tmux::tests::set_remain_on_exit_sends_correct_command ... ok
[INFO] [stdout] test backend::tmux::tests::wait_for_exit_returns_non_zero_exit_code ... ok
[INFO] [stdout] test backend::tests::is_backend_available_returns_false_for_disabled_backend ... ok
[INFO] [stdout] test backend::tmux::tests::format_window_label_long_values_truncated ... ok
[INFO] [stdout] test backend::tmux::tests::format_window_label_planner_role ... ok
[INFO] [stdout] test backend::tmux::tests::format_window_label_reviewer_role ... ok
[INFO] [stdout] test backend::tmux_backend::tests::build_shell_command_basic ... ok
[INFO] [stdout] test backend::tests::kill_and_reap_child_uses_stored_pgid_after_leader_exit ... ok
[INFO] [stdout] test backend::tmux_backend::tests::build_shell_command_filters_sanitized_env_vars ... ok
[INFO] [stdout] test backend::tmux_backend::tests::build_shell_command_includes_env ... ok
[INFO] [stdout] test backend::tmux_backend::tests::build_shell_command_preserves_args ... ok
[INFO] [stdout] test backend::tmux::tests::wait_for_exit_returns_zero_exit_code ... ok
[INFO] [stdout] test backend::output_normalizer::tests::normalize_output_routes_single_json_when_first_json_has_no_type ... ok
[INFO] [stdout] test backend::tmux::tests::wait_for_exit_times_out ... ok
[INFO] [stdout] test backend::tests::cli_backend_streaming_preserves_exact_bytes_in_log ... ok
[INFO] [stdout] test backend::tmux_backend::tests::execute_success_returns_output ... ok
[INFO] [stdout] test backend::tmux::tests::wait_for_exit_with_activity_stall_times_out_idle ... ok
[INFO] [stdout] test backend::tmux_backend::tests::invalid_shell_identifiers ... ok
[INFO] [stdout] test backend::tmux_backend::tests::cancel_kills_window_synchronously_before_returning ... ok
[INFO] [stdout] test backend::tmux_backend::tests::name_delegates_to_inner ... ok
[INFO] [stdout] test backend::tmux_backend::tests::shell_escape_simple ... ok
[INFO] [stdout] test backend::tmux_backend::tests::shell_escape_with_single_quotes ... ok
[INFO] [stdout] test backend::tmux_backend::tests::shell_escape_with_spaces ... ok
[INFO] [stdout] test backend::tmux_backend::tests::build_shell_command_escapes_single_quotes ... ok
[INFO] [stdout] test backend::tmux_backend::tests::build_shell_command_skips_invalid_env_key ... ok
[INFO] [stdout] test backend::tmux_backend::tests::valid_shell_identifiers ... ok
[INFO] [stdout] test cli::amend::tests::parse_priority_accepts_valid_values ... ok
[INFO] [stdout] test cli::amend::tests::parse_priority_rejects_invalid_values ... ok
[INFO] [stdout] test backend::tmux_backend::tests::execute_nonzero_exit_returns_error ... ok
[INFO] [stdout] test backend::tmux_backend::tests::temp_files_cleaned_up_on_failure ... ok
[INFO] [stdout] test cli::amend::tests::resolve_body_returns_inline_text ... ok
[INFO] [stdout] test backend::tmux_backend::tests::temp_files_cleaned_up_on_success ... ok
[INFO] [stdout] test cli::amend::tests::resolve_body_returns_error_for_missing_file ... ok
[INFO] [stdout] test backend::tmux_backend::tests::kill_window_called_on_nonzero_exit ... ok
[INFO] [stdout] test cli::amend::tests::resolve_body_loads_file_content ... ok
[INFO] [stdout] test cli::auto::tests::parses_auto_command_with_all_args ... ok
[INFO] [stdout] test cli::auto::tests::rejects_auto_with_empty_idea ... ok
[INFO] [stdout] test cli::auto::tests::test_slugify_idea_basic ... ok
[INFO] [stdout] test cli::auto::tests::test_slugify_idea_consecutive_dashes ... ok
[INFO] [stdout] test cli::auto::tests::ensure_workspace_creates_workspace_when_missing ... ok
[INFO] [stdout] test cli::auto::tests::test_slugify_idea_special_chars ... ok
[INFO] [stdout] test cli::auto::tests::test_slugify_idea_truncation ... ok
[INFO] [stdout] test cli::backend_spec::tests::reject_empty_model_in_parens ... ok
[INFO] [stdout] test cli::backend_spec::tests::reject_empty_spec ... ok
[INFO] [stdout] test cli::backend_spec::tests::reject_missing_closing_paren ... ok
[INFO] [stdout] test cli::backend_spec::tests::reject_unknown_bare_backend ... ok
[INFO] [stdout] test cli::backend_spec::tests::reject_unknown_base_backend ... ok
[INFO] [stdout] test cli::backend_spec::tests::validate_bare_claude ... ok
[INFO] [stdout] test cli::backend_spec::tests::validate_bare_codex ... ok
[INFO] [stdout] test cli::backend_spec::tests::validate_claude_with_model ... ok
[INFO] [stdout] test cli::backend_spec::tests::validate_codex_with_model ... ok
[INFO] [stdout] test cli::backend_spec::tests::validate_name_only_accepts_optional_openrouter_with_model ... ok
[INFO] [stdout] test cli::backend_spec::tests::validate_name_only_bare_claude ... ok
[INFO] [stdout] test cli::backend_spec::tests::validate_name_only_rejects_unknown ... ok
[INFO] [stdout] test cli::backend_spec::tests::validate_name_only_with_model ... ok
[INFO] [stdout] test cli::backend_spec::tests::reject_empty_name_with_model ... ok
[INFO] [stdout] test cli::config::tests::ensure_backend_accepts_bare_claude ... ok
[INFO] [stdout] test cli::config::tests::ensure_backend_accepts_bare_codex ... ok
[INFO] [stdout] test cli::auto::tests::parses_auto_command_with_defaults ... ok
[INFO] [stdout] test cli::config::tests::ensure_backend_accepts_codex_with_model ... ok
[INFO] [stdout] test cli::config::tests::ensure_backend_accepts_claude_with_model ... ok
[INFO] [stdout] test cli::config::tests::ensure_backend_rejects_empty_model ... ok
[INFO] [stdout] test cli::config::tests::ensure_backend_rejects_missing_close_paren ... ok
[INFO] [stdout] test cli::config::tests::ensure_backend_rejects_empty_name_with_model ... ok
[INFO] [stdout] test cli::config::tests::ensure_backend_rejects_unknown_bare ... ok
[INFO] [stdout] test cli::config::tests::ensure_backend_rejects_unknown_base ... ok
[INFO] [stdout] test cli::config::tests::parse_optional_backend_accepts_bare_name ... ok
[INFO] [stdout] test cli::config::tests::parse_optional_backend_accepts_claude_with_model ... ok
[INFO] [stdout] test cli::config::tests::parse_optional_backend_accepts_null ... ok
[INFO] [stdout] test cli::config::tests::parse_optional_backend_accepts_optional_openrouter ... ok
[INFO] [stdout] test cli::config::tests::ensure_required_backend_rejects_optional_syntax ... ok
[INFO] [stdout] test cli::config::tests::parse_optional_backend_rejects_malformed ... ok
[INFO] [stdout] test cli::config::tests::parse_optional_backend_rejects_unknown ... ok
[INFO] [stdout] test cli::config::tests::set_global_value_rejects_optional_prompt_review_backend_alias ... ok
[INFO] [stdout] test cli::config::tests::resolve_config_alias_maps_qa_backend ... ok
[INFO] [stdout] test cli::config::tests::set_global_value_rejects_unknown_role_timeout ... ok
[INFO] [stdout] test cli::config::tests::set_global_value_sets_and_clears_role_timeout ... ok
[INFO] [stdout] test cli::config::tests::set_global_value_updates_history_capping_fields ... ok
[INFO] [stdout] test cli::config::tests::set_project_value_updates_history_capping_fields ... ok
[INFO] [stdout] test cli::config::tests::set_project_value_rejects_optional_prompt_review_backend_alias ... ok
[INFO] [stdout] test cli::init::tests::merge_overlay_config_fills_missing_keys ... ok
[INFO] [stdout] test backend::tmux::tests::wait_for_exit_with_activity_stderr_growth_counts ... ok
[INFO] [stdout] test cli::init::tests::merge_overlay_config_fills_missing_keys_verifiable_in_file ... ok
[INFO] [stdout] test cli::init::tests::merge_overlay_config_handles_inline_tables ... ok
[INFO] [stdout] test cli::init::tests::create_workspace_full_plan_writes_all_templates ... ok
[INFO] [stdout] test cli::init::tests::plan_full_actions_uses_shared_constants_in_stable_order ... ok
[INFO] [stdout] test cli::init::tests::plan_minimal_actions_keeps_only_minimal_workspace_steps ... ok
[INFO] [stdout] test cli::init::tests::plan_overlay_actions_includes_overlay_config ... ok
[INFO] [stdout] test cli::init::tests::plan_overlay_actions_skips_existing_templates ... ok
[INFO] [stdout] test cli::init::tests::validate_copy_files_target_empty_dir ... ok
[INFO] [stdout] test cli::init::tests::merge_overlay_config_preserves_user_values ... ok
[INFO] [stdout] test cli::init::tests::validate_copy_files_target_malformed_toml ... ok
[INFO] [stdout] test cli::init::tests::validate_copy_files_target_new_dir ... ok
[INFO] [stdout] test cli::init::tests::validate_copy_files_target_existing_workspace ... ok
[INFO] [stdout] test cli::auto::tests::ensure_workspace_with_explicit_root_creates_workspace ... ok
[INFO] [stdout] test backend::tmux::tests::wait_for_exit_with_activity_file_growth_resets_idle ... ok
[INFO] [stdout] test cli::init::tests::validate_target_rejects_file_target ... ok
[INFO] [stdout] test cli::init::tests::validate_target_rejects_nonempty_directory ... ok
[INFO] [stdout] test cli::init::tests::create_workspace_minimal_plan_writes_no_templates ... ok
[INFO] [stdout] test cli::prd::tests::resolved_ask_max_falls_back_to_preset_default ... ok
[INFO] [stdout] test cli::prd::tests::resolved_ask_max_prefers_explicit_flag_over_preset ... ok
[INFO] [stdout] test cli::project::tests::project_backend_accepts_bare_codex ... ok
[INFO] [stdout] test cli::project::tests::project_backend_accepts_bare_claude ... ok
[INFO] [stdout] test cli::project::tests::project_backend_accepts_codex_with_model ... ok
[INFO] [stdout] test cli::project::tests::project_backend_rejects_malformed_empty_model ... ok
[INFO] [stdout] test cli::project::tests::project_backend_rejects_malformed_empty_name ... ok
[INFO] [stdout] test cli::project::tests::project_backend_rejects_malformed_missing_close_paren ... ok
[INFO] [stdout] test cli::project::tests::project_backend_rejects_unknown_base ... ok
[INFO] [stdout] test cli::status::tests::extract_required_change_lines_unchanged_behavior ... ok
[INFO] [stdout] test cli::status::tests::extract_section_lines_handles_body_with_frontmatter_stripped ... ok
[INFO] [stdout] test cli::auto::tests::ensure_workspace_with_explicit_root_loads_existing ... ok
[INFO] [stdout] test cli::status::tests::extract_section_lines_returns_empty_when_section_has_no_content ... ok
[INFO] [stdout] test cli::status::tests::extract_section_lines_returns_empty_when_section_missing ... ok
[INFO] [stdout] test cli::prd::tests::resolved_ask_max_falls_back_to_full_default ... ok
[INFO] [stdout] test cli::tail::tests::labels_use_expected_wire_format ... ok
[INFO] [stdout] test cli::status::tests::extract_section_lines_returns_up_to_3_lines_from_acceptance_criteria_verification ... ok
[INFO] [stdout] test cli::status::tests::extract_section_lines_returns_up_to_3_lines_from_failures ... ok
[INFO] [stdout] test cli::project::tests::project_backend_accepts_claude_with_model ... ok
[INFO] [stdout] test cli::tail::tests::emits_phase_change_event_with_new_phase_details ... ok
[INFO] [stdout] test cli::tail::tests::normalizes_timestamps_preferring_created_at ... ok
[INFO] [stdout] test cli::tail::tests::sorts_by_epoch_then_type_then_signature ... ok
[INFO] [stdout] test cli::init::tests::validate_copy_files_target_nonempty_no_toml ... ok
[INFO] [stdout] test cli::init::tests::merge_overlay_config_preserves_comments ... ok
[INFO] [stdout] test cli::tests::parses_amend_with_all_args ... ok
[INFO] [stdout] test cli::tests::parses_amend_with_at_file_body ... ok
[INFO] [stdout] test cli::tail::tests::parses_filename_timestamp_as_utc ... ok
[INFO] [stdout] test cli::tail::tests::serializes_json_with_event_specific_fields ... ok
[INFO] [stdout] test cli::tail::tests::splits_frontmatter_and_extracts_heading ... ok
[INFO] [stdout] test cli::tests::parses_daemon_retrigger_with_task_id ... ok
[INFO] [stdout] test cli::tests::parses_auto_with_skip_prompt_review ... ok
[INFO] [stdout] test cli::tests::parses_daemon_status_with_data_dir ... ok
[INFO] [stdout] test cli::tests::parses_daemon_abort_with_task_selector ... ok
[INFO] [stdout] test cli::tests::parses_daemon_start_with_max_concurrent_one ... ok
[INFO] [stdout] test cli::tests::parses_amend_with_defaults ... ok
[INFO] [stdout] test cli::tests::parses_daemon_start_with_all_overrides ... ok
[INFO] [stdout] test cli::tests::parses_prd_command_with_implicit_defaults ... ok
[INFO] [stdout] test cli::tests::parses_init_with_dry_run_short_flag ... ok
[INFO] [stdout] test cli::tests::parses_quick_dev_auto_with_all_args ... ok
[INFO] [stdout] test cli::tests::parses_quick_dev_auto_with_defaults ... ok
[INFO] [stdout] test cli::tests::parses_init_with_dry_run_long_flag ... ok
[INFO] [stdout] test cli::tests::parses_quick_dev_run_with_defaults ... ok
[INFO] [stdout] test cli::tests::parses_quick_prd_with_defaults ... ok
[INFO] [stdout] test cli::tests::parses_run_with_no_tmux_flag ... ok
[INFO] [stdout] test cli::tests::parses_run_with_role_backend_overrides ... ok
[INFO] [stdout] test cli::tests::parses_run_with_tmux_flag ... ok
[INFO] [stdout] test cli::tests::parses_run_with_skip_prompt_review ... ok
[INFO] [stdout] test cli::tests::parses_quick_dev_run_with_all_args ... ok
[INFO] [stdout] test cli::tests::parses_run_without_tmux_flags ... ok
[INFO] [stdout] test cli::tests::rejects_amend_without_body ... ok
[INFO] [stdout] test cli::tests::parses_validate_command_with_expected_arguments ... ok
[INFO] [stdout] test cli::tests::parses_quick_prd_with_all_args ... ok
[INFO] [stdout] test cli::tests::parses_prd_command_with_preset ... ok
[INFO] [stdout] test cli::tests::rejects_prd_with_conflicting_interactive_flags ... ok
[INFO] [stdout] test cli::tests::parses_prd_command_with_expected_arguments ... ok
[INFO] [stdout] test cli::tests::rejects_quick_dev_auto_with_whitespace_idea ... ok
[INFO] [stdout] test cli::tests::rejects_quick_dev_auto_with_empty_idea ... ok
[INFO] [stdout] test cli::tests::rejects_quick_dev_run_with_zero_max_review_iterations ... ok
[INFO] [stdout] test cli::tests::rejects_quick_dev_auto_with_zero_max_final_review_retries ... ok
[INFO] [stdout] test cli::tests::rejects_quick_dev_auto_with_zero_max_review_iterations ... ok
[INFO] [stdout] test cli::tests::rejects_quick_prd_with_conflicting_interactive_flags ... ok
[INFO] [stdout] test cli::tests::rejects_quick_dev_run_with_zero_max_final_review_retries ... ok
[INFO] [stdout] test cli::tests::rejects_run_with_conflicting_tmux_flags ... ok
[INFO] [stdout] test config::global::tests::backend_enabled_accepts_bool_and_auto_string ... ok
[INFO] [stdout] test config::global::tests::backend_role_models_default_is_empty ... ok
[INFO] [stdout] test cli::tests::test_quick_prd_dry_run_skips_backends ... ok
[INFO] [stdout] test config::global::tests::backend_config_timeout_for_role_prefers_override_and_falls_back ... ok
[INFO] [stdout] test config::global::tests::default_workspace_tmux_settings_match_expected_values ... ok
[INFO] [stdout] test config::global::tests::backend_role_timeouts_toml_deserialize_without_table_uses_fallback_timeout ... ok
[INFO] [stdout] test config::global::tests::deserializes_prompt_review_fields_when_present ... ok
[INFO] [stdout] test config::global::tests::deserializes_backend_models_when_present ... ok
[INFO] [stdout] test config::global::tests::deserializes_workspace_tmux_fields_when_present ... ok
[INFO] [stdout] test config::global::tests::deserializes_workspace_tmux_defaults_when_fields_are_missing ... ok
[INFO] [stdout] test config::global::tests::fill_from_fills_none_fields_from_defaults ... ok
[INFO] [stdout] test config::global::tests::for_role_returns_expected_model_for_each_role ... ok
[INFO] [stdout] test config::global::tests::minimal_toml_parses_to_default ... ok
[INFO] [stdout] test config::global::tests::openrouter_defaults_match_expected_values ... ok
[INFO] [stdout] test config::global::tests::missing_single_backend_uses_backend_specific_default ... ok
[INFO] [stdout] test config::global::tests::backend_role_timeouts_toml_deserialize_with_table_sets_overrides ... ok
[INFO] [stdout] test config::global::tests::partial_backend_config_merge_fills_role_timeouts_from_defaults ... ok
[INFO] [stdout] test config::global::tests::empty_toml_deserializes_to_defaults ... ok
[INFO] [stdout] test config::global::tests::planner_state_in_prompt_default_is_summary ... ok
[INFO] [stdout] test config::global::tests::partial_sections_default_correctly ... ok
[INFO] [stdout] test config::global::tests::load_fills_missing_models_from_code_defaults ... ok
[INFO] [stdout] test config::global::tests::planner_state_in_prompt_kebab_case_serde ... ok
[INFO] [stdout] test config::global::tests::previous_specs_in_prompt_kebab_case_serde ... ok
[INFO] [stdout] test config::global::tests::previous_specs_in_prompt_serde_roundtrips ... ok
[INFO] [stdout] test config::global::tests::planner_state_in_prompt_serde_roundtrips ... ok
[INFO] [stdout] test config::global::tests::role_timeouts_fill_from_fills_none_fields_from_defaults ... ok
[INFO] [stdout] test config::global::tests::role_timeouts_for_role_returns_expected_timeout_for_each_role ... ok
[INFO] [stdout] test config::global::tests::previous_specs_in_prompt_default_is_titles ... ok
[INFO] [stdout] test config::global::tests::backend_enabled_serde_roundtrip_preserves_values ... ok
[INFO] [stdout] test config::global::tests::save_sparse_errors_on_non_table_path_segment ... ok
[INFO] [stdout] test config::global::tests::save_sparse_falls_back_to_full_save_on_missing_file ... ok
[INFO] [stdout] test config::global::tests::save_sparse_handles_env_dotted_literal_keys ... ok
[INFO] [stdout] test config::global::tests::save_sparse_creates_intermediate_tables ... ok
[INFO] [stdout] test config::global::tests::save_sparse_inline_table_nested_set ... ok
[INFO] [stdout] test config::global::tests::save_sparse_inline_table_path_set ... ok
[INFO] [stdout] test config::global::tests::shared_mutator_rejects_invalid_bool ... ok
[INFO] [stdout] test config::global::tests::shared_mutator_rejects_daemon_prd_keys ... ok
[INFO] [stdout] test config::global::tests::shared_mutator_rejects_invalid_integer ... ok
[INFO] [stdout] test config::global::tests::save_sparse_preserves_comments_and_unrelated_formatting ... ok
[INFO] [stdout] test config::global::tests::shared_mutator_rejects_unknown_key ... ok
[INFO] [stdout] test config::global::tests::shared_mutator_sets_backend_fields ... ok
[INFO] [stdout] test config::global::tests::shared_mutator_sets_workflow_fields ... ok
[INFO] [stdout] test config::global::tests::shared_mutator_sets_template_and_git_fields ... ok
[INFO] [stdout] test config::global::tests::shared_mutator_sets_workspace_fields ... ok
[INFO] [stdout] test config::global::tests::sparse_key_segments_splits_normal_keys ... ok
[INFO] [stdout] test config::global::tests::template_config_serde_defaults_quick_dev_fields ... ok
[INFO] [stdout] test config::global::tests::whitespace_toml_deserializes_to_defaults ... ok
[INFO] [stdout] test config::global::tests::workflow_config_default_planner_compression_fields ... ok
[INFO] [stdout] test config::global::tests::save_sparse_handles_models_role_clear ... ok
[INFO] [stdout] test config::global::tests::sparse_key_segments_splits_models_and_timeouts_normally ... ok
[INFO] [stdout] test config::global::tests::save_sparse_handles_role_timeouts_clear ... ok
[INFO] [stdout] test config::global::tests::sparse_key_segments_treats_env_rest_as_literal ... ok
[INFO] [stdout] test config::tests::completion_panel_rejects_duplicate_specs_after_canonicalization ... ok
[INFO] [stdout] test config::tests::completion_panel_rejects_empty_backends ... ok
[INFO] [stdout] test config::global::tests::workflow_config_deserializes_planner_max_prior_loops_absent_uses_default ... ok
[INFO] [stdout] test config::tests::completion_panel_rejects_min_completers_zero ... ok
[INFO] [stdout] test config::tests::completion_verdict_filename_matches_artifact_slug ... ok
[INFO] [stdout] test config::tests::completion_panel_rejects_threshold_out_of_range ... ok
[INFO] [stdout] test config::tests::final_review_overlap_warning_detection_triggers_for_matching_backend_family ... ok
[INFO] [stdout] test config::global::tests::save_sparse_inline_table_path_clear ... ok
[INFO] [stdout] test config::tests::prompt_review_alias_explicit_global_plural_wins_even_when_equal_to_default ... ok
[INFO] [stdout] test config::global::tests::workflow_config_deserializes_planner_compression_fields ... ok
[INFO] [stdout] test config::tests::prompt_review_alias_rejects_optional_project_singular_backend ... ok
[INFO] [stdout] test config::tests::prompt_review_alias_synthesizes_plural_when_plural_unset ... ok
[INFO] [stdout] test config::tests::prompt_review_panel_rejects_duplicate_specs_after_canonicalization ... ok
[INFO] [stdout] test config::tests::prompt_review_panel_rejects_min_reviewers_zero ... ok
[INFO] [stdout] test config::tests::prompt_review_panel_rejects_empty_backends ... ok
[INFO] [stdout] test config::tests::prompt_review_panel_accepts_optional_openrouter_backend ... ok
[INFO] [stdout] test config::tests::prompt_review_plural_project_override_takes_precedence_over_singular ... ok
[INFO] [stdout] test config::tests::resolve_daemon_config_applies_project_overrides_over_workspace_defaults ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_accepts_optional_syntax_in_final_review_list ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_accepts_starting_backend_with_model_spec ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_applies_role_override_precedence ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_deduplicates_final_review_backends_before_minimum_check ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_defaults_planner_compression_fields ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_final_review_fields_follow_precedence ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_global_overrides_planner_compression ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_project_absent_inherits_global ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_project_override_unlimited_loops ... ok
[INFO] [stdout] test config::tests::prompt_review_alias_rejects_optional_global_singular_backend ... ok
[INFO] [stdout] test config::tests::completion_panel_accepts_valid_partial_threshold ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_project_overrides_planner_compression ... ok
[INFO] [stdout] test config::tests::completion_panel_rejects_role_resolution_collapse ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_empty_final_review_backends_when_enabled ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_optional_syntax_on_final_review_arbiter ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_history_capping_fields_follow_precedence ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_optional_backend_on_required_surface ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_unknown_backend_on_required_surfaces ... ok
[INFO] [stdout] test config::global::tests::save_sparse_removes_optional_key_on_null ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_invalid_final_review_threshold_bounds ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_unknown_prompt_review_backend ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_unknown_role_override_backend ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_resolves_quick_dev_template_paths ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_when_unique_reviewer_count_below_minimum ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_resolves_qa_precedence_and_template_paths ... ok
[INFO] [stdout] test config::tests::validate_prd_config_rejects_invalid_question_backend_count ... ok
[INFO] [stdout] test config::tests::validate_daemon_workspace_config_rejects_unknown_refinement_backend ... ok
[INFO] [stdout] test config::tests::validate_effective_daemon_config_rejects_project_unknown_refinement_backend ... ok
[INFO] [stdout] test config::tests::validate_prd_config_rejects_invalid_backend_specs ... ok
[INFO] [stdout] test config::tests::validate_prd_config_rejects_unknown_backend_specs ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_unknown_final_review_arbiter_family ... ok
[INFO] [stdout] test daemon::github::tests::branch_name_with_numeric_code_does_not_affect_classification ... ok
[INFO] [stdout] test daemon::github::tests::classify_lifecycle_labels_empty_for_no_ralph_labels ... ok
[INFO] [stdout] test daemon::github::tests::classify_lifecycle_labels_excludes_ralph_quick ... ok
[INFO] [stdout] test daemon::github::tests::classify_lifecycle_labels_filters_correctly ... ok
[INFO] [stdout] test daemon::github::tests::deserialize_graphql_comment_with_string_id_and_url ... ok
[INFO] [stdout] test daemon::github::tests::deserialize_numeric_comment_id_without_url ... ok
[INFO] [stdout] test daemon::github::tests::dns_error_with_url_containing_403_is_retryable ... ok
[INFO] [stdout] test daemon::github::tests::explicit_http_401_is_non_retryable ... ok
[INFO] [stdout] test daemon::github::tests::explicit_http_403_is_non_retryable ... ok
[INFO] [stdout] test daemon::github::tests::explicit_http_503_is_retryable ... ok
[INFO] [stdout] test daemon::github::tests::extract_http_status_codes_bounded_context ... ok
[INFO] [stdout] test daemon::github::tests::extract_numeric_comment_id_from_graphql_url ... ok
[INFO] [stdout] test daemon::github::tests::extract_numeric_comment_id_from_invalid_url ... ok
[INFO] [stdout] test daemon::github::tests::extract_numeric_comment_id_from_none ... ok
[INFO] [stdout] test daemon::github::tests::extract_numeric_comment_id_from_rest_url ... ok
[INFO] [stdout] test daemon::github::tests::extract_pr_number_from_standard_url ... ok
[INFO] [stdout] test daemon::github::tests::extract_pr_number_from_trailing_slash ... ok
[INFO] [stdout] test daemon::github::tests::extract_pr_number_returns_none_for_non_pr_url ... ok
[INFO] [stdout] test daemon::github::tests::gh_issue_deserialization_supports_body_absent ... ok
[INFO] [stdout] test config::tests::resolve_effective_config_rejects_unknown_base_backend_in_spec ... ok
[INFO] [stdout] test config::tests::prompt_review_project_singular_override_wins_over_global_plural_when_project_plural_absent ... ok
[INFO] [stdout] test daemon::github::tests::gh_issue_struct_includes_body_field ... ok
[INFO] [stdout] test daemon::github::tests::gh_issue_deserialization_supports_body_null ... ok
[INFO] [stdout] test daemon::github::tests::gh_issue_deserialization_supports_body_present ... ok
[INFO] [stdout] test daemon::github::tests::invalid_revision_patterns_are_detected ... ok
[INFO] [stdout] test daemon::github::tests::is_lease_rejection_detects_stale_info ... ok
[INFO] [stdout] test daemon::github::tests::is_lease_rejection_detects_rejected ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_gh_error_detects_409_conflict ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_gh_error_detects_503 ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_gh_error_detects_conflict_keyword ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_gh_error_detects_rate_limit ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_gh_error_returns_false_for_auth_errors ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_push_error_branch_name_collision_safety ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_push_error_classifies_transient_and_permanent ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_push_error_non_push_error_fallback ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_push_error_unknown_stderr_is_non_retryable ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_push_stderr_classifies_transient_and_permanent_errors ... ok
[INFO] [stdout] test daemon::github::tests::is_retryable_push_stderr_ignores_branch_name_collisions ... ok
[INFO] [stdout] test daemon::github::tests::parse_authenticated_login_rejects_empty ... ok
[INFO] [stdout] test daemon::github::tests::parse_authenticated_login_trims_and_returns_value ... ok
[INFO] [stdout] test daemon::github::tests::parse_pr_is_draft_false ... ok
[INFO] [stdout] test daemon::github::tests::parse_pr_is_draft_true ... ok
[INFO] [stdout] test daemon::github::tests::pr_merge_info_parses_expected_fields ... ok
[INFO] [stdout] test daemon::github::tests::is_lease_rejection_returns_false_for_unrelated ... ok
[INFO] [stdout] test daemon::github::tests::pr_merge_status_maps_unknown ... ok
[INFO] [stdout] test backend::tmux_backend::tests::execute_genuine_timeout_returns_backend_timeout ... ok
[INFO] [stdout] test daemon::github::tests::pr_merge_status_maps_conflicting ... ok
[INFO] [stdout] test daemon::bootstrap::tests::bootstrap_bare_repo_returns_unsupported_error ... ok
[INFO] [stdout] test daemon::github::tests::push_branch_with_retry_impl_does_not_retry_permanent_failure ... ok
[INFO] [stdout] test daemon::github::tests::push_branch_with_retry_impl_does_not_retry_unknown_failure ... ok
[INFO] [stdout] test daemon::github::tests::ralph_quick_is_in_required_labels ... ok
[INFO] [stdout] test daemon::github::tests::ralph_quick_is_not_a_lifecycle_label ... ok
[INFO] [stdout] test daemon::github::tests::required_labels_are_unique_and_include_lifecycle_labels ... ok
[INFO] [stdout] test daemon::github::tests::unknown_errors_are_not_retried ... ok
[INFO] [stdout] test daemon::github::tests::url_containing_500_plus_http_401_is_non_retryable ... ok
[INFO] [stdout] test backend::tmux_backend::tests::execute_window_disappeared_returns_actionable_error ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::answer_comment_detection_respects_last_processed_comment_id ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::answer_comment_detection_returns_none_when_no_qualifying_comment ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::answer_comment_detection_skips_bot_and_selects_first_valid_user_comment ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::clean_draft_body_empty_after_cleanup_returns_none ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::clean_draft_body_removes_markers_heading_footer_and_trims ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::clean_draft_body_strips_heading_after_marker_when_blank_lines_precede_it ... ok
[INFO] [stdout] test daemon::github::tests::push_branch_with_retry_impl_exhausts_retries_for_transient_failure ... ok
[INFO] [stdout] test daemon::github::tests::push_branch_with_retry_impl_classifies_on_stderr_not_branch_name ... ok
[INFO] [stdout] test daemon::github::tests::push_branch_with_retry_impl_retries_transient_then_succeeds ... ok
[INFO] [stdout] test daemon::bootstrap::tests::bootstrap_non_git_dir_creates_git_commit_and_workspace ... ok
[INFO] [stdout] test daemon::github::tests::has_diff_returns_false_for_single_commit_head_tilde_base ... ok
[INFO] [stdout] test daemon::bootstrap::tests::bootstrap_existing_repo_is_noop ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::detect_approval_mixed_signals_return_false ... ok
[INFO] [stdout] test daemon::bootstrap::tests::bootstrap_is_idempotent_for_unborn_repo ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::draft_prompt_contains_issue_questions_and_answers ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::extract_questions_text_by_id_prefers_bot_author ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::extract_questions_text_ignores_user_spoof_marker ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::extract_questions_text_prefers_comment_id_and_strips_marker ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::feedback_revision_prompt_contains_placeholders ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::find_new_feedback_comments_draft_boundary_takes_precedence_over_cursor ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::find_new_feedback_comments_filters_bot_and_old ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::find_new_feedback_comments_respects_draft_boundary ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::find_new_feedback_comments_returns_all_non_bot_when_no_cursor ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::find_new_feedback_comments_returns_empty_when_all_bot ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::find_new_feedback_comments_returns_empty_when_all_processed ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::format_draft_comment_and_parse_roundtrip_consistency ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::format_draft_comment_round_trip_includes_shared_heading_body_and_footer ... ok
[INFO] [stdout] test backend::tests::cli_backend_active_stream_does_not_timeout ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::generate_draft_complete_writer_output_succeeds ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::all_feedback_comments_without_approval_triggers_revision ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::generate_draft_incomplete_writer_output_fails_after_exhaustion ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::detect_approval_question_about_lgtm_still_matches ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::generate_revision_complete_writer_output_succeeds ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::generate_draft_reviewer_approval_does_not_bypass_section_gating ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::generate_questions_runs_in_repo_clone_dir ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::has_in_progress_prd_label_done_precedence_overrides_mixed_labels ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::has_in_progress_prd_label_matches_each_in_progress_label ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::generate_revision_incomplete_writer_output_fails_after_exhaustion ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::has_prd_label_matches_waiting_feedback_label ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::has_prd_label_still_matches_done_label ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::has_in_progress_prd_label_rejects_done_empty_and_unrelated_labels ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::is_terminal_only_true_for_done_and_failed ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::load_returns_none_when_state_file_missing ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::parse_approved_spec_bot_only_filtering_ignores_user_spoof ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::parse_approved_spec_duplicate_draft_latest_wins ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::parse_approved_spec_highest_revision_wins ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::parse_approved_spec_ignores_bot_comment_that_only_references_draft_marker ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::parse_approved_spec_no_approval_marker_returns_none ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::parse_approved_spec_no_matching_draft_returns_none ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::prd_label_constants_include_waiting_feedback ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::prd_labels_alias_matches_lifecycle_labels ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::prd_workflow_state_serialization_roundtrip_for_all_variants ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::marker_generation_matches_expected_format ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::pre_draft_comments_ignored_for_revision_aggregation ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::detect_approval_approval_with_feedback_returns_true ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::refresh_repo_clone_skips_when_no_git_dir ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::repo_clone_path_joins_owner_and_repo ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::run_draft_with_section_retry_sync_complete_output_succeeds ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::generate_revision_reviewer_approval_does_not_bypass_section_gating ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::save_and_load_roundtrip ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::save_failure_increments_error_count_in_apply_transition_result ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::section_complete_spec_passes_validation ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::section_empty_spec_reports_all_missing ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::section_incomplete_spec_reports_missing_sections ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::section_incomplete_writer_output_would_fail_after_retries ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::section_retry_constants_are_correct ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::section_reviewer_approval_does_not_bypass_completeness ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::status_approved_marker_format ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::successful_transition_result_clears_previous_error_state ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::transition_error_accumulation_triggers_failure_on_third_error ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::transition_path_awaiting_answers_selects_first_valid_answer ... ok
[INFO] [stdout] test backend::tests::cli_backend_idle_timeout_resets_on_activity ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::run_draft_with_section_retry_sync_incomplete_output_fails ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::transition_path_pending_idempotent_marker_reuse ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::transition_path_pending_pickup_starts_non_terminal ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::transition_path_retry_exhaustion_triggers_failed ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::transition_path_awaiting_feedback_approval ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::pre_draft_comments_ignored_for_approval_detection ... ok
[INFO] [stdout] test daemon::process::tests::test_pid_exists_bogus ... ok
[INFO] [stdout] test daemon::process::tests::test_pid_exists_rejects_low_pids ... ok
[INFO] [stdout] test daemon::process::tests::test_pid_exists_self ... ok
[INFO] [stdout] test daemon::process::tests::test_terminate_process_group_dead_pgid ... ok
[INFO] [stdout] test daemon::process::tests::test_terminate_process_group_noop_for_low_pgid ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::detect_approval_negative_cases ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::agent_error_messages_say_attempted ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::classify_pure_conflict_exit_code_1_with_conflict_marker ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::classify_pure_conflict_exit_code_1_with_could_not_apply ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::classify_pure_non_conflict_exit_code_not_1 ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::classify_pure_non_conflict_no_indicator ... ok
[INFO] [stdout] test daemon::process::tests::run_command_with_timeout_high_output_no_false_timeout ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::detect_approval_strips_fenced_and_inline_code ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::classify_rebase_failure_has_conflicts_false ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::classify_rebase_failure_detects_conflict ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::is_rebase_in_progress_false_for_clean_repo ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::max_iterations_constant_is_10 ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::none_backend_error_says_skipped_disabled ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::parse_rebase_agent_backend_claude_defaults_to_opus ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::parse_rebase_agent_backend_claude_opus ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::parse_rebase_agent_backend_claude_sonnet ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::parse_rebase_agent_backend_none ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::parse_rebase_agent_backend_rejects_empty_string ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::parse_rebase_agent_backend_rejects_unknown_value ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::parse_rebase_agent_backend_trimmed_none ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::prompt_forbids_rebase_continue_and_abort ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::prompt_forbids_unrelated_file_edits ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::prompt_includes_rebase_target_and_files ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::prompt_requires_git_add ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::remaining_budget_expired_message_contains_timeout ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::remaining_budget_returns_duration_when_not_expired ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::remaining_budget_returns_error_when_expired ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::resolve_with_empty_backend_returns_clear_error ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::classify_rebase_failure_missing_conflict_indicator_in_stderr ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::refresh_repo_clone_fetches_and_resets_real_repo ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::resolve_with_invalid_backend_returns_clear_error ... ok
[INFO] [stdout] test daemon::refine::tests::build_refinement_prompt_includes_system_instructions ... ok
[INFO] [stdout] test daemon::refine::tests::build_refinement_prompt_wraps_raw_idea ... ok
[INFO] [stdout] test daemon::refine::tests::create_backend_accepts_bare_name ... ok
[INFO] [stdout] test daemon::refine::tests::create_backend_accepts_claude ... ok
[INFO] [stdout] test daemon::refine::tests::create_backend_accepts_codex ... ok
[INFO] [stdout] test daemon::refine::tests::create_backend_rejects_unknown ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::mixed_comments_approval_plus_feedback_triggers_approval ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::resolve_with_none_backend_returns_error_via_string_entrypoint ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_empty_cleaned_body_degraded ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_cleaned_body_preserves_structure ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_delimiter_in_content_not_split ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_multi_delimiter_first_split_point ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_enforces_body_validation_for_structured_output ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_no_cleaned_body_fallback ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_rejects_overlong_title ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_short_cleaned_body_accepted ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::detect_approval_plain_feedback_returns_false ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_three_section_success ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_truncated_cleaned_body_rejected ... ok
[INFO] [stdout] test daemon::refine::tests::validate_output_accepts_valid_length ... ok
[INFO] [stdout] test daemon::refine::tests::validate_output_rejects_empty ... ok
[INFO] [stdout] test daemon::refine::tests::validate_output_rejects_whitespace_only ... ok
[INFO] [stdout] test daemon::refine::tests::validate_output_boundary_at_min_length ... ok
[INFO] [stdout] test daemon::refine::tests::validate_output_rejects_too_short ... ok
[INFO] [stdout] test daemon::refine::tests::validate_output_trims_whitespace ... ok
[INFO] [stdout] test daemon::runtime::tests::build_pr_body_diff_stat_cap ... ok
[INFO] [stdout] test daemon::runtime::tests::build_pr_body_context_cap ... ok
[INFO] [stdout] test daemon::runtime::tests::build_pr_body_no_context_legacy_task ... ok
[INFO] [stdout] test daemon::runtime::tests::build_pr_title_daemon_task_format ... ok
[INFO] [stdout] test daemon::runtime::tests::build_pr_title_sanitizes_newlines ... ok
[INFO] [stdout] test daemon::runtime::tests::build_pr_title_truncates_long_title ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::resolve_with_trimmed_none_backend_returns_skipped_error ... ok
[INFO] [stdout] test daemon::runtime::tests::build_pr_body_full_metadata_assembly ... ok
[INFO] [stdout] test daemon::runtime::tests::complete_task_retry_policy_has_required_cap_and_delay ... ok
[INFO] [stdout] test daemon::runtime::tests::daemon_branch_format_validation_rejects_constant_format ... ok
[INFO] [stdout] test daemon::runtime::tests::daemon_branch_format_validation_rejects_incompatible_format ... ok
[INFO] [stdout] test daemon::runtime::tests::daemon_branch_format_validation_accepts_default ... ok
[INFO] [stdout] test daemon::runtime::tests::derive_terminal_label_error_is_failed ... ok
[INFO] [stdout] test daemon::runtime::tests::derive_terminal_label_ok_result_is_completed ... ok
[INFO] [stdout] test daemon::runtime::tests::derive_terminal_label_cancelled_is_failed ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::detect_approval_uses_word_boundaries ... ok
[INFO] [stdout] test daemon::runtime::tests::drain_all_children_aborts_stuck_tasks_after_timeout ... ok
[INFO] [stdout] test daemon::runtime::tests::extract_issue_body_handles_missing_or_empty_body ... ok
[INFO] [stdout] test daemon::runtime::tests::extract_issue_body_reads_body_after_title_separator ... ok
[INFO] [stdout] test daemon::runtime::tests::extract_original_title_body_only ... ok
[INFO] [stdout] test daemon::runtime::tests::extract_original_title_empty ... ok
[INFO] [stdout] test daemon::runtime::tests::extract_original_title_no_body ... ok
[INFO] [stdout] test daemon::runtime::tests::extract_original_title_with_body ... ok
[INFO] [stdout] test daemon::runtime::tests::extract_project_ref_daemon_format ... ok
[INFO] [stdout] test daemon::runtime::tests::extract_project_ref_non_matching_branches ... ok
[INFO] [stdout] test daemon::runtime::tests::await_watcher_with_timeout_impl_aborts_stuck_task ... ok
[INFO] [stdout] test daemon::runtime::tests::final_prompt_uses_prompt_original_signal_and_reads_prompt_md ... ok
[INFO] [stdout] test daemon::runtime::tests::cancellation_triggers_final_sweep_without_missing_artifact ... ok
[INFO] [stdout] test daemon::runtime::tests::extract_project_ref_success ... ok
[INFO] [stdout] test daemon::runtime::tests::quick_prd_detection_posts_correct_marker_header_and_body ... ok
[INFO] [stdout] test daemon::runtime::tests::resume_decision_requires_issue_prompt_md ... ok
[INFO] [stdout] test daemon::runtime::tests::runtime_pr_diff_stat_failure_fallback ... ok
[INFO] [stdout] test daemon::runtime::tests::should_close_no_diff_draft_pr_only_for_no_diff_drafts ... ok
[INFO] [stdout] test daemon::runtime::tests::should_mark_draft_pr_ready_only_on_completed_with_changes ... ok
[INFO] [stdout] test daemon::runtime::tests::should_retry_complete_task_retries_only_transient_errors_under_cap ... ok
[INFO] [stdout] test daemon::runtime::tests::single_watcher_run_posts_both_artifact_comments ... ok
[INFO] [stdout] test daemon::runtime::tests::multiple_spec_candidates_choose_newest_then_lexical_tiebreak ... ok
[INFO] [stdout] test daemon::runtime::tests::truncate_for_github_appends_note_within_limit ... ok
[INFO] [stdout] test daemon::runtime::tests::watcher_idempotency_prevents_duplicate_comments_on_redispatch ... ok
[INFO] [stdout] test daemon::interactive_prd::tests::detect_approval_positive_cases ... ok
[INFO] [stdout] test daemon::rebase_agent::tests::classify_rebase_failure_non_conflict_exit_code ... ok
[INFO] [stdout] test daemon::runtime::tests::stale_artifacts_older_than_child_start_are_ignored ... ok
[INFO] [stdout] test daemon::runtime::tests::write_body_file_creates_readable_temp ... ok
[INFO] [stdout] test daemon::tests::format_task_id_constructs_expected_string ... ok
[INFO] [stdout] test daemon::refine::tests::parse_refined_output_rejects_empty_structured_title ... ok
[INFO] [stdout] test daemon::tasks::tests::spawn_inprocess_task_returns_cancelled_on_token_cancel ... ok
[INFO] [stdout] test error::tests::backend_timeout_display_and_debug_include_idle_variant_context ... ok
[INFO] [stdout] test error::tests::backend_timeout_display_and_debug_include_walltime_variant_context ... ok
[INFO] [stdout] test error::tests::branch_mismatch_display_includes_expected_and_actual ... ok
[INFO] [stdout] test error::tests::interactive_prd_failed_has_expected_exit_code ... ok
[INFO] [stdout] test error::tests::is_quota_error_matches_known_patterns ... ok
[INFO] [stdout] test error::tests::is_quota_error_rejects_unrelated_errors ... ok
[INFO] [stdout] test error::tests::is_transient_distinguishes_terminal_and_transient_errors ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] test daemon::runtime::tests::github_post_failure_retries_without_panic ... ok
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp7yxH8N/.git/
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpYBzFSB/.git/
[INFO] [stdout] [master (root-commit) 046e749] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] test daemon::runtime::tests::derive_terminal_label_panic_join_error_is_failed ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpJVRV7w/remote.git/
[INFO] [stdout] [master (root-commit) 046e749] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] test daemon::interactive_prd::tests::transition_path_awaiting_feedback_revision ... ok
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpJVRV7w/setup/.git/
[INFO] [stdout] [master 43f9847] add project state
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 project-state.txt
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] [main (root-commit) 7f75c24] initial on main
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpKGvJTo/remote.git/
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpKGvJTo/work/.git/
[INFO] [stdout] test daemon::tasks::tests::spawn_inprocess_task_log_isolation_no_cross_contamination ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpsexFyy/remote.git/
[INFO] [stdout] [master (root-commit) ccf3fa4] ralph: bootstrap empty commit
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpsexFyy/setup/.git/
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] Switched to a new branch 'ralph/issue-1'
[INFO] [stdout] [master (root-commit) 046e749] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] Switched to a new branch 'ralph/test'
[INFO] [stdout] test git::branch::tests::merge_base_branch_noop_when_up_to_date ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpPVvZKX/remote.git/
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stderr] To /tmp/.tmpsexFyy/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] Cloning into '/tmp/.tmpsexFyy/clone'...
[INFO] [stderr] done.
[INFO] [stderr] Switched to a new branch 'scratch'
[INFO] [stdout] test git::branch::tests::sync_project_branch_creates_from_origin_head_when_missing ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpif8HHf/remote.git/
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpif8HHf/setup/.git/
[INFO] [stdout] [master (root-commit) 046e749] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] test daemon::runtime::tests::drain_all_children_force_aborts_non_cooperative_task ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpNl5ObU/remote.git/
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpPVvZKX/setup/.git/
[INFO] [stderr] Switched to branch 'ralph/test'
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpNl5ObU/setup/.git/
[INFO] [stderr] To /tmp/.tmpif8HHf/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stderr] Cloning into '/tmp/.tmpif8HHf/clone'...
[INFO] [stderr] To /tmp/.tmpJVRV7w/remote.git
[INFO] [stderr]  * [new branch]      main -> main
[INFO] [stdout] branch 'main' set up to track 'origin/main'.
[INFO] [stderr] Cloning into '/tmp/.tmpJVRV7w/clone'...
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] done.
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] done.
[INFO] [stdout] test git::branch::tests::merge_base_branch_syncs_new_commits ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp1rIuvh/remote.git/
[INFO] [stderr] To /tmp/.tmpNl5ObU/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stderr] Cloning into '/tmp/.tmpNl5ObU/clone'...
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] test daemon::worktree::tests::create_worktree_returns_expected_worktree_path ... ok
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp1rIuvh/setup/.git/
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] done.
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpjnm6Di/remote.git/
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpjnm6Di/setup/.git/
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] Switched to a new branch 'main'
[INFO] [stdout] [main f6c3651] main base commit 1
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 main-base-1.txt
[INFO] [stdout] branch 'main' set up to track 'origin/main'.
[INFO] [stderr] To /tmp/.tmpNl5ObU/remote.git
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stderr]  * [new branch]      main -> main
[INFO] [stdout] Deleted branch master (was 046e749).
[INFO] [stderr] Switched to a new branch 'scratch'
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stderr] To /tmp/.tmpPVvZKX/remote.git
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] Cloning into '/tmp/.tmpPVvZKX/clone'...
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] [main 2eec01f] main base commit 2
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 main-base-2.txt
[INFO] [stderr] done.
[INFO] [stdout] test daemon::worktree::tests::verify_worktree_branch_returns_ok_for_matching_branch ... ok
[INFO] [stdout] test daemon::worktree::tests::verify_worktree_branch_creates_missing_branch_via_migration ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpqwylRk/remote.git/
[INFO] [stderr] To /tmp/.tmp1rIuvh/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] Cloning into '/tmp/.tmp1rIuvh/clone'...
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stderr] Switched to a new branch 'ralph/issue-10'
[INFO] [stdout] [ralph/issue-10 f3e6fc4] base commit
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 base.txt
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpchFeDA/remote.git/
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] done.
[INFO] [stderr] Cloning into 'work'...
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stderr] To /tmp/.tmpjnm6Di/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stderr] To /tmp/.tmpNl5ObU/remote.git
[INFO] [stderr]    f6c3651..2eec01f  main -> main
[INFO] [stderr] Cloning into '/tmp/.tmpjnm6Di/clone'...
[INFO] [stderr] Cloning into 'work'...
[INFO] [stderr] To /tmp/.tmpPVvZKX/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-10 -> ralph/issue-10
[INFO] [stdout] HEAD is now at f6c3651 main base commit 1
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] Switched to branch 'master'
[INFO] [stdout] Your branch is up to date with 'origin/master'.
[INFO] [stdout] test git::branch::tests::sync_project_branch_bootstraps_empty_remote ... ok
[INFO] [stderr] done.
[INFO] [stdout] [master 0fbc554] advance remote base
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stdout]  create mode 100644 remote-base.txt
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp96MAtP/remote.git/
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] Cloning into 'work'...
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] To /tmp/.tmp1rIuvh/remote.git
[INFO] [stdout] test git::branch::tests::sync_project_branch_force_updates_custom_base_branch ... ok
[INFO] [stderr]    f0d943f..0fbc554  master -> master
[INFO] [stdout] [ralph/issue-42 c8aa8ee] remote commit
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout]  create mode 100644 remote-file.txt
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpJd0TiW/remote.git/
[INFO] [stderr] Cloning into 'work'...
[INFO] [stdout] HEAD is now at f0d943f initial
[INFO] [stderr] Switched to a new branch 'scratch'
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] [ralph/issue-10 a81bf70] local only: should vanish
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 local-artifact.txt
[INFO] [stdout] test git::branch::tests::sync_project_branch_autodetects_when_configured_base_missing ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] To /tmp/.tmpqwylRk/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] To /tmp/.tmpchFeDA/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stdout] test git::branch::tests::sync_project_branch_falls_back_to_local_base_when_origin_missing ... ok
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpjYOSfn/.git/
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_canonical_notes ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_canonical_response ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_extra_suffix ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_four_digit_seq ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_basic_draft ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_basic_four_digit_seq ... ok
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] To /tmp/.tmpjnm6Di/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_basic_non_impl ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_basic_notes ... ok
[INFO] [stdout] [master (root-commit) 106cbc2] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] Already on 'ralph/issue-42'
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_basic_response ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_basic_response_999 ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_t_non_z_suffix_rejected ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_t_not_review ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_t_notes ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_t_response ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_iso_tz_notes ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_no_timestamp ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_non_canonical_draft ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_readme ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_response_999 ... ok
[INFO] [stdout] [ralph/issue-42 3072a1a] local only commit
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 local-only.txt
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_review_file ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_short_timestamp ... ok
[INFO] [stderr] To /tmp/.tmpqwylRk/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stderr] Switched to a new branch 'ralph/issue-99'
[INFO] [stdout] test git::branch::tests::sync_project_branch_force_updates_local_base_branch ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_unix_epoch_notes ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_unix_epoch_response ... ok
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpzX8pVo/.git/
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] To /tmp/.tmpJd0TiW/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] To /tmp/.tmp96MAtP/remote.git
[INFO] [stdout] test git::branch::tests::sync_project_branch_resets_to_remote_when_exists ... ok
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] test git::branch::tests::sync_project_branch_discards_local_only_commit ... ok
[INFO] [stdout] test git::commit::tests::is_stray_impl_artifact_spec ... Initialized empty Git repository in /tmp/.tmpY1aKJg/.git/
[INFO] [stdout] ok
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stdout] test git::ralph_commit::tests::build_and_parse_round_trip ... ok
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] [master (root-commit) 106cbc2] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpEnT99q/remote.git/
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] [master (root-commit) 106cbc2] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] Cloning into 'work'...
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpviUufM/.git/
[INFO] [stdout] [master 5fa41d4] add tracked stray files
[INFO] [stdout]  2 files changed, 2 insertions(+)
[INFO] [stdout]  create mode 100644 20260304120000-impl-notes.md
[INFO] [stdout]  create mode 100644 20260304120000-impl-response-001.md
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stderr] To /tmp/.tmpJd0TiW/remote.git
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] branch 'ralph/issue-99' set up to track 'origin/ralph/issue-99'.
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stderr] done.
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stderr] To /tmp/.tmpchFeDA/remote.git
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] [master (root-commit) f0d943f] initial
[INFO] [stderr] To /tmp/.tmpqwylRk/remote.git
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stderr]  * [new branch]      ralph/issue-99 -> ralph/issue-99
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] Switched to a new branch 'ralph/issue-99'
[INFO] [stdout] test git::commit::tests::remove_stray_impl_artifacts_cleans_iso_basic_timestamped_files ... ok
[INFO] [stdout] test git::ralph_commit::tests::derive_position_defaults_when_no_ralph_commit_exists ... ok
[INFO] [stdout] test daemon::process::tests::test_terminate_spawned_process_group ... ok
[INFO] [stderr] To /tmp/.tmpEnT99q/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpUq9d6G/remote.git/
[INFO] [stdout] branch 'master' set up to track 'origin/master'.
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpOPktbH/remote.git/
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] Cloning into 'work'...
[INFO] [stderr] To /tmp/.tmp96MAtP/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stderr] Cloning into 'work'...
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpK8rUIa/remote.git/
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stderr] To /tmp/.tmpEnT99q/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stdout] [ralph/issue-42 8a0817a] ralph(issue-42): loop 1 planning -> implementing
[INFO] [stdout] test git::commit::tests::commit_and_push_initial_prompt_fails_on_branch_mismatch ... ok
[INFO] [stdout] test daemon::process::tests::run_command_with_timeout_kills_group_on_timeout ... ok
[INFO] [stdout] test git::ralph_commit::tests::parse_rejects_malformed_subject ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpAOYlgj/remote.git/
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] Cloning into 'work'...
[INFO] [stderr] Cloning into 'work'...
[INFO] [stdout] test git::commit::tests::remove_stray_impl_artifacts_cleans_tracked_and_untracked ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] test git::ralph_commit::tests::parse_rejects_missing_required_trailer ... ok
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stdout] test git::ralph_commit::tests::parse_rejects_subject_and_trailer_disagreement ... ok
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stdout] test git::commit::tests::commit_and_push_phase_transition_pushes_structured_checkpoint ... ok
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpl7LsXc/remote.git/
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpuGDsyX/remote.git/
[INFO] [stderr] Cloning into 'work'...
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stderr] To /tmp/.tmpEnT99q/remote.git
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmprlZOLE/remote.git/
[INFO] [stderr]    f0d943f..8a0817a  HEAD -> ralph/issue-42
[INFO] [stdout] [master (root-commit) 0acdc1d] initial
[INFO] [stderr] Cloning into 'work'...
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stderr] Cloning into 'work'...
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stdout] [master (root-commit) 0acdc1d] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] [master (root-commit) 0acdc1d] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stderr] done.
[INFO] [stdout] [master (root-commit) 0acdc1d] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] [ralph/issue-42 7cc0ed4] ralph(issue-42): loop 2 implementing -> reviewing
[INFO] [stdout] test git::commit::tests::commit_and_push_phase_transition_push_failure_keeps_local_commit_without_remote_advance ... ok
[INFO] [stdout] [master (root-commit) 0acdc1d] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] To /tmp/.tmpUq9d6G/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stdout] test git::commit::tests::counts_only_matching_project_and_transition_messages ... ok
[INFO] [stdout] [master (root-commit) 0acdc1d] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpj7jBzs/remote.git/
[INFO] [stderr] Cloning into 'work'...
[INFO] [stderr] To /tmp/.tmpAOYlgj/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] To /tmp/.tmpuGDsyX/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stdout] test git::commit::tests::commit_and_push_initial_prompt_stages_only_prompt_inputs ... ok
[INFO] [stdout] test output_log::tests::collision_safe_across_projects ... ok
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stdout] test output_log::tests::creates_missing_parent_directories ... ok
[INFO] [stderr] To /tmp/.tmpK8rUIa/remote.git
[INFO] [stdout] test output_log::tests::derives_loop_scoped_log_path ... ok
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stdout] test output_log::tests::derives_prompt_reviewer_log_path_when_loop_is_none ... ok
[INFO] [stdout] test output_log::tests::fallback_flag_semantics_locked_down ... ok
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] test output_log::tests::formats_loop_number_edges_with_three_digits ... ok
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stdout] test output_log::tests::log_writer_appends_across_instances ... ok
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stderr] To /tmp/.tmpAOYlgj/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] test output_log::tests::log_writer_attempt_counter_increments ... ok
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stdout] [master (root-commit) 0acdc1d] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] test output_log::tests::log_writer_disabled_on_bad_path_continues_silently ... ok
[INFO] [stdout] test output_log::tests::log_writer_opens_and_appends ... ok
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpRaGeQv/remote.git/
[INFO] [stdout] test output_log::tests::log_writer_preserves_cr_and_partial_line_bytes ... ok
[INFO] [stdout] test output_log::tests::log_writer_prompt_reviewer_uses_flat_path ... ok
[INFO] [stdout] test output_log::tests::log_writer_timeout_footer_appends ... ok
[INFO] [stdout] test output_log::tests::mixed_timeout_and_parse_retry_numbering ... ok
[INFO] [stdout] test output_log::tests::parse_retry_path_attempt_numbering ... ok
[INFO] [stdout] test output_log::tests::sanitization_collapses_and_trims_underscores ... ok
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stderr] To /tmp/.tmpuGDsyX/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] test output_log::tests::sanitization_handles_empty_input ... ok
[INFO] [stdout] test output_log::tests::sanitizes_unsafe_filename_characters ... ok
[INFO] [stdout] test output_log::tests::separator_format_contains_required_fields ... ok
[INFO] [stdout] test output_log::tests::separator_format_fallback_flag ... ok
[INFO] [stdout] test output_log::tests::timeout_footer_format_contains_timestamp ... ok
[INFO] [stderr] To /tmp/.tmpUq9d6G/remote.git
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] [ralph/issue-42 cf65318] ralph(issue-42): loop 1 planning -> implementing
[INFO] [stdout] [ralph/issue-42 1716a00] ralph(issue-42): loop 1 planning -> implementing
[INFO] [stdout] test output_log::tests::timeout_retry_path_attempt_numbering ... ok
[INFO] [stdout] test prd::answers::tests::hash_is_stable_for_same_content ... ok
[INFO] [stdout] test prd::answers::tests::load_returns_empty_map_when_file_missing ... ok
[INFO] [stdout] test prd::answers::tests::merge_overwrites_existing_and_adds_new_keys ... ok
[INFO] [stdout] [master (root-commit) 0acdc1d] initial
[INFO] [stderr] To /tmp/.tmpOPktbH/remote.git
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] test prd::answers::tests::yaml_roundtrip ... ok
[INFO] [stdout] test prd::cache::tests::creates_cache_dir_with_expected_hash ... ok
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stdout] test prd::cache::tests::meta_roundtrip ... ok
[INFO] [stdout] test prd::cache::tests::prd_lock_acquisition_succeeds ... ok
[INFO] [stdout] [ralph/issue-42 cf65318] ralph(issue-42): loop 1 planning -> implementing
[INFO] [stdout] test prd::cache::tests::prd_lock_releases_on_drop ... ok
[INFO] [stdout] test prd::cache::tests::resume_validation_detects_idea_mismatch ... ok
[INFO] [stdout] test prd::cache::tests::should_skip_stage_when_input_hash_matches ... ok
[INFO] [stdout] test prd::cache::tests::stage_output_roundtrip ... ok
[INFO] [stdout] test prd::cache::tests::writes_missing_info_report ... ok
[INFO] [stdout] test prd::gaps::tests::parse_gap_report_empty_questions_list ... ok
[INFO] [stdout] test prd::gaps::tests::parse_gap_report_malformed_json_returns_error ... ok
[INFO] [stdout] test prd::gaps::tests::parse_gap_report_missing_fence_markers_returns_error ... ok
[INFO] [stdout] test prd::gaps::tests::parse_gap_report_valid_fenced_json ... ok
[INFO] [stdout] test prd::gaps::tests::parse_validation_result_invalid_with_issues ... ok
[INFO] [stderr] Cloning into 'work'...
[INFO] [stderr] To /tmp/.tmpK8rUIa/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stderr] warning: You appear to have cloned an empty repository.
[INFO] [stderr] done.
[INFO] [stderr] To /tmp/.tmpj7jBzs/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] To /tmp/.tmpUq9d6G/remote.git
[INFO] [stderr]    0acdc1d..1716a00  HEAD -> ralph/issue-42
[INFO] [stdout] test prd::gaps::tests::parse_validation_result_valid ... ok
[INFO] [stdout] test prd::gaps::tests::test_gap_report_serde_roundtrip ... ok
[INFO] [stdout] test prd::gaps::tests::test_question_kind_serde_roundtrip ... ok
[INFO] [stdout] test prd::gaps::tests::test_question_typed_impact_stage ... ok
[INFO] [stdout] test prd::gaps::tests::validation_result_serde_roundtrip ... ok
[INFO] [stdout] test prd::interaction::tests::mock_interaction_returns_canned_answers_and_none_when_exhausted ... ok
[INFO] [stdout] test prd::interaction::tests::non_interactive_interaction_always_returns_none ... ok
[INFO] [stdout] test prd::interaction::tests::parse_question_answer_handles_defaults_and_kinds ... ok
[INFO] [stdout] test prd::interaction::tests::plain_interaction_dispatches_commands ... ok
[INFO] [stdout] test prd::interaction::tests::plain_interaction_parses_commands ... ok
[INFO] [stdout] test prd::quick::tests::test_check_spec_sections_all_present ... ok
[INFO] [stdout] test prd::quick::tests::test_check_spec_sections_some_missing ... ok
[INFO] [stdout] test prd::quick::tests::test_check_spec_sections_with_frontmatter ... ok
[INFO] [stdout] test prd::quick::tests::test_dry_run_renders_prompt ... ok
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stdout] test prd::quick::tests::test_empty_issues_auto_approval ... ok
[INFO] [stdout] test prd::quick::tests::test_format_issues ... ok
[INFO] [stdout] test prd::quick::tests::test_malformed_revision_keeps_previous_spec ... ok
[INFO] [stdout] test prd::quick::tests::test_parse_review_feedback_approved ... ok
[INFO] [stdout] test prd::quick::tests::test_parse_review_feedback_malformed ... ok
[INFO] [stdout] test prd::quick::tests::test_parse_review_feedback_rejected ... ok
[INFO] [stdout] test prd::quick::tests::test_render_prompt ... ok
[INFO] [stdout] test prd::quick::tests::test_review_feedback_serde_roundtrip ... ok
[INFO] [stdout] test prd::quick::tests::test_review_parse_retry_exhaustion ... ok
[INFO] [stdout] test prd::quick::tests::test_review_parse_retry_success ... ok
[INFO] [stdout] test prd::quick::tests::test_revision_artifact_writing ... ok
[INFO] [stdout] test prd::quick::tests::test_section_retry_limit ... ok
[INFO] [stdout] test prd::stages::tests::test_check_stage_output_missing_sections ... ok
[INFO] [stdout] test prd::stages::tests::test_check_stage_output_valid ... ok
[INFO] [stdout] test prd::stages::tests::test_check_stage_output_with_frontmatter ... ok
[INFO] [stdout] test prd::stages::tests::test_format_answers_empty ... ok
[INFO] [stdout] test prd::stages::tests::test_format_answers_with_data ... ok
[INFO] [stdout] test prd::stages::tests::test_gap_analysis_prompt ... ok
[INFO] [stdout] test prd::stages::tests::test_ideation_prompt ... ok
[INFO] [stdout] test prd::stages::tests::test_prd_prompt ... ok
[INFO] [stdout] [ralph/issue-42 f59ad4a] ralph(issue-42): loop 2 implementing -> reviewing
[INFO] [stdout] test prd::stages::tests::test_render_template ... ok
[INFO] [stdout] test prd::stages::tests::test_required_sections_per_stage ... ok
[INFO] [stdout] test prd::stages::tests::test_research_prompt ... ok
[INFO] [stdout] test prd::stages::tests::test_synthesis_prompt ... ok
[INFO] [stdout] test prd::stages::tests::test_validation_prompt ... ok
[INFO] [stdout] test prd::state::tests::test_pipeline_context_serde ... ok
[INFO] [stdout] test prd::state::tests::test_prd_meta_serde ... ok
[INFO] [stdout] test prd::state::tests::test_stage_artifact_filename ... ok
[INFO] [stdout] test prd::state::tests::test_stage_index ... ok
[INFO] [stdout] test prd::state::tests::test_stage_ordering ... ok
[INFO] [stdout] test prd::state::tests::test_stage_serde_roundtrip ... ok
[INFO] [stdout] test project::amendments::tests::amendment_request_serialization_roundtrip ... ok
[INFO] [stdout] test project::amendments::tests::drain_does_not_overwrite_inflight_created_before_json_claim ... ok
[INFO] [stdout] test project::amendments::tests::drain_io_error_on_inflight_read_is_fatal_with_rollback ... ok
[INFO] [stdout] test project::amendments::tests::drain_malformed_files_do_not_trigger_rollback ... ok
[INFO] [stdout] test project::amendments::tests::drain_processes_queue_files_in_deterministic_lexicographic_order ... ok
[INFO] [stdout] test project::amendments::tests::drain_processes_same_stem_json_and_inflight_only_once ... ok
[INFO] [stdout] test project::amendments::tests::drain_processes_same_stem_json_and_inflight_with_different_content ... ok
[INFO] [stdout] test project::amendments::tests::drain_recovers_and_processes_existing_inflight_files ... ok
[INFO] [stdout] [ralph/issue-42 cf65318] ralph(issue-42): loop 1 planning -> implementing
[INFO] [stdout] test project::amendments::tests::drain_removes_processed_files_after_successful_parse ... ok
[INFO] [stderr] To /tmp/.tmpuGDsyX/remote.git
[INFO] [stdout] test project::amendments::tests::drain_rollback_preserves_original_amendment_fields ... ok
[INFO] [stdout] test project::amendments::tests::drain_rolls_back_already_drained_items_on_mid_drain_fatal_error ... ok
[INFO] [stdout] test project::amendments::tests::drain_same_stem_distinct_content_claims_json_to_inflight_before_parse ... ok
[INFO] [stdout] test project::amendments::tests::drain_same_stem_json_skipped_on_rename_race ... ok
[INFO] [stderr]    0acdc1d..cf65318  HEAD -> ralph/issue-42
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stdout] [master (root-commit) 0acdc1d] initial
[INFO] [stdout]  1 file changed, 1 insertion(+)
[INFO] [stdout]  create mode 100644 README.md
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stdout] test project::amendments::tests::drain_skips_temp_staging_and_processes_published_files ... ok
[INFO] [stdout] test project::amendments::tests::drain_validation_failure_is_quarantined_not_fatal ... ok
[INFO] [stderr] To /tmp/.tmprlZOLE/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stderr] To /tmp/.tmpOPktbH/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] To /tmp/.tmpj7jBzs/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stderr] To /tmp/.tmpUq9d6G/remote.git
[INFO] [stderr]    1716a00..f59ad4a  HEAD -> ralph/issue-42
[INFO] [stderr] To /tmp/.tmpK8rUIa/remote.git
[INFO] [stderr]    0acdc1d..cf65318  HEAD -> ralph/issue-42
[INFO] [stderr] To /tmp/.tmpl7LsXc/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stdout] test project::amendments::tests::enqueue_appends_numeric_suffix_when_target_exists ... ok
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stderr] To /tmp/.tmpAOYlgj/remote.git
[INFO] [stderr]    0acdc1d..cf65318  HEAD -> ralph/issue-42
[INFO] [stderr] To /tmp/.tmpRaGeQv/remote.git
[INFO] [stderr]  * [new branch]      HEAD -> master
[INFO] [stdout] [ralph/issue-42 cf65318] ralph(issue-42): loop 1 planning -> implementing
[INFO] [stdout] test project::amendments::tests::enqueue_avoids_overwriting_file_that_appears_before_publish ... ok
[INFO] [stdout] [ralph/issue-42 2f0b3e8] chore: non-ralph commit
[INFO] [stdout] test project::amendments::tests::enqueue_skips_stem_occupied_by_inflight ... ok
[INFO] [stdout] [ralph/issue-42 b96d940] ralph(issue-42): loop 2 implementing -> reviewing
[INFO] [stderr] Switched to a new branch 'ralph/issue-42'
[INFO] [stdout] test project::amendments::tests::enqueue_uses_timestamped_sanitized_name_and_atomic_handoff ... ok
[INFO] [stdout] test project::amendments::tests::formatter_lists_required_fields ... ok
[INFO] [stdout] test project::amendments::tests::formatter_returns_empty_for_no_amendments ... ok
[INFO] [stderr] To /tmp/.tmpl7LsXc/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] [ralph/issue-42 b3be19f] ralph(issue-42): loop 2 implementing -> reviewing
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stderr] To /tmp/.tmpAOYlgj/remote.git
[INFO] [stderr]    cf65318..b96d940  HEAD -> ralph/issue-42
[INFO] [stdout] test project::amendments::tests::invalid_utf8_file_is_quarantined_not_fatal ... ok
[INFO] [stdout] test project::amendments::tests::malformed_json_is_quarantined_and_drain_continues ... ok
[INFO] [stdout] test project::amendments::tests::missing_or_empty_queue_returns_empty_results_and_zero_count ... ok
[INFO] [stderr] To /tmp/.tmprlZOLE/remote.git
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] test project::amendments::tests::missing_priority_deserializes_to_p2_by_default ... ok
[INFO] [stdout] test project::amendments::tests::re_enqueue_preserves_original_fields ... ok
[INFO] [stdout] test project::amendments::tests::re_enqueue_restores_items_to_queue ... ok
[INFO] [stdout] test project::amendments::tests::sanitize_id_replaces_unsupported_characters ... ok
[INFO] [stdout] test project::amendments::tests::temp_staging_files_are_ignored_by_drain_and_pending_count ... ok
[INFO] [stdout] [ralph/issue-42 cf65318] ralph(issue-42): loop 1 planning -> implementing
[INFO] [stdout] test project::artifacts::tests::final_review_artifact_kinds_render_expected_names_and_types ... ok
[INFO] [stdout] test project::artifacts::tests::qa_and_acceptance_artifact_kinds_render_expected_names_and_types ... ok
[INFO] [stdout] test project::artifacts::tests::resolve_artifact_path_by_suffix_prefers_latest_timestamped_file ... ok
[INFO] [stdout] test project::artifacts::tests::write_artifact_prefixes_filename_with_timestamp ... ok
[INFO] [stdout] test project::artifacts::tests::write_project_scoped_artifact_writes_project_frontmatter_schema ... ok
[INFO] [stdout] test project::lifecycle::tests::infer_phase_iteration_clamps_zero_based_pre_commit_failure ... ok
[INFO] [stdout] test project::lifecycle::tests::infer_reviewing_iteration_accounts_for_pre_commit_response ... ok
[INFO] [stdout] test project::lifecycle::tests::load_quick_dev_phase_ignores_malformed_state_json ... ok
[INFO] [stdout] test project::lifecycle::tests::load_quick_dev_phase_works_with_valid_state_json ... ok
[INFO] [stdout] test git::commit::tests::sync_project_branch_discards_local_only_checkpoint_and_position_reverts ... ok
[INFO] [stdout] [ralph/issue-42 cf65318] ralph(issue-42): loop 1 planning -> implementing
[INFO] [stdout] test git::ralph_commit::tests::no_checkpoint_defaults_to_loop_1_planning ... ok
[INFO] [stdout] test project::lifecycle::tests::parse_iteration_from_path_pre_commit_failure ... ok
[INFO] [stderr] To /tmp/.tmpRaGeQv/remote.git
[INFO] [stderr]  * [new branch]      ralph/issue-42 -> ralph/issue-42
[INFO] [stdout] branch 'ralph/issue-42' set up to track 'origin/ralph/issue-42'.
[INFO] [stderr] To /tmp/.tmpj7jBzs/remote.git
[INFO] [stderr]    0acdc1d..cf65318  HEAD -> ralph/issue-42
[INFO] [stderr] To /tmp/.tmpl7LsXc/remote.git
[INFO] [stderr]    0acdc1d..cf65318  HEAD -> ralph/issue-42
[INFO] [stderr] Switched to branch 'master'
[INFO] [stdout] Your branch is up to date with 'origin/master'.
[INFO] [stdout] Deleted branch ralph/issue-42 (was cf65318).
[INFO] [stdout] [ralph/issue-42 b3be19f] ralph(issue-42): loop 2 implementing -> reviewing
[INFO] [stderr] To /tmp/.tmprlZOLE/remote.git
[INFO] [stderr]    0acdc1d..cf65318  HEAD -> ralph/issue-42
[INFO] [stdout] test git::ralph_commit::tests::resolve_checkpoint_ref_uses_remote_when_only_remote_exists ... ok
[INFO] [stdout] [ralph/issue-42 b3be19f] ralph(issue-42): loop 2 implementing -> reviewing
[INFO] [stdout] test git::ralph_commit::tests::resolve_checkpoint_ref_prefers_local_when_ahead ... ok
[INFO] [stderr] To /tmp/.tmprlZOLE/remote.git
[INFO] [stderr]    cf65318..b3be19f  HEAD -> ralph/issue-42
[INFO] [stdout] HEAD is now at cf65318 ralph(issue-42): loop 1 planning -> implementing
[INFO] [stderr] To /tmp/.tmpK8rUIa/remote.git
[INFO] [stderr]    cf65318..2f0b3e8  HEAD -> ralph/issue-42
[INFO] [stdout] test project::lifecycle::tests::maybe_create_project_branch_is_idempotent_when_head_matches_target ... ok
[INFO] [stdout] [ralph/issue-42 aba59d9] ralph(issue-42): loop 2 implementing -> reviewing
[INFO] [stdout] test git::ralph_commit::tests::resolve_checkpoint_ref_prefers_remote_when_local_behind ... ok
[INFO] [stdout] test git::ralph_commit::tests::parse_last_ralph_commit_rejects_malformed_newest_checkpoint ... ok
[INFO] [stdout] test git::ralph_commit::tests::resolve_checkpoint_ref_returns_none_when_neither_exists ... ok
[INFO] [stderr] To /tmp/.tmpuGDsyX/remote.git
[INFO] [stderr]    cf65318..b3be19f  HEAD -> ralph/issue-42
[INFO] [stdout] HEAD is now at cf65318 ralph(issue-42): loop 1 planning -> implementing
[INFO] [stdout] test git::ralph_commit::tests::newest_valid_with_older_malformed_succeeds ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruction_invalidates_stale_approval_on_pending_pre_commit_failure ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruction_preserves_approval_when_pre_commit_failure_is_responded ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruction_project_override_takes_precedence_over_global ... ok
[INFO] [stdout] [ralph/issue-42 test project::lifecycle::tests::reconstruction_uses_global_completion_threshold_override ... ok
[INFO] [stdout] 52db734] ralph(issue-42): loop 2 implementing -> qa
[INFO] [stdout] test project::state::tests::final_review_requires_iteration_one ... ok
[INFO] [stdout] test project::state::tests::legacy_state_without_created_at_deserializes_to_sentinel ... ok
[INFO] [stdout] test project::state::tests::legacy_state_without_prompt_review_field_deserializes_to_false ... ok
[INFO] [stdout] test project::state::tests::legacy_state_without_quick_dev_phase_deserializes_to_none ... ok
[INFO] [stdout] test project::state::tests::legacy_state_without_session_store_deserializes_to_empty ... ok
[INFO] [stdout] test project::state::tests::new_state_defaults_prompt_review_completed_to_false ... ok
[INFO] [stdout] test project::state::tests::new_state_defaults_quick_dev_phase_to_none ... ok
[INFO] [stdout] test project::state::tests::new_state_initializes_empty_session_store ... ok
[INFO] [stdout] test project::state::tests::new_state_sets_created_at ... ok
[INFO] [stdout] test project::state::tests::remove_loop_clears_session_records ... ok
[INFO] [stdout] test project::state::tests::session_store_lookup_finds_matching_record ... ok
[INFO] [stdout] test project::state::tests::session_store_remove_for_loop_clears_matching_records ... ok
[INFO] [stderr] To /tmp/.tmpK8rUIa/remote.git
[INFO] [stdout] test project::state::tests::session_store_serde_roundtrip ... ok
[INFO] [stderr]    2f0b3e8..aba59d9  HEAD -> ralph/issue-42
[INFO] [stdout] test project::state::tests::session_store_upsert_replaces_existing_record ... ok
[INFO] [stdout] test project::state::tests::state_roundtrip_preserves_quick_dev_phase ... ok
[INFO] [stdout] test prompts::template_introspection::tests::load_template_source_reads_file_when_present ... ok
[INFO] [stdout] test git::ralph_commit::tests::parse_last_ralph_commit_reads_latest_remote_checkpoint ... ok
[INFO] [stdout] test prompts::template_introspection::tests::template_uses_var_detects_absent_placeholder ... ok
[INFO] [stdout] test prompts::template_introspection::tests::load_template_source_uses_fallback_when_missing ... ok
[INFO] [stdout] test prompts::template_introspection::tests::template_uses_var_detects_present_placeholder ... ok
[INFO] [stdout] test prompts::template_introspection::tests::template_uses_var_requires_exact_match ... ok
[INFO] [stdout] test prompts::template_introspection::tests::template_uses_var_returns_true_for_repeated_placeholders ... ok
[INFO] [stdout] test util::slug::tests::slugifies_per_convention ... ok
[INFO] [stdout] test util::slug::tests::truncates_slug ... ok
[INFO] [stdout] test project::lifecycle::tests::maybe_create_project_branch_still_errors_for_existing_non_head_branch ... ok
[INFO] [stdout] test validate::harness::tests::env_removal_preserves_non_removed_variables ... ok
[INFO] [stdout] test validate::tests_interactive_prd::parse_approved_spec_ignores_marker_inside_draft_body ... ok
[INFO] [stdout] test workflow::orchestrator::tests::bootstrap_hash_changes_on_backend_change ... ok
[INFO] [stdout] test workflow::orchestrator::tests::bootstrap_hash_changes_on_prompt_hash_change ... ok
[INFO] [stdout] test workflow::orchestrator::tests::bootstrap_hash_changes_on_role_change ... ok
[INFO] [stdout] test workflow::orchestrator::tests::bootstrap_hash_changes_on_spec_content_change ... ok
[INFO] [stdout] test workflow::orchestrator::tests::bootstrap_hash_changes_on_template_content_change ... ok
[INFO] [stdout] test workflow::orchestrator::tests::bootstrap_hash_includes_version_salt ... ok
[INFO] [stdout] test workflow::orchestrator::tests::bootstrap_hash_is_deterministic ... ok
[INFO] [stdout] test validate::harness::tests::env_removal_removes_variable_from_child ... ok
[INFO] [stdout] test workflow::orchestrator::tests::collect_history_returns_empty_when_cap_is_zero ... ok
[INFO] [stdout] test workflow::orchestrator::tests::collect_qa_history_caps_to_highest_two_non_sequential ... ok
[INFO] [stdout] test workflow::orchestrator::tests::collect_review_history_caps_to_highest_two_non_sequential ... ok
[INFO] [stdout] test workflow::orchestrator::tests::collect_review_history_caps_to_latest_three_sequential ... ok
[INFO] [stdout] test workflow::orchestrator::tests::consensus_insufficient_min_completers ... ok
[INFO] [stdout] test workflow::orchestrator::tests::consensus_partial_threshold_half ... ok
[INFO] [stdout] test workflow::orchestrator::tests::consensus_partial_threshold_three_quarters ... ok
[INFO] [stdout] test workflow::orchestrator::tests::consensus_partial_threshold_two_thirds ... ok
[INFO] [stdout] test workflow::orchestrator::tests::consensus_single_completer_continue ... ok
[INFO] [stdout] test workflow::orchestrator::tests::consensus_unanimity_one_missing ... ok
[INFO] [stdout] test workflow::orchestrator::tests::consensus_zero_total_completers ... ok
[INFO] [stdout] test workflow::orchestrator::tests::expected_format_template_for_implementer_response_defaults_to_1 ... ok
[INFO] [stdout] test workflow::orchestrator::tests::expected_format_template_for_implementer_response_substitutes_iteration ... ok
[INFO] [stdout] test workflow::orchestrator::tests::expected_format_template_for_other_roles_ignores_iteration ... ok
[INFO] [stdout] test workflow::orchestrator::tests::expected_format_template_for_qa_contains_pass_and_fail ... ok
[INFO] [stdout] test workflow::orchestrator::tests::history_included_when_resume_rewrite_fallback_uses_fresh_prompt ... ok
[INFO] [stdout] test workflow::orchestrator::tests::consensus_unanimity_all_complete ... ok
[INFO] [stdout] test workflow::orchestrator::tests::consensus_single_completer_complete ... ok
[INFO] [stdout] test workflow::orchestrator::tests::latest_completion_feedback_acceptance_failures_take_priority ... ok
[INFO] [stdout] test git::ralph_commit::tests::resolve_checkpoint_ref_prefers_local_when_diverged ... ok
[INFO] [stdout] test workflow::orchestrator::tests::latest_completion_feedback_none_when_verdict_complete ... ok
[INFO] [stdout] test workflow::orchestrator::tests::latest_completion_feedback_none_when_no_attempts ... ok
[INFO] [stdout] test workflow::orchestrator::tests::history_omitted_when_session_reused_and_config_disables_reused_history ... ok
[INFO] [stdout] test workflow::orchestrator::tests::max_backend_retries_accepts_five ... ok
[INFO] [stdout] test workflow::orchestrator::tests::max_backend_retries_accepts_one ... ok
[INFO] [stdout] test workflow::orchestrator::tests::latest_completion_feedback_returns_verdicts_on_continue ... ok
[INFO] [stdout] test workflow::orchestrator::tests::latest_completion_feedback_uses_latest_attempt ... ok
[INFO] [stdout] test workflow::orchestrator::tests::max_backend_retries_accepts_ten ... ok
[INFO] [stdout] test workflow::orchestrator::tests::max_backend_retries_clamps_eleven_to_ten ... ok
[INFO] [stdout] test workflow::orchestrator::tests::max_backend_retries_none_defaults_to_three ... ok
[INFO] [stdout] test workflow::orchestrator::tests::max_backend_retries_zero_defaults_to_three ... ok
[INFO] [stdout] test workflow::orchestrator::tests::planner_prompt_custom_template_without_master_placeholder_appends_once ... ok
[INFO] [stdout] test workflow::orchestrator::tests::parse_retry_attempts_are_three_without_session ... ok
[INFO] [stdout] test workflow::orchestrator::tests::planner_prompt_full_json_has_no_nested_code_fences ... ok
[INFO] [stdout] test workflow::orchestrator::tests::planner_prompt_includes_external_amendments_when_provided ... ok
[INFO] [stdout] test workflow::orchestrator::tests::planner_prompt_includes_final_review_amendments_when_file_exists ... ok
[INFO] [stdout] test workflow::orchestrator::tests::planner_prompt_default_template_has_single_master_prompt_section ... ok
[INFO] [stdout] test workflow::orchestrator::tests::parse_retry_attempts_four_with_session_followup_and_token_metrics ... ok
[INFO] [stdout] test workflow::orchestrator::tests::planner_prompt_omits_external_amendments_when_empty ... ok
[INFO] [stdout] test workflow::orchestrator::tests::planner_prompt_with_full_json_mode_includes_json ... ok
[INFO] [stdout] test workflow::orchestrator::tests::preload_role_model_backends_covers_all_roles_for_all_backends ... ok
[INFO] [stdout] test workflow::orchestrator::tests::preload_role_model_backends_creates_expected_entries_for_default_config ... ok
[INFO] [stdout] test workflow::orchestrator::tests::resolve_tmux_settings_falls_back_to_config ... ok
[INFO] [stdout] test workflow::orchestrator::tests::resolve_tmux_settings_prefers_cli_override ... ok
[INFO] [stdout] test workflow::orchestrator::tests::planner_prompt_with_summary_mode_excludes_full_json ... ok
[INFO] [stdout] test workflow::orchestrator::tests::preload_role_model_backends_is_noop_when_models_are_unset ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_specs_cap_limits_to_latest_n ... ok
[INFO] [stdout] test workflow::orchestrator::tests::response_rel_path_prefers_pre_commit_response_over_qa_response ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_specs_none_mode_returns_empty ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_specs_titles_mode_cap_zero_returns_empty ... ok
[INFO] [stdout] test workflow::orchestrator::tests::planner_prompt_omits_final_review_amendments_when_file_absent ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_specs_fulltext_mode_reads_spec_files ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_specs_titles_mode_produces_bullet_titles ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_state_includes_loop_metadata_excludes_feedback_body ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_state_cap_limits_to_latest_n ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_state_unlimited_includes_all ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_state_cap_zero_shows_none ... ok
[INFO] [stdout] test workflow::orchestrator::tests::summarize_state_verdict_deterministic_for_all_statuses ... ok
[INFO] [stdout] test workflow::orchestrator::tests::validate_tmux_preflight_checks_when_enabled_and_not_dry_run ... ok
[INFO] [stdout] test workflow::orchestrator::tests::validate_tmux_preflight_skips_check_for_dry_run ... ok
[INFO] [stdout] test workflow::parser::tests::arbiter_output_rejects_wrong_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::arbiter_output_rejects_missing_rationale ... ok
[INFO] [stdout] test workflow::parser::tests::arbiter_output_rejects_invalid_ruling ... ok
[INFO] [stdout] test workflow::parser::tests::arbiter_output_rejects_missing_ids ... ok
[INFO] [stdout] test workflow::parser::tests::codex_review_parser_rejects_wrong_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::codex_review_parser_rejects_missing_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::codex_review_parser_tolerates_leading_whitespace ... ok
[INFO] [stdout] test workflow::parser::tests::codex_review_parser_tolerates_trailing_whitespace ... ok
[INFO] [stdout] test workflow::parser::tests::codex_review_parser_strips_frontmatter ... ok
[INFO] [stdout] test workflow::parser::tests::extracts_commit_message_block ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_amendments_h1_but_no_blocks_fails ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_no_amendments_requires_summary ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_rejects_amendment_missing_affected_files ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_no_amendments ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_rejects_duplicate_amendment_ids ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_rejects_missing_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_rejects_amendment_missing_proposed_change ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_rejects_second_amendment_missing_subsection ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_rejects_amendment_missing_problem ... ok
[INFO] [stdout] test workflow::parser::tests::arbiter_output_success ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_rejects_wrong_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_strips_frontmatter ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_with_amendments ... ok
[INFO] [stdout] test workflow::parser::tests::final_reviewer_strips_priority_tags_from_amendment_ids ... ok
[INFO] [stdout] test workflow::parser::tests::parses_codex_review_changes_requested ... ok
[INFO] [stdout] test workflow::parser::tests::parses_codex_review_satisfied ... ok
[INFO] [stdout] test workflow::parser::tests::parses_completer_complete_verdict ... ok
[INFO] [stdout] test workflow::parser::tests::parses_completer_verdict ... ok
[INFO] [stdout] test workflow::parser::tests::parses_impl_notes ... ok
[INFO] [stdout] test workflow::parser::tests::parses_completion_heading ... ok
[INFO] [stdout] test workflow::parser::tests::parses_feature_heading ... ok
[INFO] [stdout] test workflow::parser::tests::parses_qa_pass ... ok
[INFO] [stdout] test workflow::parser::tests::parses_impl_response_iteration ... ok
[INFO] [stdout] test workflow::parser::tests::parses_quick_final_review_issues_found ... ok
[INFO] [stdout] test workflow::parser::tests::parses_review_approved ... ok
[INFO] [stdout] test workflow::parser::tests::parses_prompt_reviewer_output ... ok
[INFO] [stdout] test workflow::parser::tests::parses_qa_fail ... ok
[INFO] [stdout] test workflow::parser::tests::parses_review_suggestions ... ok
[INFO] [stdout] test workflow::parser::tests::planner_position_rejects_duplicate_ids ... ok
[INFO] [stdout] test workflow::parser::tests::planner_position_rejects_missing_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::planner_position_rejects_extra_id ... ok
[INFO] [stdout] test workflow::parser::tests::planner_position_rejects_invalid_value ... ok
[INFO] [stdout] test workflow::parser::tests::planner_position_rejects_missing_rationale ... ok
[INFO] [stdout] test workflow::parser::tests::planner_position_rejects_partial_rationale_coverage ... ok
[INFO] [stdout] test workflow::parser::tests::planner_position_success ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_review_validator_accepts_accept_verdict ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_review_validator_accepts_reject_verdict_with_reason ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_review_validator_rejects_empty_reason ... ok
[INFO] [stdout] test workflow::parser::tests::planner_position_rejects_missing_id ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_review_validator_rejects_unknown_verdict ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_reviewer_output_extracts_refined_prompt_to_eof_with_nested_headings ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_reviewer_output_rejects_empty_refined_prompt ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_reviewer_output_rejects_too_short_refined_prompt ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_reviewer_output_rejects_wrong_section_order ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_reviewer_output_requires_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_reviewer_output_requires_issues_found ... ok
[INFO] [stdout] test workflow::parser::tests::qa_parser_rejects_malformed_output ... ok
[INFO] [stdout] test workflow::parser::tests::prompt_reviewer_output_requires_refined_prompt_section ... ok
[INFO] [stdout] test workflow::parser::tests::parses_quick_final_review_complete ... ok
[INFO] [stdout] test workflow::parser::tests::qa_fail_requires_all_sections ... ok
[INFO] [stdout] test workflow::parser::tests::qa_parser_rejects_missing_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::qa_parser_strips_frontmatter ... ok
[INFO] [stdout] test workflow::parser::tests::qa_pass_requires_all_sections ... ok
[INFO] [stdout] test workflow::parser::tests::quick_final_review_parser_rejects_wrong_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::quick_final_review_parser_strips_frontmatter ... ok
[INFO] [stdout] test workflow::parser::tests::quick_final_review_parser_tolerates_leading_whitespace ... ok
[INFO] [stdout] test workflow::parser::tests::quick_final_review_parser_tolerates_trailing_whitespace ... ok
[INFO] [stdout] test workflow::parser::tests::strip_frontmatter_ignores_triple_dash_inside_content ... ok
[INFO] [stdout] test workflow::parser::tests::quick_final_review_parser_rejects_missing_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::strip_frontmatter_preserves_tilde_fences ... ok
[INFO] [stdout] test workflow::parser::tests::strip_frontmatter_removes_yaml_header ... ok
[INFO] [stdout] test workflow::parser::tests::strip_frontmatter_with_dash_fences_around_raw_output_corrupts_parse ... ok
[INFO] [stdout] test workflow::parser::tests::strip_trailing_priority_tag_cases ... ok
[INFO] [stdout] test workflow::parser::tests::vote_output_rejects_duplicate_ids ... ok
[INFO] [stdout] test workflow::parser::tests::vote_output_rejects_missing_h1 ... ok
[INFO] [stdout] test workflow::parser::tests::vote_output_rejects_missing_rationale ... ok
[INFO] [stdout] test workflow::parser::tests::vote_output_success ... ok
[INFO] [stdout] test workflow::pre_commit_checks::tests::all_checks_disabled_returns_passed ... ok
[INFO] [stdout] test workflow::pre_commit_checks::tests::error_converted_to_feedback_not_panic ... ok
[INFO] [stdout] test workflow::pre_commit_checks::tests::nix_build_runs_independently_of_cargo_toml ... ok
[INFO] [stdout] test workflow::pre_commit_checks::tests::no_cargo_toml_skips_cargo_checks ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::compute_phase_iteration_returns_correct_values ... ok
[INFO] [stdout] test workflow::parser::tests::vote_output_rejects_missing_ids ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::guard_at_entry_final_review_skips_when_at_limit ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::default_max_values ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::guard_at_entry_codex_review_skips_when_at_limit ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::persist_quick_dev_state_apply_fixes ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::persist_quick_dev_state_final_review ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::persist_quick_dev_state_plan_and_implement ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::persist_quick_dev_state_sets_fields_correctly ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::quick_dev_phase_display ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::quick_dev_phase_to_current_phase_mapping ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::resolve_implementer_backend_cli_override_takes_precedence ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::resolve_implementer_backend_effective_fallback ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::resolve_implementer_backend_starting_fallback ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::resolve_reviewer_backend_cli_override ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::resolve_reviewer_backend_effective_fallback ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::persist_destination_state_roundtrip ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::resolve_reviewer_backend_missing_fails_with_exact_message ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::resume_from_codex_review ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::resume_from_final_review ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::resume_from_none_starts_at_plan_and_implement ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::persist_destination_state_with_counters ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::validate_distinct_backends_accepts_different ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::validate_distinct_backends_rejects_equal ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::validate_distinct_backends_rejects_optional_prefix_equal ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::validate_distinct_backends_rejects_optional_prefix_with_model ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::validate_distinct_backends_rejects_whitespace_equal ... ok
[INFO] [stdout] test workflow::quick_dev_orchestrator::tests::save_state_to_disk_roundtrips ... ok
[INFO] [stdout] test workspace::active::tests::empty_or_whitespace_active_project_file_returns_none ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruct_ignores_absent_ceiling ... ok
[INFO] [stdout] test workspace::active::tests::missing_active_project_file_returns_none ... ok
[INFO] [stdout] test workspace::active::tests::invalid_active_project_file_returns_none ... ok
[INFO] [stdout] test workspace::active::tests::subprocess_helper_emits_empty_active_project_warning ... ignored
[INFO] [stdout] test workspace::summary::tests::completed_at_is_none_for_non_completed_projects ... ok
[INFO] [stdout] test workspace::summary::tests::legacy_state_uses_now_when_prompt_metadata_is_unavailable ... ok
[INFO] [stdout] test workspace::active::tests::empty_or_whitespace_active_project_file_emits_warning ... ok
[INFO] [stdout] test workspace::summary::tests::legacy_state_without_created_at_falls_back_to_prompt_file_mtime ... ok
[INFO] [stdout] test workspace::active::tests::read_write_roundtrip_non_git_workspace ... ok
[INFO] [stdout] test workspace::summary::tests::summarizes_project_from_state ... ok
[INFO] [stdout] test workspace::tests::list_projects_returns_empty_for_empty_projects_dir ... ok
[INFO] [stdout] test workspace::tests::list_projects_scans_and_sorts_by_project_id ... ok
[INFO] [stdout] test workspace::tests::load_project_summary_returns_not_found_for_missing_project ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruct_ceiling_stale_checkpoint_equals_max_artifact ... ok
[INFO] [stdout] test workspace::tests::load_project_summary_returns_summary_for_existing_project ... ok
[INFO] [stdout] test workspace::tests::project_exists_checks_for_prompt_file ... ok
[INFO] [stdout] test workspace::tests::set_active_project_rejects_missing_project ... ok
[INFO] [stdout] test workspace::tests::active_project_set_and_read_roundtrip ... ok
[INFO] [stdout] test workspace::tests::list_projects_skips_non_dirs_and_missing_prompt ... ok
[INFO] [stdout] test workflow::pre_commit_checks::tests::feedback_aggregation_includes_section_headers ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruct_ceiling_inert_after_new_checkpoint ... ok
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpEe8QnD/.git/
[INFO] [stdout] test workspace::active::tests::read_write_roundtrip_git_workspace ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruct_ceiling_enforced_with_artifacts_past_ceiling ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruct_respects_rollback_ceiling ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruct_ceiling_zero ... ok
[INFO] [stdout] test project::lifecycle::tests::reconstruct_stale_ceiling_ignored ... ok
[INFO] [stdout] test backend::tests::kill_and_reap_child_sends_sigterm_then_sigkill_after_grace ... ok
[INFO] [stdout] test backend::tests::cli_backend_stall_after_partial_output_times_out_idle ... FAILED
[INFO] [stdout] test backend::tests::cli_backend_timeout_kills_and_reaps_child_and_writes_footer ... FAILED
[INFO] [stdout] test backend::tests::kill_and_reap_child_kills_descendants_that_survive_leader ... ok
[INFO] [stdout] test backend::tests::nonzero_exit_with_detached_child_kills_process_group ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- backend::tests::cli_backend_stall_after_partial_output_times_out_idle stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'backend::tests::cli_backend_stall_after_partial_output_times_out_idle' (78) panicked at src/backend/mod.rs:2340:9:
[INFO] [stdout] timeout should fire near idle threshold, not after full sleep; elapsed=5.255747228s
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x60a23b56efc2 - std::backtrace_rs::backtrace::libunwind::trace::hff358a60abf734fc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x60a23b56efc2 - std::backtrace_rs::backtrace::trace_unsynchronized::h3b121f916dd95ec6
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x60a23b56efc2 - std::sys::backtrace::_print_fmt::hde0a62ded68798e9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x60a23b56efc2 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h93773fc827e3113d
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x60a23b581a0a - core::fmt::rt::Argument::fmt::h01eff69902dad97f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x60a23b581a0a - core::fmt::write::hed7b5c73d82ecb7c
[INFO] [stdout]    6:     0x60a23b537d46 - std::io::default_write_fmt::h2f696ff5b8bbaa4b
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x60a23b537d46 - std::io::Write::write_fmt::h5e66814db8a9cfce
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x60a23b54c369 - std::sys::backtrace::BacktraceLock::print::h8b1d6fcc5a56d1a3
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x60a23b54c369 - std::panicking::default_hook::{{closure}}::h2be84df4f189ae36
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x60a23b54c201 - std::panicking::default_hook::hf0ea8939246f43a9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x60a23ae3c13e - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h02d35e3888986252
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   12:     0x60a23ae3c13e - test::test_main_with_exit_callback::{{closure}}::h939640a27d647173
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x60a23b54c692 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hc9df09ff391af3e7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   14:     0x60a23b54c692 - std::panicking::panic_with_hook::hb4bd9ac1123582a0
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x60a23b54c428 - std::panicking::panic_handler::{{closure}}::hde00dd15f5637fe2
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:698:13
[INFO] [stdout]   16:     0x60a23b546619 - std::sys::backtrace::__rust_end_short_backtrace::hb72197fa777c1785
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x60a23b52b1dd - __rustc[4425a7e20b4c8619]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x60a23b58b65c - core::panicking::panic_fmt::ha59b517dd231f4da
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x60a23ace9a9b - ralph::backend::tests::cli_backend_stall_after_partial_output_times_out_idle::{{closure}}::h44799a3ec7830002
[INFO] [stdout]                                at /opt/rustwide/workdir/src/backend/mod.rs:2340:9
[INFO] [stdout]   20:     0x60a23aa17d12 - <core::pin::Pin<P> as core::future::future::Future>::poll::h06619600e469ebe8
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/future/future.rs:133:9
[INFO] [stdout]   21:     0x60a23aa1808d - <core::pin::Pin<P> as core::future::future::Future>::poll::h3a01a717f7727b36
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/future/future.rs:133:9
[INFO] [stdout]   22:     0x60a23ac9edad - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}::hfe768d3df7aeb436
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:753:70
[INFO] [stdout]   23:     0x60a23ac9dc4b - tokio::task::coop::with_budget::h985f5f8d1eeaad3d
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/task/coop/mod.rs:167:5
[INFO] [stdout]   24:     0x60a23ac9dc4b - tokio::task::coop::budget::ha0fb63228381cd97
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/task/coop/mod.rs:133:5
[INFO] [stdout]   25:     0x60a23ac9dc4b - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::h426dfa97d13d1f43
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:753:25
[INFO] [stdout]   26:     0x60a23ac8b2c0 - tokio::runtime::scheduler::current_thread::Context::enter::h55245055335f7263
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:442:19
[INFO] [stdout]   27:     0x60a23ac9530d - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h375643cae3ae4832
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:752:44
[INFO] [stdout]   28:     0x60a23ac948b4 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::hcd157943772f94c2
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:840:68
[INFO] [stdout]   29:     0x60a23a5b2acb - tokio::runtime::context::scoped::Scoped<T>::set::h9c86d9e3c2da26f6
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context/scoped.rs:40:9
[INFO] [stdout]   30:     0x60a23ac4cd89 - tokio::runtime::context::set_scheduler::{{closure}}::h342ee357dd431901
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context.rs:176:38
[INFO] [stdout]   31:     0x60a23a859c62 - std::thread::local::LocalKey<T>::try_with::hf6c0d903e736e11e
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/local.rs:513:12
[INFO] [stdout]   32:     0x60a23a84f6ce - std::thread::local::LocalKey<T>::with::h46875c07d4b2560b
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/local.rs:477:20
[INFO] [stdout]   33:     0x60a23ac4ca5d - tokio::runtime::context::set_scheduler::h8fe03672209b4f11
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context.rs:176:17
[INFO] [stdout]   34:     0x60a23ac937e0 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h99abba8a2f77e460
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:840:27
[INFO] [stdout]   35:     0x60a23ac94ef6 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::ha3d48a234536dd99
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:740:24
[INFO] [stdout]   36:     0x60a23ac81e60 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::hc36e54106cb40a4e
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:200:33
[INFO] [stdout]   37:     0x60a23a877d63 - tokio::runtime::context::runtime::enter_runtime::h17e5a9ebc38fd67a
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context/runtime.rs:65:16
[INFO] [stdout]   38:     0x60a23ac7eda1 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::h6183cff25a72ada1
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:188:9
[INFO] [stdout]   39:     0x60a23ac7d624 - tokio::runtime::runtime::Runtime::block_on_inner::hba7b7fbd08c8b256
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/runtime.rs:368:52
[INFO] [stdout]   40:     0x60a23ac7df5c - tokio::runtime::runtime::Runtime::block_on::h780f3f4c4f23f7c3
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/runtime.rs:342:18
[INFO] [stdout]   41:     0x60a23ace90f7 - ralph::backend::tests::cli_backend_stall_after_partial_output_times_out_idle::h38ee7798eb4911b8
[INFO] [stdout]                                at /opt/rustwide/workdir/src/backend/mod.rs:2365:10
[INFO] [stdout]   42:     0x60a23ace9197 - ralph::backend::tests::cli_backend_stall_after_partial_output_times_out_idle::{{closure}}::h00910afbb895b470
[INFO] [stdout]                                at /opt/rustwide/workdir/src/backend/mod.rs:2314:69
[INFO] [stdout]   43:     0x60a23a7ee1d6 - core::ops::function::FnOnce::call_once::ha15aabf4cf27a897
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   44:     0x60a23ae3befb - core::ops::function::FnOnce::call_once::hddb3cd395c36bfbb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   45:     0x60a23ae3befb - test::__rust_begin_short_backtrace::h0b6a7601d9750bfa
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:663:18
[INFO] [stdout]   46:     0x60a23ae4f90a - test::run_test_in_process::{{closure}}::h444209903f00b347
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:74
[INFO] [stdout]   47:     0x60a23ae4f90a - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hfb3ba8f46e537649
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   48:     0x60a23ae4f90a - std::panicking::catch_unwind::do_call::h1672a45911fcf9dc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   49:     0x60a23ae4f90a - std::panicking::catch_unwind::h0fadaee22787a6dd
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   50:     0x60a23ae4f90a - std::panic::catch_unwind::hc47ad190f2c8e188
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   51:     0x60a23ae4f90a - test::run_test_in_process::hcd7faaf934f29999
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:27
[INFO] [stdout]   52:     0x60a23ae4f90a - test::run_test::{{closure}}::hddc4550da4871867
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:607:43
[INFO] [stdout]   53:     0x60a23ae29d64 - test::run_test::{{closure}}::h98ae26689f13ed94
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:637:41
[INFO] [stdout]   54:     0x60a23ae29d64 - std::sys::backtrace::__rust_begin_short_backtrace::h3ec4d1f21ad44588
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   55:     0x60a23ae2d702 - std::thread::lifecycle::spawn_unchecked::{{closure}}::{{closure}}::hd8bf2c73d479939f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   56:     0x60a23ae2d702 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h3b4248f358af2491
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   57:     0x60a23ae2d702 - std::panicking::catch_unwind::do_call::hda10a64f4b8daebe
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   58:     0x60a23ae2d702 - std::panicking::catch_unwind::h659e5ee8336ec8c7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   59:     0x60a23ae2d702 - std::panic::catch_unwind::h9d4d66a538912c18
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   60:     0x60a23ae2d702 - std::thread::lifecycle::spawn_unchecked::{{closure}}::h7557906bb51d79f1
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   61:     0x60a23ae2d702 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h9e460d1d7fc83d35
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   62:     0x60a23b540f3f - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h61282da819d64ea9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2206:9
[INFO] [stdout]   63:     0x60a23b540f3f - std::sys::thread::unix::Thread::new::thread_start::h982f9ea829d1b5fb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/thread/unix.rs:127:17
[INFO] [stdout]   64:     0x7250e95cdaa4 - <unknown>
[INFO] [stdout]   65:     0x7250e965aa64 - clone
[INFO] [stdout]   66:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- backend::tests::cli_backend_timeout_kills_and_reaps_child_and_writes_footer stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'backend::tests::cli_backend_timeout_kills_and_reaps_child_and_writes_footer' (81) panicked at src/backend/mod.rs:1787:9:
[INFO] [stdout] timeout should fire near idle threshold, not after full sleep; elapsed=5.363121479s
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x60a23b56efc2 - std::backtrace_rs::backtrace::libunwind::trace::hff358a60abf734fc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x60a23b56efc2 - std::backtrace_rs::backtrace::trace_unsynchronized::h3b121f916dd95ec6
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x60a23b56efc2 - std::sys::backtrace::_print_fmt::hde0a62ded68798e9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x60a23b56efc2 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h93773fc827e3113d
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x60a23b581a0a - core::fmt::rt::Argument::fmt::h01eff69902dad97f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x60a23b581a0a - core::fmt::write::hed7b5c73d82ecb7c
[INFO] [stdout]    6:     0x60a23b537d46 - std::io::default_write_fmt::h2f696ff5b8bbaa4b
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x60a23b537d46 - std::io::Write::write_fmt::h5e66814db8a9cfce
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x60a23b54c369 - std::sys::backtrace::BacktraceLock::print::h8b1d6fcc5a56d1a3
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x60a23b54c369 - std::panicking::default_hook::{{closure}}::h2be84df4f189ae36
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x60a23b54c201 - std::panicking::default_hook::hf0ea8939246f43a9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x60a23ae3c13e - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h02d35e3888986252
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   12:     0x60a23ae3c13e - test::test_main_with_exit_callback::{{closure}}::h939640a27d647173
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x60a23b54c692 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hc9df09ff391af3e7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
[INFO] [stdout]   14:     0x60a23b54c692 - std::panicking::panic_with_hook::hb4bd9ac1123582a0
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x60a23b54c428 - std::panicking::panic_handler::{{closure}}::hde00dd15f5637fe2
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:698:13
[INFO] [stdout]   16:     0x60a23b546619 - std::sys::backtrace::__rust_end_short_backtrace::hb72197fa777c1785
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x60a23b52b1dd - __rustc[4425a7e20b4c8619]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x60a23b58b65c - core::panicking::panic_fmt::ha59b517dd231f4da
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x60a23acf025f - ralph::backend::tests::cli_backend_timeout_kills_and_reaps_child_and_writes_footer::{{closure}}::hbad4c59009b7c418
[INFO] [stdout]                                at /opt/rustwide/workdir/src/backend/mod.rs:1787:9
[INFO] [stdout]   20:     0x60a23aa17d12 - <core::pin::Pin<P> as core::future::future::Future>::poll::h06619600e469ebe8
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/future/future.rs:133:9
[INFO] [stdout]   21:     0x60a23aa1808d - <core::pin::Pin<P> as core::future::future::Future>::poll::h3a01a717f7727b36
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/future/future.rs:133:9
[INFO] [stdout]   22:     0x60a23ac9edad - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}::hfe768d3df7aeb436
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:753:70
[INFO] [stdout]   23:     0x60a23ac9dc4b - tokio::task::coop::with_budget::h985f5f8d1eeaad3d
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/task/coop/mod.rs:167:5
[INFO] [stdout]   24:     0x60a23ac9dc4b - tokio::task::coop::budget::ha0fb63228381cd97
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/task/coop/mod.rs:133:5
[INFO] [stdout]   25:     0x60a23ac9dc4b - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::h426dfa97d13d1f43
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:753:25
[INFO] [stdout]   26:     0x60a23ac8b2c0 - tokio::runtime::scheduler::current_thread::Context::enter::h55245055335f7263
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:442:19
[INFO] [stdout]   27:     0x60a23ac9530d - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h375643cae3ae4832
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:752:44
[INFO] [stdout]   28:     0x60a23ac948b4 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::hcd157943772f94c2
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:840:68
[INFO] [stdout]   29:     0x60a23a5b2acb - tokio::runtime::context::scoped::Scoped<T>::set::h9c86d9e3c2da26f6
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context/scoped.rs:40:9
[INFO] [stdout]   30:     0x60a23ac4cd89 - tokio::runtime::context::set_scheduler::{{closure}}::h342ee357dd431901
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context.rs:176:38
[INFO] [stdout]   31:     0x60a23a859c62 - std::thread::local::LocalKey<T>::try_with::hf6c0d903e736e11e
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/local.rs:513:12
[INFO] [stdout]   32:     0x60a23a84f6ce - std::thread::local::LocalKey<T>::with::h46875c07d4b2560b
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/local.rs:477:20
[INFO] [stdout]   33:     0x60a23ac4ca5d - tokio::runtime::context::set_scheduler::h8fe03672209b4f11
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context.rs:176:17
[INFO] [stdout]   34:     0x60a23ac937e0 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h99abba8a2f77e460
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:840:27
[INFO] [stdout]   35:     0x60a23ac94ef6 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::ha3d48a234536dd99
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:740:24
[INFO] [stdout]   36:     0x60a23ac81e60 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::hc36e54106cb40a4e
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:200:33
[INFO] [stdout]   37:     0x60a23a877d63 - tokio::runtime::context::runtime::enter_runtime::h17e5a9ebc38fd67a
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/context/runtime.rs:65:16
[INFO] [stdout]   38:     0x60a23ac7eda1 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::h6183cff25a72ada1
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/scheduler/current_thread/mod.rs:188:9
[INFO] [stdout]   39:     0x60a23ac7d624 - tokio::runtime::runtime::Runtime::block_on_inner::hba7b7fbd08c8b256
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/runtime.rs:368:52
[INFO] [stdout]   40:     0x60a23ac7df5c - tokio::runtime::runtime::Runtime::block_on::h780f3f4c4f23f7c3
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.49.0/src/runtime/runtime.rs:342:18
[INFO] [stdout]   41:     0x60a23acef697 - ralph::backend::tests::cli_backend_timeout_kills_and_reaps_child_and_writes_footer::h21e655a21e50d6cc
[INFO] [stdout]                                at /opt/rustwide/workdir/src/backend/mod.rs:1820:76
[INFO] [stdout]   42:     0x60a23acef737 - ralph::backend::tests::cli_backend_timeout_kills_and_reaps_child_and_writes_footer::{{closure}}::h7cffb90aafa4be6b
[INFO] [stdout]                                at /opt/rustwide/workdir/src/backend/mod.rs:1754:75
[INFO] [stdout]   43:     0x60a23a7ee026 - core::ops::function::FnOnce::call_once::ha0350dabd21c89b8
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   44:     0x60a23ae3befb - core::ops::function::FnOnce::call_once::hddb3cd395c36bfbb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   45:     0x60a23ae3befb - test::__rust_begin_short_backtrace::h0b6a7601d9750bfa
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:663:18
[INFO] [stdout]   46:     0x60a23ae4f90a - test::run_test_in_process::{{closure}}::h444209903f00b347
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:74
[INFO] [stdout]   47:     0x60a23ae4f90a - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hfb3ba8f46e537649
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   48:     0x60a23ae4f90a - std::panicking::catch_unwind::do_call::h1672a45911fcf9dc
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   49:     0x60a23ae4f90a - std::panicking::catch_unwind::h0fadaee22787a6dd
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   50:     0x60a23ae4f90a - std::panic::catch_unwind::hc47ad190f2c8e188
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   51:     0x60a23ae4f90a - test::run_test_in_process::hcd7faaf934f29999
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:27
[INFO] [stdout]   52:     0x60a23ae4f90a - test::run_test::{{closure}}::hddc4550da4871867
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:607:43
[INFO] [stdout]   53:     0x60a23ae29d64 - test::run_test::{{closure}}::h98ae26689f13ed94
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:637:41
[INFO] [stdout]   54:     0x60a23ae29d64 - std::sys::backtrace::__rust_begin_short_backtrace::h3ec4d1f21ad44588
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   55:     0x60a23ae2d702 - std::thread::lifecycle::spawn_unchecked::{{closure}}::{{closure}}::hd8bf2c73d479939f
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   56:     0x60a23ae2d702 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h3b4248f358af2491
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   57:     0x60a23ae2d702 - std::panicking::catch_unwind::do_call::hda10a64f4b8daebe
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
[INFO] [stdout]   58:     0x60a23ae2d702 - std::panicking::catch_unwind::h659e5ee8336ec8c7
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
[INFO] [stdout]   59:     0x60a23ae2d702 - std::panic::catch_unwind::h9d4d66a538912c18
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
[INFO] [stdout]   60:     0x60a23ae2d702 - std::thread::lifecycle::spawn_unchecked::{{closure}}::h7557906bb51d79f1
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   61:     0x60a23ae2d702 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h9e460d1d7fc83d35
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   62:     0x60a23b540f3f - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h61282da819d64ea9
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2206:9
[INFO] [stdout]   63:     0x60a23b540f3f - std::sys::thread::unix::Thread::new::thread_start::h982f9ea829d1b5fb
[INFO] [stdout]                                at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/thread/unix.rs:127:17
[INFO] [stdout]   64:     0x7250e95cdaa4 - <unknown>
[INFO] [stdout]   65:     0x7250e965aa64 - clone
[INFO] [stdout]   66:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     backend::tests::cli_backend_stall_after_partial_output_times_out_idle
[INFO] [stdout]     backend::tests::cli_backend_timeout_kills_and_reaps_child_and_writes_footer
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 1034 passed; 2 failed; 1 ignored; 0 measured; 0 filtered out; finished in 15.36s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--lib`
[INFO] running `Command { std: "docker" "inspect" "85193a93c1fe1ae4fd1f76b6ecb4ecf8e7334edc80df41695cb32756a35c63ee", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "85193a93c1fe1ae4fd1f76b6ecb4ecf8e7334edc80df41695cb32756a35c63ee", kill_on_drop: false }`
[INFO] [stdout] 85193a93c1fe1ae4fd1f76b6ecb4ecf8e7334edc80df41695cb32756a35c63ee
