[INFO] cloning repository https://github.com/Studio-Sasquatch/ralph [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Studio-Sasquatch/ralph" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FStudio-Sasquatch%2Fralph", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FStudio-Sasquatch%2Fralph'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 0f6214be6aabd1b993fa8872f0b9876470098e71 [INFO] testing Studio-Sasquatch/ralph against try#0abe69e6c16114311cc2700e972492e64d69c28f for pr-154065 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FStudio-Sasquatch%2Fralph" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Studio-Sasquatch/ralph [INFO] removed 0 missing examples [INFO] removed 0 missing tests [INFO] finished tweaking git repo https://github.com/Studio-Sasquatch/ralph [INFO] tweaked toml for git repo https://github.com/Studio-Sasquatch/ralph written to /workspace/builds/worker-4-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Studio-Sasquatch/ralph on toolchain 0abe69e6c16114311cc2700e972492e64d69c28f [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/Studio-Sasquatch/ralph 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" "+0abe69e6c16114311cc2700e972492e64d69c28f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/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" "+0abe69e6c16114311cc2700e972492e64d69c28f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be [INFO] running `Command { std: "docker" "start" "-a" "f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be", kill_on_drop: false }` [INFO] [stdout] f4b7150a7aca1cee137b577120800b27db0c7cde7be0b4b0a32b7e1262c396be [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829 [INFO] running `Command { std: "docker" "start" "-a" "4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829", kill_on_drop: false }` [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling zerocopy v0.8.39 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling ref-cast v1.0.25 [INFO] [stderr] Compiling shlex v1.3.0 [INFO] [stderr] Compiling futures-io v0.3.32 [INFO] [stderr] Compiling concurrent-queue v2.5.0 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling ref-cast-impl v1.0.25 [INFO] [stderr] Compiling serde_derive_internals v0.29.1 [INFO] [stderr] Compiling futures-macro v0.3.32 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling futures-channel v0.3.32 [INFO] [stderr] Compiling once_cell v1.21.3 [INFO] [stderr] Compiling slab v0.4.12 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Compiling event-listener v5.4.1 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Compiling itertools v0.13.0 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling hashbrown v0.15.5 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling event-listener-strategy v0.5.4 [INFO] [stderr] Compiling castaway v0.2.4 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling toml_write v0.1.2 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Compiling schemars_derive v1.2.1 [INFO] [stderr] Compiling winnow v0.7.14 [INFO] [stderr] Compiling lru v0.12.5 [INFO] [stderr] Compiling clap_builder v4.5.60 [INFO] [stderr] Compiling compact_str v0.8.1 [INFO] [stderr] Compiling tokio v1.49.0 [INFO] [stderr] Compiling crossterm v0.28.1 [INFO] [stderr] Compiling libsqlite3-sys v0.30.1 [INFO] [stderr] Compiling async-broadcast v0.7.2 [INFO] [stderr] Compiling unicode-truncate v1.1.0 [INFO] [stderr] Compiling derive_more v2.1.1 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Compiling cassowary v0.3.0 [INFO] [stderr] Compiling strum v0.26.3 [INFO] [stderr] Compiling unicode-width v0.2.0 [INFO] [stderr] Compiling colored v2.2.0 [INFO] [stderr] Compiling strum v0.27.2 [INFO] [stderr] Compiling chrono v0.4.43 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling futures-executor v0.3.32 [INFO] [stderr] Compiling ratatui v0.29.0 [INFO] [stderr] Compiling futures v0.3.32 [INFO] [stderr] Compiling schemars v1.2.1 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling clap v4.5.60 [INFO] [stderr] Compiling agent-client-protocol-schema v0.10.8 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Compiling hashlink v0.9.1 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling agent-client-protocol v0.9.4 [INFO] [stderr] Compiling rusqlite v0.32.1 [INFO] [stderr] Compiling ralph v0.8.1 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 55.82s [INFO] running `Command { std: "docker" "inspect" "4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829", kill_on_drop: false }` [INFO] [stdout] 4b6b686895678011e743eafe9423e49f4b004a1c4a78a4433f99617871b1e829 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f [INFO] running `Command { std: "docker" "start" "-a" "5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f", kill_on_drop: false }` [INFO] [stderr] Compiling once_cell v1.21.3 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Compiling hashlink v0.9.1 [INFO] [stderr] Compiling rusqlite v0.32.1 [INFO] [stderr] Compiling tempfile v3.25.0 [INFO] [stderr] Compiling ralph v0.8.1 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 22.17s [INFO] running `Command { std: "docker" "inspect" "5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f", kill_on_drop: false }` [INFO] [stdout] 5d117fbfc390558aad16e0199f5edb270d27a0ac345ec7653cdcfeb4cbf6366f [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0 [INFO] running `Command { std: "docker" "start" "-a" "9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.29s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/ralph-a15548a3c0d7530a) [INFO] [stdout] [INFO] [stdout] running 522 tests [INFO] [stdout] test acp::client_impl::tests::test_allowed_write_paths_permits_listed_file ... ok [INFO] [stdout] test acp::client_impl::tests::test_allowed_write_paths_rejects_unlisted_file ... ok [INFO] [stdout] test acp::client_impl::tests::test_no_write_path_restriction_allows_any ... ok [INFO] [stdout] test acp::client_impl::tests::test_kill_terminal ... ok [INFO] [stdout] test acp::client_impl::tests::test_request_permission_auto_approve ... ok [INFO] [stdout] test acp::client_impl::tests::test_read_text_file_nonexistent ... ok [INFO] [stdout] test acp::client_impl::tests::test_read_text_file_with_line_limit ... ok [INFO] [stdout] test acp::client_impl::tests::test_request_permission_read_only_approves_reads ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_basic ... ok [INFO] [stdout] test acp::client_impl::tests::test_read_text_file_basic ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_auth_expired ... ok [INFO] [stdout] test acp::client_impl::tests::test_take_accumulated_text ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_authentication_required ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_not_authenticated ... ok [INFO] [stdout] test acp::client_impl::tests::test_take_files_modified ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_read_only_rejected ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_tracks_nested_relative ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_parent_traversal_rejected ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_tracks_modified ... ok [INFO] [stdout] test acp::client_impl::tests::test_request_permission_read_only_denies_writes ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_outside_project_rejected ... ok [INFO] [stdout] test acp::connection::tests::test_no_model_override_uses_default ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_creates_parents ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_returns_none_for_generic_failure ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_returns_none_for_unrelated_errors ... ok [INFO] [stdout] test acp::connection::tests::test_autonomous_prompt_concatenation ... ok [INFO] [stdout] test acp::client_impl::tests::test_terminal_not_found_returns_error ... ok [INFO] [stdout] test acp::connection::tests::test_model_override_takes_precedence ... ok [INFO] [stdout] test acp::connection::tests::test_parse_command_with_double_quoted_args ... ok [INFO] [stdout] test acp::client_impl::tests::test_read_text_file_outside_project_rejected ... ok [INFO] [stdout] test acp::connection::tests::test_parse_simple_command ... ok [INFO] [stdout] test acp::connection::tests::test_parse_command_with_quoted_args ... ok [INFO] [stdout] test acp::connection::tests::test_stop_reason_cancelled_maps_to_interrupted ... ok [INFO] [stdout] test acp::connection::tests::test_ralph_model_env_var_key ... ok [INFO] [stdout] test acp::connection::tests::test_stop_reason_end_turn_is_completed ... ok [INFO] [stdout] test acp::connection::tests::test_stop_reason_max_tokens_is_not_end_turn ... ok [INFO] [stdout] test acp::connection::tests::test_stop_reason_refusal_is_not_end_turn ... ok [INFO] [stdout] test acp::connection::tests::test_parse_malformed_command_returns_error ... ok [INFO] [stdout] test acp::interactive::tests::test_run_streaming_is_async ... ok [INFO] [stdout] test acp::interactive::tests::test_poll_interrupt_is_async ... ok [INFO] [stdout] test acp::connection::tests::test_parse_command_with_args ... ok [INFO] [stdout] test acp::interactive::tests::test_run_interactive_is_async ... ok [INFO] [stdout] test acp::connection::tests::test_parse_empty_command_returns_error ... ok [INFO] [stdout] test acp::interactive::tests::test_first_prompt_concatenation ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_all_three_model_names ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_sonnet_example ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_completion_sigils ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_haiku_example ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_opus_example ... ok [INFO] [stdout] test acp::interactive::tests::test_multiline_result_variants_exist ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_tag ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_one_task_per_loop ... ok [INFO] [stdout] test acp::prompt::tests::task_context_no_blockers_omits_prerequisites_section ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_task_sigils ... ok [INFO] [stdout] test acp::prompt::tests::task_context_no_parent_omits_parent_section ... ok [INFO] [stdout] test acp::prompt::tests::test_iteration_context_fields_no_skills_summary ... ok [INFO] [stdout] test acp::prompt::tests::task_context_with_two_blockers ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_no_progress_file_references ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_journal ... ok [INFO] [stdout] test acp::prompt::tests::task_context_verbatim_fields ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_journal_when_empty ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_knowledge ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_learning_section ... ok [INFO] [stdout] test acp::sigils::tests::both_task_sigils_task_done_wins ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_knowledge_when_empty ... ok [INFO] [stdout] test acp::client_impl::tests::test_release_terminal_removes_from_map ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_memory_instructions ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_absent_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_alongside_complete_sigil ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_empty_model_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_empty_text_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_haiku ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_first_occurrence_wins ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_invalid_model_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_malformed_no_closing_tag_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_malformed_no_opening_tag_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_opus ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_sonnet ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_with_whitespace_inside_tags ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_absent ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_build ... ok [INFO] [stdout] test acp::prompt::tests::task_context_with_all_fields ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_empty ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_invalid_phase ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_malformed_no_closing ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_plan ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_spec ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_with_whitespace ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_basic ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_no_sigil ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_malformed_no_closing_tag ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_with_whitespace_inside_tags ... ok [INFO] [stdout] test acp::sigils::tests::parse_tasks_created_absent ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_with_context ... ok [INFO] [stdout] test acp::sigils::tests::parse_tasks_created_self_closing ... ok [INFO] [stdout] test acp::sigils::tests::parse_tasks_created_with_closing_tag ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_empty_content ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_basic ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_with_whitespace_inside_tags ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_empty_content ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_no_sigil ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_with_context ... ok [INFO] [stdout] test acp::sigils::tests::result_event_default_has_no_hint ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_malformed_no_closing_tag ... ok [INFO] [stdout] test acp::sigils::tests::parse_tasks_created_self_closing_with_space ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_attribute ... ok [INFO] [stdout] test acp::sigils::tests::result_event_with_hint ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_both ... ok [INFO] [stdout] test acp::sigils::tests::task_sigil_with_model_hint ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_attribute_empty_value ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_none ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_attribute_missing ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_phase_complete ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_attributes_reversed_order ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_tasks_created ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_absent ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_missing_tags ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_empty ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_multiline ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_tags_normalized ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_sigils_none_present ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_whitespace_only ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_with_context ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigils_multiple ... ok [INFO] [stdout] test acp::streaming::tests::test_code_block_no_inline_formatting ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_sigils_partial ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_empty_body ... ok [INFO] [stdout] test acp::streaming::tests::test_code_block_toggle ... ok [INFO] [stdout] test acp::streaming::tests::test_empty_line ... ok [INFO] [stdout] test acp::streaming::tests::test_heading_h1_is_bold ... ok [INFO] [stdout] test acp::streaming::tests::test_heading_h3_is_bold ... ok [INFO] [stdout] test acp::streaming::tests::test_inline_bold ... ok [INFO] [stdout] test acp::streaming::tests::test_heading_h2_is_bold ... ok [INFO] [stdout] test acp::streaming::tests::test_inline_code ... ok [INFO] [stdout] test acp::streaming::tests::test_shorten_short_path ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_bash_command ... ok [INFO] [stdout] test acp::streaming::tests::test_shorten_just_filename ... ok [INFO] [stdout] test acp::streaming::tests::test_plain_text_unchanged ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_edit_from_input ... ok [INFO] [stdout] test acp::streaming::tests::test_shorten_deep_path ... ok [INFO] [stdout] test acp::streaming::tests::test_mixed_inline ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_empty_input ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_from_locations ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_grep_pattern ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_read_from_input ... ok [INFO] [stdout] test acp::streaming::tests::test_truncate_long ... ok [INFO] [stdout] test acp::streaming::tests::test_truncate_multiline ... ok [INFO] [stdout] test acp::streaming::tests::test_inline_italic ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_sigils_all_present ... ok [INFO] [stdout] test acp::streaming::tests::test_unclosed_backtick_left_asis ... ok [INFO] [stdout] test acp::streaming::tests::test_unclosed_italic_left_asis ... ok [INFO] [stdout] test acp::streaming::tests::test_unclosed_bold_left_asis ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_with_json_input ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_empty_input ... ok [INFO] [stdout] test cli::tests::default_is_cost_optimized ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_empty_json ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_null ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_with_locations ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_whitespace_only ... ok [INFO] [stdout] test cli::tests::invalid_model_name_errors ... ok [INFO] [stdout] test acp::streaming::tests::test_truncate_short ... ok [INFO] [stdout] test acp::tools::tests::test_terminal_kill ... ok [INFO] [stdout] test cli::tests::fixed_without_model_errors ... ok [INFO] [stdout] test cli::tests::non_fixed_strategy_with_model_works ... ok [INFO] [stdout] test cli::tests::invalid_strategy_name_errors ... ok [INFO] [stdout] test cli::tests::model_alone_implies_fixed ... ok [INFO] [stdout] test cli::tests::fixed_with_model_works ... ok [INFO] [stdout] test cli::tests::task_reset_yes_flag_parsed ... ok [INFO] [stdout] test cli::tests::test_agent_flag_parsed_on_feature_create ... ok [INFO] [stdout] test cli::tests::task_fail_yes_flag_parsed ... ok [INFO] [stdout] test cli::tests::test_allow_flag_absent ... ok [INFO] [stdout] test cli::tests::task_done_yes_flag_parsed ... ok [INFO] [stdout] test cli::tests::test_agent_flag_parsed_on_run ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_missing_title ... ok [INFO] [stdout] test cli::tests::test_no_sandbox_flag_absent ... ok [INFO] [stdout] test cli::tests::test_global_no_ui_flag ... ok [INFO] [stdout] test cli::tests::valid_models_accepted ... ok [INFO] [stdout] test cli::tests::valid_strategies_accepted ... ok [INFO] [stdout] test config::tests::agent_id_different_on_separate_invocations ... ok [INFO] [stdout] test config::tests::config_escalate_starts_at_haiku ... ok [INFO] [stdout] test config::tests::agent_id_preserved_across_iterations ... ok [INFO] [stdout] test config::tests::config_has_agent_id ... ok [INFO] [stdout] test config::tests::config_model_alone_implies_fixed ... ok [INFO] [stdout] test config::tests::config_next_iteration_preserves_strategy ... ok [INFO] [stdout] test config::tests::model_strategy_from_str_invalid ... ok [INFO] [stdout] test config::tests::agent_id_matches_format ... ok [INFO] [stdout] test config::tests::model_strategy_from_str_valid ... ok [INFO] [stdout] test config::tests::test_config_agent_override ... ok [INFO] [stdout] test config::tests::test_agent_config_backward_compat ... ok [INFO] [stdout] test config::tests::test_config_default_agent_command ... ok [INFO] [stdout] test config::tests::config_default_strategy_is_cost_optimized ... ok [INFO] [stdout] test config::tests::test_config_has_run_id ... ok [INFO] [stdout] test config::tests::config_fixed_strategy_requires_model ... ok [INFO] [stdout] test config::tests::test_config_no_sandbox_fields ... ok [INFO] [stdout] test config::tests::test_execution_config_backward_compat ... ok [INFO] [stdout] test config::tests::test_shlex_parse_error ... ok [INFO] [stdout] test config::tests::config_plan_then_execute_starts_at_opus ... ok [INFO] [stdout] test config::tests::model_strategy_display ... ok [INFO] [stdout] test config::tests::config_fixed_strategy_with_model ... ok [INFO] [stdout] test acp::client_impl::tests::test_request_permission_auto_approve_prefers_allow_once ... ok [INFO] [stdout] test acp::tools::tests::test_terminal_release_cleanup ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_skills_section ... ok [INFO] [stdout] test config::tests::test_agent_config_custom_command ... ok [INFO] [stdout] test cli::tests::task_delete_yes_flag_parsed ... ok [INFO] [stdout] test dag::crud::tests::test_add_log_nonexistent_task ... ok [INFO] [stdout] test acp::client_impl::tests::test_create_terminal_and_output ... ok [INFO] [stdout] test acp::tools::tests::test_terminal_create_and_output ... ok [INFO] [stdout] test dag::crud::tests::test_delete_tasks_for_feature_no_tasks ... ok [INFO] [stdout] test dag::crud::tests::test_create_task ... ok [INFO] [stdout] test dag::crud::tests::test_delete_task_rejects_if_blocker ... ok [INFO] [stdout] test dag::crud::tests::test_delete_task ... ok [INFO] [stdout] test dag::crud::tests::test_add_log ... ok [INFO] [stdout] test dag::crud::tests::test_create_task_with_parent ... ok [INFO] [stdout] test dag::crud::tests::test_get_nonexistent_task ... ok [INFO] [stdout] test dag::crud::tests::test_delete_task_allows_if_blocked ... ok [INFO] [stdout] test dag::crud::tests::test_delete_task_cascade_children ... ok [INFO] [stdout] test dag::db::tests::test_fts5_available ... ok [INFO] [stdout] test dag::crud::tests::test_create_task_with_invalid_parent ... ok [INFO] [stdout] test dag::crud::tests::test_delete_tasks_for_feature ... ok [INFO] [stdout] test dag::crud::tests::test_get_task_tree_nonexistent ... ok [INFO] [stdout] test dag::crud::tests::test_get_task ... ok [INFO] [stdout] test dag::crud::tests::test_get_task_tree_single ... ok [INFO] [stdout] test dag::db::tests::test_foreign_key_constraint_enforced ... ok [INFO] [stdout] test dag::crud::tests::test_update_nonexistent_task ... ok [INFO] [stdout] test dag::db::tests::test_duplicate_dependency_rejected ... ok [INFO] [stdout] test dag::crud::tests::test_update_task_multiple_fields ... ok [INFO] [stdout] test dag::crud::tests::test_get_task_tree_with_children ... ok [INFO] [stdout] test dag::db::tests::test_fresh_db_creates_tables ... ok [INFO] [stdout] test dag::crud::tests::test_update_task_title ... ok [INFO] [stdout] test dag::db::tests::test_schema_v3_fresh_db ... ok [INFO] [stdout] test dag::ids::tests::test_collision_retry ... ok [INFO] [stdout] test dag::db::tests::test_foreign_keys_enabled ... ok [INFO] [stdout] test dag::db::tests::test_idempotent_reopen ... ok [INFO] [stdout] test dag::db::tests::test_schema_v3_fts_triggers ... ok [INFO] [stdout] test dag::db::tests::test_schema_v3_migration_from_v2 ... ok [INFO] [stdout] test dag::crud::tests::test_integration_create_graph_claim_complete ... ok [INFO] [stdout] test dag::ids::tests::test_id_format ... ok [INFO] [stdout] test dag::ids::tests::test_max_retries_exceeded ... ok [INFO] [stdout] test dag::ids::tests::test_no_duplicates_in_1000_generates ... ok [INFO] [stdout] test dag::db::tests::test_self_dependency_rejected ... ok [INFO] [stdout] test dag::tests::task_counts_struct_has_required_fields ... ok [INFO] [stdout] test dag::tests::task_struct_has_required_fields ... ok [INFO] [stdout] test dag::db::tests::test_wal_mode_enabled ... ok [INFO] [stdout] test dag::dependencies::tests::test_add_valid_dependency ... ok [INFO] [stdout] test dag::dependencies::tests::test_remove_dependency ... ok [INFO] [stdout] test dag::dependencies::tests::test_dependency_on_nonexistent_task_fails ... ok [INFO] [stdout] test dag::dependencies::tests::test_longer_cycle_rejected ... ok [INFO] [stdout] test dag::dependencies::tests::test_direct_cycle_rejected ... ok [INFO] [stdout] test dag::dependencies::tests::test_diamond_structure_allowed ... ok [INFO] [stdout] test dag::dependencies::tests::test_transitive_cycle_rejected ... ok [INFO] [stdout] test dag::dependencies::tests::test_self_dependency_rejected ... ok [INFO] [stdout] test dag::tasks::tests::test_leaf_task_returns_stored_status ... ok [INFO] [stdout] test dag::tasks::tests::test_parent_one_done_one_pending ... ok [INFO] [stdout] test dag::tests::test_non_leaf_task_not_ready ... ok [INFO] [stdout] test dag::tasks::tests::test_parent_one_in_progress ... ok [INFO] [stdout] test dag::tasks::tests::test_parent_one_failed ... ok [INFO] [stdout] test dag::tasks::tests::test_parent_all_done ... ok [INFO] [stdout] test dag::tasks::tests::test_three_level_hierarchy ... ok [INFO] [stdout] test dag::tests::test_ready_task_with_no_deps_no_parent ... ok [INFO] [stdout] test dag::tests::test_ready_tasks_ordering ... ok [INFO] [stdout] test dag::tests::test_ready_tasks_ordering_same_priority ... ok [INFO] [stdout] test dag::tests::test_task_with_pending_blocker_not_ready ... ok [INFO] [stdout] test dag::tests::test_task_with_failed_parent_not_ready ... ok [INFO] [stdout] test dag::tests::test_task_with_all_blockers_done_is_ready ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_complete_parent_when_all_children_done ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_fail_parent_when_child_fails ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_complete_feature_when_all_tasks_done ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_fail_feature_when_task_fails_and_all_resolved ... ok [INFO] [stdout] test dag::transitions::tests::test_failed_to_pending ... ok [INFO] [stdout] test dag::transitions::tests::test_done_to_in_progress_fails ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_unblock_when_blocker_completes ... ok [INFO] [stdout] test dag::transitions::tests::test_blocked_to_pending ... ok [INFO] [stdout] test dag::transitions::tests::test_done_to_pending_fails ... ok [INFO] [stdout] test feature::tests::test_ensure_feature_dirs ... ok [INFO] [stdout] test dag::transitions::tests::test_feature_not_updated_when_tasks_still_pending ... ok [INFO] [stdout] test dag::transitions::tests::test_in_progress_to_done ... ok [INFO] [stdout] test dag::transitions::tests::test_force_complete_task_returns_combined_transitions ... ok [INFO] [stdout] test dag::transitions::tests::test_in_progress_to_failed ... ok [INFO] [stdout] test dag::transitions::tests::test_in_progress_to_pending ... ok [INFO] [stdout] test interrupt::tests::append_feedback_single ... ok [INFO] [stdout] test interrupt::tests::append_feedback_stacks ... ok [INFO] [stdout] test interrupt::tests::clear_interrupt_resets_signal_shutdown_flag ... ok [INFO] [stdout] test interrupt::tests::is_interrupted_default_false ... ok [INFO] [stdout] test interrupt::tests::request_interrupt_sets_flag ... ok [INFO] [stdout] test journal::tests::test_build_fts_query ... ok [INFO] [stdout] test journal::tests::test_build_fts_query_basic ... ok [INFO] [stdout] test journal::tests::test_build_fts_query_empty ... ok [INFO] [stdout] test dag::transitions::tests::test_pending_to_in_progress ... ok [INFO] [stdout] test dag::transitions::tests::test_pending_to_blocked ... ok [INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_parent_completed ... ok [INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_parent_failed ... ok [INFO] [stdout] test journal::tests::test_render_journal_context ... ok [INFO] [stdout] test journal::tests::test_render_journal_context_budget ... ok [INFO] [stdout] test journal::tests::test_render_journal_context_empty ... ok [INFO] [stdout] test journal::tests::test_render_journal_context_format ... ok [INFO] [stdout] test journal::tests::test_render_journal_context_no_notes ... ok [INFO] [stdout] test journal::tests::test_render_single_entry_nonzero_cost_shows_cost_line ... ok [INFO] [stdout] test journal::tests::test_render_single_entry_zero_cost_omits_cost_line ... ok [INFO] [stdout] test feature::tests::test_delete_nonexistent_feature ... ok [INFO] [stdout] test knowledge::tests::test_build_link_graph_basic ... ok [INFO] [stdout] test knowledge::tests::test_build_link_graph_bidirectional ... ok [INFO] [stdout] test knowledge::tests::test_build_link_graph_case_insensitive ... ok [INFO] [stdout] test knowledge::tests::test_build_link_graph_ignores_nonexistent_targets ... ok [INFO] [stdout] test feature::tests::test_delete_feature ... ok [INFO] [stdout] test feature::tests::test_create_duplicate_feature_fails ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_empty ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_missing_dir ... ok [INFO] [stdout] test knowledge::tests::test_discover_and_build_link_graph ... ok [INFO] [stdout] test feature::tests::test_create_feature ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_empty_graph ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_max_hops_respected ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_no_duplicates_with_initial ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_one_hop ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_two_hops ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_basic ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_case_insensitive_dedup ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_deduplicates ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_empty_link_skipped ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_multiple ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_no_links ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_parses_files ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_whitespace_trimmed ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_skips_malformed ... ok [INFO] [stdout] test knowledge::tests::test_get_backlinks ... ok [INFO] [stdout] test knowledge::tests::test_get_backlinks_none ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_unclosed ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_entries_by_tags ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_feature_bonus ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_file_path_bonus ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_multiple_tags_accumulate ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_skips_non_md_files ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_sorted_by_score ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_no_match ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_frontmatter ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_tags ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_empty_tags ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_title ... ok [INFO] [stdout] test knowledge::tests::test_render_knowledge_context ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_optional_feature ... ok [INFO] [stdout] test knowledge::tests::test_render_knowledge_context_empty ... ok [INFO] [stdout] test knowledge::tests::test_render_with_graph_shows_backlinks ... ok [INFO] [stdout] test knowledge::tests::test_render_knowledge_context_budget ... ok [INFO] [stdout] test knowledge::tests::test_render_with_graph_shows_outlinks ... ok [INFO] [stdout] test knowledge::tests::test_render_without_graph_no_links ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_basic ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_consecutive_hyphens ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_exactly_80_chars ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_leading_trailing_hyphens ... ok [INFO] [stdout] test dag::transitions::tests::test_standalone_task_does_not_affect_features ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_long ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_special_chars ... ok [INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_unblocked ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_no_tags ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_with_feature ... ok [INFO] [stdout] test feature::tests::test_get_feature ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_new ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_dedup_tag_overlap ... ok [INFO] [stdout] test project::tests::discovers_config_two_directories_up ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_dedup_exact_title ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_truncation ... ok [INFO] [stdout] test feature::tests::test_feature_exists ... ok [INFO] [stdout] test project::tests::discovers_config_in_cwd ... ok [INFO] [stdout] test project::tests::ralph_config_default_values ... ok [INFO] [stdout] test project::tests::invalid_toml_returns_error ... ok [INFO] [stdout] test project::tests::empty_toml_parses_to_defaults ... ok [INFO] [stdout] test project::tests::partial_config_uses_defaults_for_missing_sections ... ok [INFO] [stdout] test project::tests::no_config_returns_error_with_init_message ... ok [INFO] [stdout] test feature::tests::test_get_nonexistent_feature ... ok [INFO] [stdout] test project::tests::ui_colors_all_tokens_accepted ... ok [INFO] [stdout] test project::tests::ui_colors_invalid_hex_rejected_at_load ... ok [INFO] [stdout] test project::tests::ui_colors_invalid_name_rejected_at_load ... ok [INFO] [stdout] test project::tests::ui_colors_missing_uses_defaults ... ok [INFO] [stdout] test project::tests::ui_colors_partial_overrides ... ok [INFO] [stdout] test project::tests::ui_config_defaults_to_light_theme ... ok [INFO] [stdout] test project::tests::ui_config_missing_section_uses_default ... ok [INFO] [stdout] test project::tests::ui_config_parses_dark_theme ... ok [INFO] [stdout] test project::tests::unknown_keys_ignored_for_forward_compat ... ok [INFO] [stdout] test review::tests::test_document_kind_labels ... ok [INFO] [stdout] test review::tests::test_parse_review_changes ... ok [INFO] [stdout] test review::tests::test_parse_review_changes_absent ... ok [INFO] [stdout] test review::tests::test_parse_review_changes_empty ... ok [INFO] [stdout] test review::tests::test_parse_review_changes_multiline ... ok [INFO] [stdout] test review::tests::test_parse_review_pass ... ok [INFO] [stdout] test review::tests::test_review_prompt_includes_context ... ok [INFO] [stdout] test review::tests::test_review_prompt_plan_criteria ... ok [INFO] [stdout] test review::tests::test_review_prompt_round_note ... ok [INFO] [stdout] test review::tests::test_review_prompt_spec_criteria ... ok [INFO] [stdout] test journal::tests::test_insert_journal_entry ... ok [INFO] [stdout] test feature::tests::test_list_features ... ok [INFO] [stdout] test feature::tests::test_update_feature_status ... ok [INFO] [stdout] test journal::tests::test_insert_journal_entry_no_notes ... ok [INFO] [stdout] test project::tests::init_appends_to_existing_gitignore ... ok [INFO] [stdout] test journal::tests::test_select_journal_entries ... ok [INFO] [stdout] test journal::tests::test_query_journal_recent ... ok [INFO] [stdout] test project::tests::init_creates_all_files_and_directories ... ok [INFO] [stdout] test project::tests::test_init_existing_claude_dir ... ok [INFO] [stdout] test project::tests::init_is_idempotent ... ok [INFO] [stdout] test project::tests::test_init_no_ralph_skills ... ok [INFO] [stdout] test strategy::tests::cost_optimized_ambiguous_progress_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::cost_optimized_default_iteration_1_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::cost_optimized_empty_progress_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::cost_optimized_error_signals_return_opus ... ok [INFO] [stdout] test strategy::tests::cost_optimized_errors_override_completions ... ok [INFO] [stdout] test strategy::tests::cost_optimized_failure_signal_returns_opus ... ok [INFO] [stdout] test strategy::tests::cost_optimized_steady_completions_return_haiku ... ok [INFO] [stdout] test strategy::tests::cost_optimized_stuck_signal_returns_opus ... ok [INFO] [stdout] test strategy::tests::cost_optimized_two_completions_still_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::escalate_escalation_sequence_haiku_to_sonnet_to_opus ... ok [INFO] [stdout] test project::tests::test_init_creates_claude_skills ... ok [INFO] [stdout] test project::tests::test_init_legacy_skills_notice ... ok [INFO] [stdout] test strategy::tests::escalate_model_to_level_mapping ... ok [INFO] [stdout] test strategy::tests::escalate_moderate_distress_returns_sonnet_level ... ok [INFO] [stdout] test strategy::tests::escalate_never_auto_de_escalates ... ok [INFO] [stdout] test strategy::tests::escalate_no_distress_stays_haiku ... ok [INFO] [stdout] test run_loop::tests::empty_dag_returns_noplan ... ok [INFO] [stdout] test strategy::tests::escalate_severe_distress_returns_opus_level ... ok [INFO] [stdout] test strategy::tests::escalate_starts_at_haiku ... ok [INFO] [stdout] test strategy::tests::escalate_stays_at_escalated_level_across_iterations ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_ignores_iteration_number ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_returns_configured_model ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_returns_haiku_when_configured ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_returns_sonnet_when_configured ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_same_model_across_iterations ... ok [INFO] [stdout] test strategy::tests::hint_differing_from_strategy_is_override ... ok [INFO] [stdout] test strategy::tests::hint_matching_strategy_is_not_override ... ok [INFO] [stdout] test strategy::tests::hint_overrides_cost_optimized_strategy ... ok [INFO] [stdout] test strategy::tests::hint_overrides_fixed_strategy ... ok [INFO] [stdout] test strategy::tests::no_hint_means_no_override ... ok [INFO] [stdout] test project::tests::test_init_creates_knowledge_dir ... ok [INFO] [stdout] test run_loop::tests::completed_blockers_are_retrieved ... ok [INFO] [stdout] test run_loop::tests::blocked_tasks_return_blocked_outcome ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_config_starts_at_opus ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_direct_function_iteration_1 ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_direct_function_iteration_2_plus ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_iteration_1 ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_to_haiku ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_to_opus ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_iteration_1_returns_opus ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_iteration_2_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_iteration_5_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_no_override_when_hint_matches ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_override_detected_on_iteration_2 ... ok [INFO] [stdout] test ui::app::tests::backspace_at_mid_cursor ... ok [INFO] [stdout] test ui::app::tests::choice_mode_cursor_navigation ... ok [INFO] [stdout] test ui::app::tests::choice_mode_number_key_selects ... ok [INFO] [stdout] test ui::app::tests::choice_mode_typing_switches_to_freetext ... ok [INFO] [stdout] test ui::app::tests::cursor_navigation_home_end ... ok [INFO] [stdout] test ui::app::tests::cursor_navigation_left_right ... ok [INFO] [stdout] test ui::app::tests::cursor_navigation_up_down ... ok [INFO] [stdout] test ui::app::tests::delete_key ... ok [INFO] [stdout] test ui::app::tests::freetext_ctrl_c_interrupts ... ok [INFO] [stdout] test ui::app::tests::freetext_empty_enter_exits ... ok [INFO] [stdout] test ui::app::tests::freetext_enter_submits ... ok [INFO] [stdout] test ui::app::tests::freetext_shift_enter_inserts_newline ... ok [INFO] [stdout] test ui::app::tests::freetext_typing_and_backspace ... ok [INFO] [stdout] test ui::app::tests::pageup_pagedown_scroll_agent_during_input ... ok [INFO] [stdout] test ui::event::tests::event_line_partial_eq ... ok [INFO] [stdout] test ui::state::tests::agent_text_is_capped_and_utf8_safe ... ok [INFO] [stdout] test ui::state::tests::apply_handles_ui_event_event ... ok [INFO] [stdout] test ui::state::tests::apply_updates_status_line ... ok [INFO] [stdout] test run_loop::tests::last_failure_reason_from_logs ... ok [INFO] [stdout] test ui::state::tests::events_ring_buffer_adjusts_scroll_offset ... ok [INFO] [stdout] test ui::state::tests::events_scroll_down_resumes_auto_scroll ... ok [INFO] [stdout] test run_loop::tests::last_failure_reason_missing ... ok [INFO] [stdout] test ui::state::tests::events_ring_buffer_caps_at_max ... ok [INFO] [stdout] test ui::state::tests::events_scroll_to_bottom ... ok [INFO] [stdout] test ui::state::tests::events_scroll_up_from_auto_scroll ... ok [INFO] [stdout] test ui::state::tests::explorer_scroll_bounds ... ok [INFO] [stdout] test ui::state::tests::input_activation_and_deactivation ... ok [INFO] [stdout] test journal::tests::test_query_journal_fts ... ok [INFO] [stdout] test ui::tests::env_parser_defaults_to_auto_for_unknown ... ok [INFO] [stdout] test ui::tests::no_ui_flag_wins ... ok [INFO] [stdout] test ui::tests::prompt_calls_fallback_when_ui_not_running ... ok [INFO] [stdout] test ui::tests::non_tty_fallback_matrix ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_empty_is_noop ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_all_fields ... ok [INFO] [stdout] test ui::theme::tests::dark_theme_uses_reset_background ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_validate_valid ... ok [INFO] [stdout] test ui::theme::tests::event_task_color_override_applies ... ok [INFO] [stdout] test ui::theme::tests::event_category_style_returns_non_default_for_all_categories ... ok [INFO] [stdout] test ui::theme::tests::light_theme_uses_reset_background ... ok [INFO] [stdout] test ui::theme::tests::parse_color_hex_invalid ... ok [INFO] [stdout] test ui::theme::tests::parse_color_hex_valid ... ok [INFO] [stdout] test ui::theme::tests::parse_color_named ... ok [INFO] [stdout] test ui::theme::tests::parse_color_trims_whitespace ... ok [INFO] [stdout] test ui::theme::tests::parse_color_unknown_name ... ok [INFO] [stdout] test ui::theme::tests::resolve_env_invalid_falls_through_to_config ... ok [INFO] [stdout] test ui::theme::tests::resolve_env_overrides_config ... ok [INFO] [stdout] test ui::theme::tests::resolve_falls_back_to_dark ... ok [INFO] [stdout] test ui::theme::tests::resolve_uses_config_value ... ok [INFO] [stdout] test ui::theme::tests::theme_name_parse_dark ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_partial_apply ... ok [INFO] [stdout] test ui::theme::tests::theme_name_parse_invalid ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_validate_invalid ... ok [INFO] [stdout] test ui::theme::tests::theme_name_parse_light ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_inactive ... ok [INFO] [stdout] test run_loop::tests::recover_stuck_target_claim_releases_same_agent_claim ... ok [INFO] [stdout] test strategy::tests::escalate_hint_de_escalates_level ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_active_choices ... ok [INFO] [stdout] test ui::view::tests::input_pane_does_not_panic_on_tiny_frame ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_tool_activity_in_left_column ... ok [INFO] [stdout] test ui::view::tests::explorer_screen_renders_title ... ok [INFO] [stdout] test verification::tests::test_parse_verify_fail ... ok [INFO] [stdout] test verification::tests::test_parse_verify_fail_absent ... ok [INFO] [stdout] test verification::tests::test_parse_verify_fail_empty ... ok [INFO] [stdout] test verification::tests::test_parse_verify_pass ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_active_freetext ... ok [INFO] [stdout] test run_loop::tests::recover_stuck_target_claim_ignores_other_agent_claim ... ok [INFO] [stdout] test run_loop::tests::scoped_target_resolved_task_ignores_unrelated_pending_tasks ... ok [INFO] [stdout] test strategy::tests::escalate_override_detected_when_hint_differs ... ok [INFO] [stdout] test run_loop::tests::try_release_claim_resets_in_progress_task ... ok [INFO] [stdout] test run_loop::tests::scoped_target_resolved_feature_ignores_unrelated_pending_tasks ... ok [INFO] [stdout] test strategy::tests::escalate_hint_can_escalate_level ... ok [INFO] [stdout] test strategy::tests::no_override_means_no_log_entry ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_core_panels ... ok [INFO] [stdout] test run_loop::tests::ready_tasks_are_picked_in_order ... ok [INFO] [stdout] test ui::view::tests::modal_renders_over_base_screen ... ok [INFO] [stdout] test strategy::tests::override_inserts_without_clobbering_existing_rows ... ok [INFO] [stdout] test strategy::tests::override_logged_to_model_overrides_table ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 522 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.36s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/ralph-5b75737d06930cb8) [INFO] [stdout] [INFO] [stdout] running 538 tests [INFO] [stdout] test acp::client_impl::tests::test_allowed_write_paths_rejects_unlisted_file ... ok [INFO] [stdout] test acp::client_impl::tests::test_allowed_write_paths_permits_listed_file ... ok [INFO] [stdout] test acp::client_impl::tests::test_no_write_path_restriction_allows_any ... ok [INFO] [stdout] test acp::client_impl::tests::test_request_permission_auto_approve ... ok [INFO] [stdout] test acp::client_impl::tests::test_read_text_file_basic ... ok [INFO] [stdout] test acp::client_impl::tests::test_terminal_not_found_returns_error ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_parent_traversal_rejected ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_basic ... ok [INFO] [stdout] test acp::client_impl::tests::test_request_permission_auto_approve_prefers_allow_once ... ok [INFO] [stdout] test acp::client_impl::tests::test_read_text_file_with_line_limit ... ok [INFO] [stdout] test acp::client_impl::tests::test_request_permission_read_only_denies_writes ... ok [INFO] [stdout] test acp::client_impl::tests::test_take_accumulated_text ... ok [INFO] [stdout] test acp::client_impl::tests::test_read_text_file_nonexistent ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_creates_parents ... ok [INFO] [stdout] test acp::client_impl::tests::test_release_terminal_removes_from_map ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_outside_project_rejected ... ok [INFO] [stdout] test acp::client_impl::tests::test_take_files_modified ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_not_authenticated ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_returns_none_for_generic_failure ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_returns_none_for_unrelated_errors ... ok [INFO] [stdout] test acp::connection::tests::test_model_override_takes_precedence ... ok [INFO] [stdout] test acp::connection::tests::test_autonomous_prompt_concatenation ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_tracks_modified ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_auth_expired ... ok [INFO] [stdout] test acp::connection::tests::test_auth_hint_detects_authentication_required ... ok [INFO] [stdout] test acp::connection::tests::test_parse_malformed_command_returns_error ... ok [INFO] [stdout] test acp::client_impl::tests::test_read_text_file_outside_project_rejected ... ok [INFO] [stdout] test acp::connection::tests::test_no_model_override_uses_default ... ok [INFO] [stdout] test acp::connection::tests::test_parse_command_with_quoted_args ... ok [INFO] [stdout] test acp::connection::tests::test_parse_command_with_double_quoted_args ... ok [INFO] [stdout] test acp::connection::tests::test_parse_simple_command ... ok [INFO] [stdout] test acp::connection::tests::test_ralph_model_env_var_key ... ok [INFO] [stdout] test acp::connection::tests::test_stop_reason_cancelled_maps_to_interrupted ... ok [INFO] [stdout] test acp::interactive::tests::test_multiline_result_variants_exist ... ok [INFO] [stdout] test acp::connection::tests::test_stop_reason_refusal_is_not_end_turn ... ok [INFO] [stdout] test acp::interactive::tests::test_poll_interrupt_is_async ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_tracks_nested_relative ... ok [INFO] [stdout] test acp::connection::tests::test_parse_empty_command_returns_error ... ok [INFO] [stdout] test acp::connection::tests::test_stop_reason_end_turn_is_completed ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_all_three_model_names ... ok [INFO] [stdout] test acp::interactive::tests::test_run_streaming_is_async ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_haiku_example ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_sonnet_example ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_tag ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_completion_sigils ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_no_progress_file_references ... ok [INFO] [stdout] test acp::prompt::tests::task_context_no_blockers_omits_prerequisites_section ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_one_task_per_loop ... ok [INFO] [stdout] test acp::prompt::tests::task_context_no_parent_omits_parent_section ... ok [INFO] [stdout] test acp::connection::tests::test_stop_reason_max_tokens_is_not_end_turn ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_task_sigils ... ok [INFO] [stdout] test acp::prompt::tests::task_context_with_two_blockers ... ok [INFO] [stdout] test acp::prompt::tests::task_context_verbatim_fields ... ok [INFO] [stdout] test acp::prompt::tests::test_iteration_context_fields_no_skills_summary ... ok [INFO] [stdout] test acp::prompt::tests::task_context_with_all_fields ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_journal ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_knowledge ... ok [INFO] [stdout] test acp::prompt::tests::system_prompt_contains_next_model_opus_example ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_includes_memory_instructions ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_journal_when_empty ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_absent_returns_none ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_knowledge_when_empty ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_alongside_complete_sigil ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_haiku ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_learning_section ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_invalid_model_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_malformed_no_closing_tag_returns_none ... ok [INFO] [stdout] test acp::prompt::tests::test_system_prompt_no_skills_section ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_malformed_no_opening_tag_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::both_task_sigils_task_done_wins ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_empty_text_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_sonnet ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_empty_model_returns_none ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_opus ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_first_occurrence_wins ... ok [INFO] [stdout] test acp::sigils::tests::parse_hint_with_whitespace_inside_tags ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_absent ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_build ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_empty ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_invalid_phase ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_plan ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_malformed_no_closing ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_with_whitespace ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_empty_content ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_basic ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_with_whitespace_inside_tags ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_empty_content ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_malformed_no_closing_tag ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_basic ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_malformed_no_closing_tag ... ok [INFO] [stdout] test acp::sigils::tests::parse_phase_complete_spec ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_no_sigil ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_with_context ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_no_sigil ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_done_with_context ... ok [INFO] [stdout] test acp::sigils::tests::task_sigil_with_model_hint ... ok [INFO] [stdout] test acp::sigils::tests::parse_tasks_created_self_closing_with_space ... ok [INFO] [stdout] test acp::sigils::tests::parse_tasks_created_with_closing_tag ... ok [INFO] [stdout] test acp::sigils::tests::result_event_with_hint ... ok [INFO] [stdout] test acp::sigils::tests::parse_task_failed_with_whitespace_inside_tags ... ok [INFO] [stdout] test acp::sigils::tests::parse_tasks_created_absent ... ok [INFO] [stdout] test acp::sigils::tests::parse_tasks_created_self_closing ... ok [INFO] [stdout] test acp::sigils::tests::result_event_default_has_no_hint ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_attribute_empty_value ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_both ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_none ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_phase_complete ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_sigils_all_present ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_sigils_none_present ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_sigils_partial ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_absent ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_attribute ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_interactive_sigils_tasks_created ... ok [INFO] [stdout] test acp::sigils::tests::test_extract_attribute_missing ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_empty ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_multiline ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_whitespace_only ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_journal_sigil_with_context ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_attributes_reversed_order ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_missing_tags ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_missing_title ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_tags_normalized ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigils_multiple ... ok [INFO] [stdout] test acp::streaming::tests::test_code_block_toggle ... ok [INFO] [stdout] test acp::streaming::tests::test_empty_line ... ok [INFO] [stdout] test acp::streaming::tests::test_heading_h1_is_bold ... ok [INFO] [stdout] test acp::streaming::tests::test_heading_h3_is_bold ... ok [INFO] [stdout] test acp::streaming::tests::test_inline_code ... ok [INFO] [stdout] test acp::streaming::tests::test_inline_italic ... ok [INFO] [stdout] test acp::streaming::tests::test_shorten_deep_path ... ok [INFO] [stdout] test acp::streaming::tests::test_shorten_short_path ... ok [INFO] [stdout] test acp::streaming::tests::test_heading_h2_is_bold ... ok [INFO] [stdout] test acp::sigils::tests::test_parse_knowledge_sigil_empty_body ... ok [INFO] [stdout] test acp::streaming::tests::test_shorten_just_filename ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_bash_command ... ok [INFO] [stdout] test acp::streaming::tests::test_code_block_no_inline_formatting ... ok [INFO] [stdout] test acp::streaming::tests::test_inline_bold ... ok [INFO] [stdout] test acp::streaming::tests::test_mixed_inline ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_from_locations ... ok [INFO] [stdout] test acp::streaming::tests::test_plain_text_unchanged ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_grep_pattern ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_edit_from_input ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_empty_input ... ok [INFO] [stdout] test acp::streaming::tests::test_truncate_multiline ... ok [INFO] [stdout] test acp::streaming::tests::test_summary_read_from_input ... ok [INFO] [stdout] test acp::streaming::tests::test_truncate_short ... ok [INFO] [stdout] test acp::streaming::tests::test_truncate_long ... ok [INFO] [stdout] test acp::streaming::tests::test_unclosed_backtick_left_asis ... ok [INFO] [stdout] test acp::streaming::tests::test_unclosed_bold_left_asis ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_empty_input ... ok [INFO] [stdout] test acp::streaming::tests::test_unclosed_italic_left_asis ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_empty_json ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_whitespace_only ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_with_locations ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_with_json_input ... ok [INFO] [stdout] test cli::tests::default_is_cost_optimized ... ok [INFO] [stdout] test acp::streaming::tests::test_useful_summary_null ... ok [INFO] [stdout] test acp::tools::tests::test_terminal_kill ... ok [INFO] [stdout] test acp::connection::tests::test_parse_command_with_args ... ok [INFO] [stdout] test acp::interactive::tests::test_first_prompt_concatenation ... ok [INFO] [stdout] test acp::interactive::tests::test_run_interactive_is_async ... ok [INFO] [stdout] test cli::tests::fixed_with_model_works ... ok [INFO] [stdout] test cli::tests::fixed_without_model_errors ... ok [INFO] [stdout] test acp::client_impl::tests::test_request_permission_read_only_approves_reads ... ok [INFO] [stdout] test acp::client_impl::tests::test_write_text_file_read_only_rejected ... ok [INFO] [stdout] test acp::client_impl::tests::test_kill_terminal ... ok [INFO] [stdout] test cli::tests::invalid_model_name_errors ... ok [INFO] [stdout] test cli::tests::model_alone_implies_fixed ... ok [INFO] [stdout] test cli::tests::invalid_strategy_name_errors ... ok [INFO] [stdout] test cli::tests::non_fixed_strategy_with_model_works ... ok [INFO] [stdout] test cli::tests::test_agent_flag_parsed_on_feature_create ... ok [INFO] [stdout] test cli::tests::test_agent_flag_parsed_on_run ... ok [INFO] [stdout] test cli::tests::test_allow_flag_absent ... ok [INFO] [stdout] test cli::tests::test_global_no_ui_flag ... ok [INFO] [stdout] test cli::tests::valid_models_accepted ... ok [INFO] [stdout] test cli::tests::test_no_sandbox_flag_absent ... ok [INFO] [stdout] test cli::tests::valid_strategies_accepted ... ok [INFO] [stdout] test config::tests::agent_id_different_on_separate_invocations ... ok [INFO] [stdout] test config::tests::agent_id_matches_format ... ok [INFO] [stdout] test config::tests::agent_id_preserved_across_iterations ... ok [INFO] [stdout] test cli::tests::task_reset_yes_flag_parsed ... ok [INFO] [stdout] test cli::tests::task_delete_yes_flag_parsed ... ok [INFO] [stdout] test config::tests::config_escalate_starts_at_haiku ... ok [INFO] [stdout] test config::tests::config_default_strategy_is_cost_optimized ... ok [INFO] [stdout] test cli::tests::task_fail_yes_flag_parsed ... ok [INFO] [stdout] test config::tests::config_has_agent_id ... ok [INFO] [stdout] test config::tests::config_fixed_strategy_requires_model ... ok [INFO] [stdout] test config::tests::config_fixed_strategy_with_model ... ok [INFO] [stdout] test config::tests::config_model_alone_implies_fixed ... ok [INFO] [stdout] test config::tests::config_next_iteration_preserves_strategy ... ok [INFO] [stdout] test config::tests::config_plan_then_execute_starts_at_opus ... ok [INFO] [stdout] test config::tests::model_strategy_display ... ok [INFO] [stdout] test config::tests::model_strategy_from_str_invalid ... ok [INFO] [stdout] test config::tests::model_strategy_from_str_valid ... ok [INFO] [stdout] test config::tests::test_agent_config_backward_compat ... ok [INFO] [stdout] test config::tests::test_agent_config_custom_command ... ok [INFO] [stdout] test config::tests::test_config_agent_override ... ok [INFO] [stdout] test config::tests::test_config_has_run_id ... ok [INFO] [stdout] test config::tests::test_config_default_agent_command ... ok [INFO] [stdout] test config::tests::test_config_no_sandbox_fields ... ok [INFO] [stdout] test config::tests::test_execution_config_backward_compat ... ok [INFO] [stdout] test config::tests::test_shlex_parse_error ... ok [INFO] [stdout] test acp::tools::tests::test_terminal_release_cleanup ... ok [INFO] [stdout] test cli::tests::task_done_yes_flag_parsed ... ok [INFO] [stdout] test dag::crud::tests::test_delete_tasks_for_feature_no_tasks ... ok [INFO] [stdout] test acp::tools::tests::test_terminal_create_and_output ... ok [INFO] [stdout] test dag::crud::tests::test_add_log ... ok [INFO] [stdout] test dag::crud::tests::test_add_log_nonexistent_task ... ok [INFO] [stdout] test dag::crud::tests::test_get_nonexistent_task ... ok [INFO] [stdout] test dag::crud::tests::test_delete_task_allows_if_blocked ... ok [INFO] [stdout] test acp::client_impl::tests::test_create_terminal_and_output ... ok [INFO] [stdout] test dag::crud::tests::test_create_task_with_invalid_parent ... ok [INFO] [stdout] test dag::crud::tests::test_delete_task ... ok [INFO] [stdout] test dag::crud::tests::test_create_task ... ok [INFO] [stdout] test dag::crud::tests::test_delete_task_rejects_if_blocker ... ok [INFO] [stdout] test dag::crud::tests::test_get_task ... ok [INFO] [stdout] test dag::crud::tests::test_delete_task_cascade_children ... ok [INFO] [stdout] test dag::db::tests::test_fts5_available ... ok [INFO] [stdout] test dag::crud::tests::test_create_task_with_parent ... ok [INFO] [stdout] test dag::crud::tests::test_get_task_tree_nonexistent ... ok [INFO] [stdout] test dag::crud::tests::test_delete_tasks_for_feature ... ok [INFO] [stdout] test dag::crud::tests::test_get_task_tree_single ... ok [INFO] [stdout] test dag::crud::tests::test_update_nonexistent_task ... ok [INFO] [stdout] test dag::crud::tests::test_update_task_multiple_fields ... ok [INFO] [stdout] test dag::crud::tests::test_update_task_title ... ok [INFO] [stdout] test dag::db::tests::test_duplicate_dependency_rejected ... ok [INFO] [stdout] test dag::db::tests::test_idempotent_reopen ... ok [INFO] [stdout] test dag::crud::tests::test_get_task_tree_with_children ... ok [INFO] [stdout] test dag::crud::tests::test_integration_create_graph_claim_complete ... ok [INFO] [stdout] test dag::db::tests::test_schema_v3_fts_triggers ... ok [INFO] [stdout] test dag::ids::tests::test_collision_retry ... ok [INFO] [stdout] test dag::ids::tests::test_id_format ... ok [INFO] [stdout] test dag::ids::tests::test_max_retries_exceeded ... ok [INFO] [stdout] test dag::db::tests::test_fresh_db_creates_tables ... ok [INFO] [stdout] test dag::db::tests::test_wal_mode_enabled ... ok [INFO] [stdout] test dag::ids::tests::test_no_duplicates_in_1000_generates ... ok [INFO] [stdout] test dag::db::tests::test_foreign_key_constraint_enforced ... ok [INFO] [stdout] test dag::db::tests::test_foreign_keys_enabled ... ok [INFO] [stdout] test dag::db::tests::test_schema_v3_fresh_db ... ok [INFO] [stdout] test dag::db::tests::test_schema_v3_migration_from_v2 ... ok [INFO] [stdout] test dag::tests::task_counts_struct_has_required_fields ... ok [INFO] [stdout] test dag::tests::task_struct_has_required_fields ... ok [INFO] [stdout] test dag::db::tests::test_self_dependency_rejected ... ok [INFO] [stdout] test dag::dependencies::tests::test_dependency_on_nonexistent_task_fails ... ok [INFO] [stdout] test dag::dependencies::tests::test_add_valid_dependency ... ok [INFO] [stdout] test dag::dependencies::tests::test_direct_cycle_rejected ... ok [INFO] [stdout] test dag::dependencies::tests::test_diamond_structure_allowed ... ok [INFO] [stdout] test dag::dependencies::tests::test_self_dependency_rejected ... ok [INFO] [stdout] test dag::dependencies::tests::test_transitive_cycle_rejected ... ok [INFO] [stdout] test dag::dependencies::tests::test_remove_dependency ... ok [INFO] [stdout] test dag::tasks::tests::test_leaf_task_returns_stored_status ... ok [INFO] [stdout] test dag::tests::test_non_leaf_task_not_ready ... ok [INFO] [stdout] test dag::tasks::tests::test_three_level_hierarchy ... ok [INFO] [stdout] test dag::tasks::tests::test_parent_all_done ... ok [INFO] [stdout] test dag::dependencies::tests::test_longer_cycle_rejected ... ok [INFO] [stdout] test dag::tests::test_ready_task_with_no_deps_no_parent ... ok [INFO] [stdout] test dag::tasks::tests::test_parent_one_in_progress ... ok [INFO] [stdout] test dag::tasks::tests::test_parent_one_done_one_pending ... ok [INFO] [stdout] test dag::tasks::tests::test_parent_one_failed ... ok [INFO] [stdout] test dag::tests::test_ready_tasks_ordering ... ok [INFO] [stdout] test dag::tests::test_task_with_failed_parent_not_ready ... ok [INFO] [stdout] test dag::tests::test_task_with_pending_blocker_not_ready ... ok [INFO] [stdout] test dag::tests::test_ready_tasks_ordering_same_priority ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_fail_feature_when_task_fails_and_all_resolved ... ok [INFO] [stdout] test dag::transitions::tests::test_done_to_pending_fails ... ok [INFO] [stdout] test dag::transitions::tests::test_done_to_in_progress_fails ... ok [INFO] [stdout] test dag::tests::test_task_with_all_blockers_done_is_ready ... ok [INFO] [stdout] test dag::transitions::tests::test_blocked_to_pending ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_complete_feature_when_all_tasks_done ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_unblock_when_blocker_completes ... ok [INFO] [stdout] test dag::transitions::tests::test_feature_not_updated_when_tasks_still_pending ... ok [INFO] [stdout] test dag::transitions::tests::test_failed_to_pending ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_fail_parent_when_child_fails ... ok [INFO] [stdout] test feature::tests::test_ensure_feature_dirs ... ok [INFO] [stdout] test dag::transitions::tests::test_in_progress_to_done ... ok [INFO] [stdout] test dag::transitions::tests::test_force_complete_task_returns_combined_transitions ... ok [INFO] [stdout] test dag::transitions::tests::test_auto_complete_parent_when_all_children_done ... ok [INFO] [stdout] test dag::transitions::tests::test_pending_to_blocked ... ok [INFO] [stdout] test dag::transitions::tests::test_in_progress_to_pending ... ok [INFO] [stdout] test interrupt::tests::append_feedback_single ... ok [INFO] [stdout] test interrupt::tests::append_feedback_stacks ... ok [INFO] [stdout] test interrupt::tests::clear_interrupt_resets_signal_shutdown_flag ... ok [INFO] [stdout] test interrupt::tests::is_interrupted_default_false ... ok [INFO] [stdout] test interrupt::tests::request_interrupt_sets_flag ... ok [INFO] [stdout] test journal::tests::test_build_fts_query ... ok [INFO] [stdout] test journal::tests::test_build_fts_query_basic ... ok [INFO] [stdout] test journal::tests::test_build_fts_query_empty ... ok [INFO] [stdout] test dag::transitions::tests::test_in_progress_to_failed ... ok [INFO] [stdout] test dag::transitions::tests::test_pending_to_in_progress ... ok [INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_parent_failed ... ok [INFO] [stdout] test feature::tests::test_create_duplicate_feature_fails ... ok [INFO] [stdout] test dag::transitions::tests::test_standalone_task_does_not_affect_features ... ok [INFO] [stdout] test journal::tests::test_render_journal_context_budget ... ok [INFO] [stdout] test journal::tests::test_render_journal_context_empty ... ok [INFO] [stdout] test journal::tests::test_render_journal_context_format ... ok [INFO] [stdout] test journal::tests::test_render_journal_context_no_notes ... ok [INFO] [stdout] test journal::tests::test_render_single_entry_nonzero_cost_shows_cost_line ... ok [INFO] [stdout] test journal::tests::test_render_single_entry_zero_cost_omits_cost_line ... ok [INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_parent_completed ... ok [INFO] [stdout] test knowledge::tests::test_build_link_graph_basic ... ok [INFO] [stdout] test knowledge::tests::test_build_link_graph_bidirectional ... ok [INFO] [stdout] test knowledge::tests::test_build_link_graph_case_insensitive ... ok [INFO] [stdout] test knowledge::tests::test_build_link_graph_ignores_nonexistent_targets ... ok [INFO] [stdout] test knowledge::tests::test_discover_and_build_link_graph ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_empty ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_missing_dir ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_parses_files ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_skips_malformed ... ok [INFO] [stdout] test feature::tests::test_get_feature ... ok [INFO] [stdout] test knowledge::tests::test_discover_knowledge_skips_non_md_files ... ok [INFO] [stdout] test feature::tests::test_delete_nonexistent_feature ... ok [INFO] [stdout] test feature::tests::test_delete_feature ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_empty_graph ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_no_duplicates_with_initial ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_one_hop ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_two_hops ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_basic ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_case_insensitive_dedup ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_deduplicates ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_empty_link_skipped ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_multiple ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_no_links ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_unclosed ... ok [INFO] [stdout] test knowledge::tests::test_extract_links_whitespace_trimmed ... ok [INFO] [stdout] test knowledge::tests::test_get_backlinks ... ok [INFO] [stdout] test knowledge::tests::test_get_backlinks_none ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_entries_by_tags ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_feature_bonus ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_file_path_bonus ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_multiple_tags_accumulate ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_no_match ... ok [INFO] [stdout] test knowledge::tests::test_match_knowledge_sorted_by_score ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_empty_tags ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_frontmatter ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_tags ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_no_title ... ok [INFO] [stdout] test knowledge::tests::test_expand_via_links_max_hops_respected ... ok [INFO] [stdout] test knowledge::tests::test_parse_knowledge_frontmatter_optional_feature ... ok [INFO] [stdout] test knowledge::tests::test_render_knowledge_context ... ok [INFO] [stdout] test knowledge::tests::test_render_knowledge_context_empty ... ok [INFO] [stdout] test knowledge::tests::test_render_with_graph_shows_backlinks ... ok [INFO] [stdout] test knowledge::tests::test_render_knowledge_context_budget ... ok [INFO] [stdout] test knowledge::tests::test_render_with_graph_shows_outlinks ... ok [INFO] [stdout] test knowledge::tests::test_render_without_graph_no_links ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_basic ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_consecutive_hyphens ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_exactly_80_chars ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_leading_trailing_hyphens ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_long ... ok [INFO] [stdout] test knowledge::tests::test_slugify_title_special_chars ... ok [INFO] [stdout] test feature::tests::test_get_nonexistent_feature ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_new ... ok [INFO] [stdout] test feature::tests::test_create_feature ... ok [INFO] [stdout] test dag::transitions::tests::test_set_task_status_returns_unblocked ... ok [INFO] [stdout] test feature::tests::test_feature_exists ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_no_tags ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_dedup_tag_overlap ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_with_feature ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_dedup_exact_title ... ok [INFO] [stdout] test project::tests::discovers_config_in_cwd ... ok [INFO] [stdout] test project::tests::discovers_config_two_directories_up ... ok [INFO] [stdout] test knowledge::tests::test_write_knowledge_entry_truncation ... ok [INFO] [stdout] test project::tests::ralph_config_default_values ... ok [INFO] [stdout] test project::tests::no_config_returns_error_with_init_message ... ok [INFO] [stdout] test project::tests::empty_toml_parses_to_defaults ... ok [INFO] [stdout] test project::tests::partial_config_uses_defaults_for_missing_sections ... ok [INFO] [stdout] test project::tests::invalid_toml_returns_error ... ok [INFO] [stdout] test feature::tests::test_update_feature_status ... ok [INFO] [stdout] test journal::tests::test_render_journal_context ... ok [INFO] [stdout] test project::tests::ui_colors_all_tokens_accepted ... ok [INFO] [stdout] test project::tests::ui_colors_invalid_hex_rejected_at_load ... ok [INFO] [stdout] test project::tests::ui_colors_missing_uses_defaults ... ok [INFO] [stdout] test project::tests::ui_colors_partial_overrides ... ok [INFO] [stdout] test project::tests::ui_config_defaults_to_light_theme ... ok [INFO] [stdout] test project::tests::ui_config_missing_section_uses_default ... ok [INFO] [stdout] test project::tests::ui_config_parses_dark_theme ... ok [INFO] [stdout] test project::tests::ui_colors_invalid_name_rejected_at_load ... ok [INFO] [stdout] test review::tests::test_document_kind_labels ... ok [INFO] [stdout] test review::tests::test_parse_review_changes ... ok [INFO] [stdout] test review::tests::test_parse_review_changes_absent ... ok [INFO] [stdout] test review::tests::test_parse_review_changes_empty ... ok [INFO] [stdout] test review::tests::test_parse_review_changes_multiline ... ok [INFO] [stdout] test review::tests::test_parse_review_pass ... ok [INFO] [stdout] test review::tests::test_review_prompt_includes_context ... ok [INFO] [stdout] test review::tests::test_review_prompt_plan_criteria ... ok [INFO] [stdout] test review::tests::test_review_prompt_round_note ... ok [INFO] [stdout] test review::tests::test_review_prompt_spec_criteria ... ok [INFO] [stdout] test feature::tests::test_list_features ... ok [INFO] [stdout] test journal::tests::test_insert_journal_entry_no_notes ... ok [INFO] [stdout] test journal::tests::test_insert_journal_entry ... ok [INFO] [stdout] test journal::tests::test_query_journal_fts ... ok [INFO] [stdout] test journal::tests::test_select_journal_entries ... ok [INFO] [stdout] test journal::tests::test_query_journal_recent ... ok [INFO] [stdout] test project::tests::init_creates_all_files_and_directories ... ok [INFO] [stdout] test project::tests::test_init_creates_knowledge_dir ... ok [INFO] [stdout] test project::tests::init_appends_to_existing_gitignore ... ok [INFO] [stdout] test project::tests::test_init_legacy_skills_notice ... ok [INFO] [stdout] test project::tests::unknown_keys_ignored_for_forward_compat ... ok [INFO] [stdout] test project::tests::test_init_existing_claude_dir ... ok [INFO] [stdout] test run_loop::tests::empty_dag_returns_noplan ... ok [INFO] [stdout] test project::tests::init_is_idempotent ... ok [INFO] [stdout] test run_loop::tests::completed_blockers_are_retrieved ... ok [INFO] [stdout] test run_loop::tests::recover_stuck_target_claim_ignores_other_agent_claim ... ok [INFO] [stdout] test run_loop::tests::last_failure_reason_from_logs ... ok [INFO] [stdout] test project::tests::test_init_no_ralph_skills ... ok [INFO] [stdout] test run_loop::tests::blocked_tasks_return_blocked_outcome ... ok [INFO] [stdout] test run_loop::tests::last_failure_reason_missing ... ok [INFO] [stdout] test project::tests::test_init_creates_claude_skills ... ok [INFO] [stdout] test run_loop::tests::scoped_target_resolved_feature_ignores_unrelated_pending_tasks ... ok [INFO] [stdout] test run_loop::tests::ready_tasks_are_picked_in_order ... ok [INFO] [stdout] test strategy::tests::cost_optimized_ambiguous_progress_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::cost_optimized_empty_progress_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::cost_optimized_failure_signal_returns_opus ... ok [INFO] [stdout] test strategy::tests::cost_optimized_stuck_signal_returns_opus ... ok [INFO] [stdout] test strategy::tests::cost_optimized_two_completions_still_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::escalate_escalation_sequence_haiku_to_sonnet_to_opus ... ok [INFO] [stdout] test strategy::tests::escalate_model_to_level_mapping ... ok [INFO] [stdout] test strategy::tests::escalate_starts_at_haiku ... ok [INFO] [stdout] test strategy::tests::escalate_severe_distress_returns_opus_level ... ok [INFO] [stdout] test strategy::tests::escalate_stays_at_escalated_level_across_iterations ... ok [INFO] [stdout] test strategy::tests::escalate_moderate_distress_returns_sonnet_level ... ok [INFO] [stdout] test strategy::tests::escalate_never_auto_de_escalates ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_ignores_iteration_number ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_returns_configured_model ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_returns_haiku_when_configured ... ok [INFO] [stdout] test strategy::tests::hint_matching_strategy_is_not_override ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_same_model_across_iterations ... ok [INFO] [stdout] test strategy::tests::hint_differing_from_strategy_is_override ... ok [INFO] [stdout] test strategy::tests::hint_overrides_fixed_strategy ... ok [INFO] [stdout] test strategy::tests::no_hint_means_no_override ... ok [INFO] [stdout] test strategy::tests::escalate_hint_de_escalates_level ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_config_starts_at_opus ... ok [INFO] [stdout] test strategy::tests::escalate_hint_can_escalate_level ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_direct_function_iteration_1 ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_direct_function_iteration_2_plus ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_iteration_1 ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_to_haiku ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_hint_overrides_to_opus ... ok [INFO] [stdout] test strategy::tests::hint_overrides_cost_optimized_strategy ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_iteration_1_returns_opus ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_iteration_2_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::fixed_strategy_returns_sonnet_when_configured ... ok [INFO] [stdout] test strategy::tests::cost_optimized_default_iteration_1_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_override_detected_on_iteration_2 ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_no_override_when_hint_matches ... ok [INFO] [stdout] test strategy::tests::plan_then_execute_iteration_5_returns_sonnet ... ok [INFO] [stdout] test strategy::tests::escalate_no_distress_stays_haiku ... ok [INFO] [stdout] test strategy::tests::cost_optimized_steady_completions_return_haiku ... ok [INFO] [stdout] test strategy::tests::cost_optimized_errors_override_completions ... ok [INFO] [stdout] test strategy::tests::cost_optimized_error_signals_return_opus ... ok [INFO] [stdout] test tests::context_tests::test_initial_message_spec_resume ... ok [INFO] [stdout] test tests::context_tests::test_initial_message_plan_resume ... ok [INFO] [stdout] test tests::context_tests::test_initial_message_task_new ... ok [INFO] [stdout] test tests::context_tests::test_system_prompt_includes_context ... ok [INFO] [stdout] test tests::context_tests::test_truncate_over_limit ... ok [INFO] [stdout] test tests::context_tests::test_truncate_unicode_safe ... ok [INFO] [stdout] test tests::context_tests::test_truncate_under_limit ... ok [INFO] [stdout] test tests::outcome_blocked_vs_noplan ... ok [INFO] [stdout] test tests::outcome_complete_vs_failure ... ok [INFO] [stdout] test ui::app::tests::choice_mode_cursor_navigation ... ok [INFO] [stdout] test ui::app::tests::choice_mode_number_key_selects ... ok [INFO] [stdout] test strategy::tests::escalate_override_detected_when_hint_differs ... ok [INFO] [stdout] test ui::app::tests::choice_mode_typing_switches_to_freetext ... ok [INFO] [stdout] test ui::app::tests::cursor_navigation_home_end ... ok [INFO] [stdout] test ui::app::tests::cursor_navigation_left_right ... ok [INFO] [stdout] test ui::app::tests::cursor_navigation_up_down ... ok [INFO] [stdout] test ui::app::tests::freetext_ctrl_c_interrupts ... ok [INFO] [stdout] test ui::app::tests::freetext_empty_enter_exits ... ok [INFO] [stdout] test ui::app::tests::freetext_enter_submits ... ok [INFO] [stdout] test ui::app::tests::freetext_shift_enter_inserts_newline ... ok [INFO] [stdout] test ui::app::tests::freetext_typing_and_backspace ... ok [INFO] [stdout] test ui::app::tests::pageup_pagedown_scroll_agent_during_input ... ok [INFO] [stdout] test ui::event::tests::event_line_partial_eq ... ok [INFO] [stdout] test strategy::tests::no_override_means_no_log_entry ... ok [INFO] [stdout] test ui::state::tests::apply_handles_ui_event_event ... ok [INFO] [stdout] test ui::state::tests::apply_updates_status_line ... ok [INFO] [stdout] test ui::state::tests::events_ring_buffer_adjusts_scroll_offset ... ok [INFO] [stdout] test ui::state::tests::events_ring_buffer_caps_at_max ... ok [INFO] [stdout] test ui::state::tests::events_scroll_down_resumes_auto_scroll ... ok [INFO] [stdout] test ui::state::tests::events_scroll_to_bottom ... ok [INFO] [stdout] test ui::state::tests::events_scroll_up_from_auto_scroll ... ok [INFO] [stdout] test ui::state::tests::explorer_scroll_bounds ... ok [INFO] [stdout] test ui::state::tests::input_activation_and_deactivation ... ok [INFO] [stdout] test strategy::tests::override_inserts_without_clobbering_existing_rows ... ok [INFO] [stdout] test ui::tests::no_ui_flag_wins ... ok [INFO] [stdout] test ui::tests::env_parser_defaults_to_auto_for_unknown ... ok [INFO] [stdout] test ui::tests::non_tty_fallback_matrix ... ok [INFO] [stdout] test ui::tests::prompt_calls_fallback_when_ui_not_running ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_all_fields ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_empty_is_noop ... ok [INFO] [stdout] test strategy::tests::override_logged_to_model_overrides_table ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_validate_valid ... ok [INFO] [stdout] test ui::theme::tests::dark_theme_uses_reset_background ... ok [INFO] [stdout] test ui::theme::tests::event_category_style_returns_non_default_for_all_categories ... ok [INFO] [stdout] test ui::theme::tests::event_task_color_override_applies ... ok [INFO] [stdout] test ui::theme::tests::light_theme_uses_reset_background ... ok [INFO] [stdout] test ui::theme::tests::parse_color_hex_invalid ... ok [INFO] [stdout] test ui::theme::tests::parse_color_hex_valid ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_partial_apply ... ok [INFO] [stdout] test ui::theme::tests::parse_color_trims_whitespace ... ok [INFO] [stdout] test ui::theme::tests::color_overrides_validate_invalid ... ok [INFO] [stdout] test ui::theme::tests::parse_color_named ... ok [INFO] [stdout] test ui::theme::tests::parse_color_unknown_name ... ok [INFO] [stdout] test ui::theme::tests::resolve_env_invalid_falls_through_to_config ... ok [INFO] [stdout] test ui::theme::tests::resolve_falls_back_to_dark ... ok [INFO] [stdout] test ui::theme::tests::resolve_env_overrides_config ... ok [INFO] [stdout] test ui::theme::tests::resolve_uses_config_value ... ok [INFO] [stdout] test ui::theme::tests::theme_name_parse_dark ... ok [INFO] [stdout] test ui::theme::tests::theme_name_parse_light ... ok [INFO] [stdout] test ui::theme::tests::theme_name_parse_invalid ... ok [INFO] [stdout] test tests::outcome_variants_exist ... ok [INFO] [stdout] test tests::context_tests::test_initial_message_spec_start ... ok [INFO] [stdout] test tests::context_tests::test_initial_message_plan_start ... ok [INFO] [stdout] test ui::app::tests::backspace_at_mid_cursor ... ok [INFO] [stdout] test ui::app::tests::delete_key ... ok [INFO] [stdout] test ui::state::tests::agent_text_is_capped_and_utf8_safe ... ok [INFO] [stdout] test run_loop::tests::try_release_claim_resets_in_progress_task ... ok [INFO] [stdout] test run_loop::tests::scoped_target_resolved_task_ignores_unrelated_pending_tasks ... ok [INFO] [stdout] test verification::tests::test_parse_verify_fail ... ok [INFO] [stdout] test verification::tests::test_parse_verify_fail_empty ... ok [INFO] [stdout] test verification::tests::test_parse_verify_fail_absent ... ok [INFO] [stdout] test verification::tests::test_parse_verify_pass ... ok [INFO] [stdout] test tests::context_tests::test_gather_context_empty_project ... ok [INFO] [stdout] test ui::view::tests::explorer_screen_renders_title ... ok [INFO] [stdout] test tests::context_tests::test_gather_context_with_claude_md ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_core_panels ... ok [INFO] [stdout] test tests::context_tests::test_gather_context_truncates_large_file ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_active_choices ... ok [INFO] [stdout] test ui::view::tests::input_pane_does_not_panic_on_tiny_frame ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_active_freetext ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_input_pane_inactive ... ok [INFO] [stdout] test run_loop::tests::recover_stuck_target_claim_releases_same_agent_claim ... ok [INFO] [stdout] test tests::context_tests::test_gather_context_with_features ... ok [INFO] [stdout] test ui::view::tests::dashboard_renders_tool_activity_in_left_column ... ok [INFO] [stdout] test ui::view::tests::modal_renders_over_base_screen ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 538 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.76s [INFO] [stdout] [INFO] [stderr] Doc-tests ralph [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0", kill_on_drop: false }` [INFO] [stdout] 9101b37d67faac89e1cdb77d05f73d314c06bd917e53c0475e538462ae42eeb0