[INFO] cloning repository https://github.com/neosam/openspec-tui [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/neosam/openspec-tui" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fneosam%2Fopenspec-tui", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fneosam%2Fopenspec-tui'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 01d914e10f8750f4a8deecd01e1210646594fd64 [INFO] testing neosam/openspec-tui against beta-2026-04-21 for beta-1.96-1 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fneosam%2Fopenspec-tui" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/neosam/openspec-tui [INFO] finished tweaking git repo https://github.com/neosam/openspec-tui [INFO] tweaked toml for git repo https://github.com/neosam/openspec-tui written to /workspace/builds/worker-0-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/neosam/openspec-tui on toolchain beta-2026-04-21 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/neosam/openspec-tui 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" "+beta-2026-04-21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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" "+beta-2026-04-21" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 84c2287e0359d5ed9a5f8961d760fbf9a302d67f32673d0c8d8d82a8f4385471 [INFO] running `Command { std: "docker" "start" "-a" "84c2287e0359d5ed9a5f8961d760fbf9a302d67f32673d0c8d8d82a8f4385471", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "84c2287e0359d5ed9a5f8961d760fbf9a302d67f32673d0c8d8d82a8f4385471", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "84c2287e0359d5ed9a5f8961d760fbf9a302d67f32673d0c8d8d82a8f4385471", kill_on_drop: false }` [INFO] [stdout] 84c2287e0359d5ed9a5f8961d760fbf9a302d67f32673d0c8d8d82a8f4385471 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 6d744d90b3367ed73bc5383f32330ede244170f1ca8d47d26dd2687a2518a8f8 [INFO] running `Command { std: "docker" "start" "-a" "6d744d90b3367ed73bc5383f32330ede244170f1ca8d47d26dd2687a2518a8f8", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.182 [INFO] [stderr] Compiling unicode-width v0.2.0 [INFO] [stderr] Compiling lru v0.16.3 [INFO] [stderr] Compiling num-conv v0.2.0 [INFO] [stderr] Compiling regex-syntax v0.8.10 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Compiling winnow v0.7.14 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling compact_str v0.9.0 [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Compiling aho-corasick v1.1.4 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling convert_case v0.10.0 [INFO] [stderr] Compiling toml_datetime v1.0.0+spec-1.1.0 [INFO] [stderr] Compiling rstest_macros v0.26.1 [INFO] [stderr] Compiling indexmap v2.13.0 [INFO] [stderr] Compiling litrs v1.0.0 [INFO] [stderr] Compiling quick-xml v0.38.4 [INFO] [stderr] Compiling line-clipping v0.3.5 [INFO] [stderr] Compiling unicode-truncate v2.0.1 [INFO] [stderr] Compiling relative-path v1.9.3 [INFO] [stderr] Compiling futures-core v0.3.32 [INFO] [stderr] Compiling glob v0.3.3 [INFO] [stderr] Compiling linked-hash-map v0.5.6 [INFO] [stderr] Compiling slab v0.4.12 [INFO] [stderr] Compiling pulldown-cmark v0.13.1 [INFO] [stderr] Compiling yaml-rust v0.4.5 [INFO] [stderr] Compiling getopts v0.2.24 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling unicase v2.9.0 [INFO] [stderr] Compiling yansi v1.0.1 [INFO] [stderr] Compiling pulldown-cmark-escape v0.11.0 [INFO] [stderr] Compiling simdutf8 v0.1.5 [INFO] [stderr] Compiling document-features v0.2.12 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling time v0.3.47 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling diff v0.1.13 [INFO] [stderr] Compiling futures-timer v3.0.3 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling pretty_assertions v1.4.1 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling onig_sys v69.9.1 [INFO] [stderr] Compiling toml_parser v1.0.9+spec-1.1.0 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling tempfile v3.26.0 [INFO] [stderr] Compiling toml_edit v0.25.4+spec-1.1.0 [INFO] [stderr] Compiling proc-macro-crate v3.5.0 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Compiling futures-macro v0.3.32 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling derive_more v2.1.1 [INFO] [stderr] Compiling crossterm v0.29.0 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling kasuari v0.4.11 [INFO] [stderr] Compiling onig v6.5.1 [INFO] [stderr] Compiling strum v0.27.2 [INFO] [stderr] Compiling ratatui-core v0.1.0 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling rstest v0.26.1 [INFO] [stderr] Compiling ratatui-widgets v0.3.0 [INFO] [stderr] Compiling ratatui-crossterm v0.1.0 [INFO] [stderr] Compiling ansi-to-tui v8.0.1 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling bincode v1.3.3 [INFO] [stderr] Compiling plist v1.8.0 [INFO] [stderr] Compiling serde_yaml v0.9.34+deprecated [INFO] [stderr] Compiling ratatui-macros v0.7.0 [INFO] [stderr] Compiling ratatui v0.30.0 [INFO] [stderr] Compiling syntect v5.3.0 [INFO] [stderr] Compiling tui-markdown v0.3.7 [INFO] [stderr] Compiling openspec-tui v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 48.20s [INFO] running `Command { std: "docker" "inspect" "6d744d90b3367ed73bc5383f32330ede244170f1ca8d47d26dd2687a2518a8f8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6d744d90b3367ed73bc5383f32330ede244170f1ca8d47d26dd2687a2518a8f8", kill_on_drop: false }` [INFO] [stdout] 6d744d90b3367ed73bc5383f32330ede244170f1ca8d47d26dd2687a2518a8f8 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 501b3e2ec033b48a0f6a083e0400bbf53c08d1262f7ad8cbf8d5f33e74e62dc1 [INFO] running `Command { std: "docker" "start" "-a" "501b3e2ec033b48a0f6a083e0400bbf53c08d1262f7ad8cbf8d5f33e74e62dc1", kill_on_drop: false }` [INFO] [stderr] Compiling openspec-tui v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 4.56s [INFO] running `Command { std: "docker" "inspect" "501b3e2ec033b48a0f6a083e0400bbf53c08d1262f7ad8cbf8d5f33e74e62dc1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "501b3e2ec033b48a0f6a083e0400bbf53c08d1262f7ad8cbf8d5f33e74e62dc1", kill_on_drop: false }` [INFO] [stdout] 501b3e2ec033b48a0f6a083e0400bbf53c08d1262f7ad8cbf8d5f33e74e62dc1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 4a7ab5f03c5dda84df387502d0d3659a9e0dad4280b38eaca7fbbb49b510a11c [INFO] running `Command { std: "docker" "start" "-a" "4a7ab5f03c5dda84df387502d0d3659a9e0dad4280b38eaca7fbbb49b510a11c", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.23s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/openspec_tui-d6de3ed57f422e16) [INFO] [stdout] [INFO] [stdout] running 356 tests [INFO] [stdout] test app::tests::test_artifact_menu_navigation ... ok [INFO] [stdout] test app::tests::test_advance_batch_with_explicit_failure ... ok [INFO] [stdout] test app::tests::test_advance_batch_with_explicit_success ... ok [INFO] [stdout] test app::tests::test_artifact_view_scrolling ... ok [INFO] [stdout] test app::tests::test_c_key_pushes_config_screen_from_change_list ... ok [INFO] [stdout] test app::tests::test_c_key_pushes_config_screen_from_artifact_view ... ok [INFO] [stdout] test app::tests::test_c_key_pushes_config_screen_from_artifact_menu ... ok [INFO] [stdout] test app::tests::test_change_list_g_ignored_on_archived_tab ... ok [INFO] [stdout] test app::tests::test_change_list_empty_navigation ... ok [INFO] [stdout] test app::tests::test_config_d_in_navigation_mode_resets ... ok [INFO] [stdout] test app::tests::test_change_list_i_ignored_on_archived_tab ... ok [INFO] [stdout] test app::tests::test_config_delete_at_end_noop ... ok [INFO] [stdout] test app::tests::test_change_list_g_opens_dependency_graph ... ok [INFO] [stdout] test app::tests::test_change_list_navigation ... ok [INFO] [stdout] test app::tests::test_change_list_i_signals_interactive_launch_on_active_tab ... ok [INFO] [stdout] test app::tests::test_config_backspace_at_start_noop ... ok [INFO] [stdout] test app::tests::test_config_enter_activates_edit_mode ... ok [INFO] [stdout] test app::tests::test_config_backspace_in_command_field ... ok [INFO] [stdout] test app::tests::test_config_enter_exits_edit_mode ... ok [INFO] [stdout] test app::tests::test_config_enter_on_command_doesnt_signal_editor ... ok [INFO] [stdout] test app::tests::test_config_enter_on_interactive_command_activates_edit ... ok [INFO] [stdout] test app::tests::test_config_delete_in_command_field ... ok [INFO] [stdout] test app::tests::test_config_enter_on_post_prompt_opens_editor ... ok [INFO] [stdout] test app::tests::test_config_enter_on_prompt_returns_true ... ok [INFO] [stdout] test app::tests::test_config_esc_exits_edit_mode ... ok [INFO] [stdout] test app::tests::test_config_enter_on_run_finished_command_activates_edit ... ok [INFO] [stdout] test app::tests::test_config_reset_includes_post_implementation_prompt ... ok [INFO] [stdout] test app::tests::test_config_reset_defaults_restores_run_finished_command ... ok [INFO] [stdout] test app::tests::test_config_reset_defaults_restores_interactive_command ... ok [INFO] [stdout] test app::tests::test_config_char_keys_ignored_in_navigation_mode ... ok [INFO] [stdout] test app::tests::test_config_screen_cursor_starts_at_end ... ok [INFO] [stdout] test app::tests::test_config_screen_focused_on_command ... ok [INFO] [stdout] test app::tests::test_config_screen_has_cloned_config_values ... ok [INFO] [stdout] test app::tests::test_build_artifact_menu_items_all_done ... ok [INFO] [stdout] test app::tests::test_config_tab_cycling_includes_interactive_command ... ok [INFO] [stdout] test app::tests::test_config_tab_switches_focus ... ok [INFO] [stdout] test app::tests::test_config_typing_in_command_field ... ok [INFO] [stdout] test app::tests::test_config_typing_in_interactive_command_field ... ok [INFO] [stdout] test app::tests::test_config_typing_in_run_finished_command_field ... ok [INFO] [stdout] test app::tests::test_build_artifact_menu_items_some_pending ... ok [INFO] [stdout] test app::tests::test_build_artifact_menu_items_with_implementation_log ... ok [INFO] [stdout] test app::tests::test_config_s_in_navigation_mode_saves ... ok [INFO] [stdout] test app::tests::test_dependencies_item_shows_count ... ok [INFO] [stdout] test app::tests::test_config_esc_discards_changes ... ok [INFO] [stdout] test app::tests::test_config_cursor_movement ... ok [INFO] [stdout] test app::tests::test_config_save_persists_interactive_command ... ok [INFO] [stdout] test app::tests::test_config_save_persists_run_finished_command ... ok [INFO] [stdout] test app::tests::test_dependency_add_enter_adds_and_returns ... ok [INFO] [stdout] test app::tests::test_config_save_includes_post_implementation_prompt ... ok [INFO] [stdout] test app::tests::test_artifact_view_constructed_with_file_path ... ok [INFO] [stdout] test app::tests::test_artifact_view_log_has_file_path ... ok [INFO] [stdout] test app::tests::test_dependencies_item_appears_for_active_change ... ok [INFO] [stdout] test app::tests::test_dependencies_item_not_shown_for_archived_change ... ok [INFO] [stdout] test app::tests::test_config_reset_to_defaults ... ok [INFO] [stdout] test app::tests::test_config_save_updates_app_config ... ok [INFO] [stdout] test app::tests::test_dependency_add_esc_cancels ... ok [INFO] [stdout] test app::tests::test_dependency_add_navigation ... ok [INFO] [stdout] test app::tests::test_dependency_graph_esc_returns ... ok [INFO] [stdout] test app::tests::test_dependency_graph_scrolling ... ok [INFO] [stdout] test app::tests::test_dependency_view_esc_goes_back ... ok [INFO] [stdout] test app::tests::test_dependency_view_navigation ... ok [INFO] [stdout] test app::tests::test_dependency_view_remove ... ok [INFO] [stdout] test app::tests::test_build_artifact_menu_items_without_implementation_log ... ok [INFO] [stdout] test app::tests::test_dependency_view_remove_last_adjusts_selection ... ok [INFO] [stdout] test app::tests::test_dependency_view_remove_on_empty_is_noop ... ok [INFO] [stdout] test app::tests::test_enter_on_dependencies_item_opens_dependency_view ... ok [INFO] [stdout] test app::tests::test_enter_on_dependency_item_loads_run_mode ... ok [INFO] [stdout] test app::tests::test_enter_on_spec_header_is_noop ... ok [INFO] [stdout] test app::tests::test_enter_on_unavailable_artifact_is_noop ... ok [INFO] [stdout] test app::tests::test_find_change_dir_active ... ok [INFO] [stdout] test app::tests::test_l_key_noop_when_log_missing ... ok [INFO] [stdout] test app::tests::test_poll_implementation_clears_on_finished ... ok [INFO] [stdout] test app::tests::test_poll_implementation_finished_advances_batch_to_next ... ok [INFO] [stdout] test app::tests::test_l_key_opens_log_when_exists ... ok [INFO] [stdout] test app::tests::test_poll_implementation_progress_then_finished ... ok [INFO] [stdout] test app::tests::test_poll_implementation_finished_clears_single_batch ... ok [INFO] [stdout] test app::tests::test_m_key_toggles_run_mode_normal_to_apply ... ok [INFO] [stdout] test app::tests::test_poll_implementation_finished_skips_dependent_on_failure ... ok [INFO] [stdout] test app::tests::test_poll_implementation_updates_progress ... ok [INFO] [stdout] test app::tests::test_poll_implementation_stalled_treats_as_failure_skips_dependents ... ok [INFO] [stdout] test app::tests::test_l_key_works_for_archived_changes ... ok [INFO] [stdout] test app::tests::test_r_key_dispatches_apply_mode ... ok [INFO] [stdout] test app::tests::test_poll_implementation_no_messages ... ok [INFO] [stdout] test app::tests::test_m_key_preserves_dependencies ... ok [INFO] [stdout] test app::tests::test_poll_implementation_noop_when_none ... ok [INFO] [stdout] test app::tests::test_m_key_toggles_run_mode_apply_to_normal ... ok [INFO] [stdout] test app::tests::test_r_key_ignored_on_archived_change ... ok [INFO] [stdout] test app::tests::test_find_change_dir_archived ... ok [INFO] [stdout] test app::tests::test_r_key_ignored_when_implementation_running ... ok [INFO] [stdout] test app::tests::test_r_key_navigates_to_log_view ... ok [INFO] [stdout] test app::tests::test_poll_implementation_finished_no_batch_unchanged ... ok [INFO] [stdout] test app::tests::test_r_key_esc_returns_to_artifact_menu ... ok [INFO] [stdout] test app::tests::test_r_key_dispatches_normal_mode_by_default ... ok [INFO] [stdout] test app::tests::test_refresh_screen_artifact_view_no_file_path_is_noop ... ok [INFO] [stdout] test app::tests::test_r_key_works_on_active_change ... ok [INFO] [stdout] test app::tests::test_r_key_starts_implementation ... ok [INFO] [stdout] test app::tests::test_run_all_selection_a_ignored_when_implementation_running ... ok [INFO] [stdout] test app::tests::test_run_all_selection_esc_cancels ... ok [INFO] [stdout] test app::tests::test_run_all_selection_a_keybinding_opens_from_change_list ... ok [INFO] [stdout] test app::tests::test_run_all_selection_enter_empty_shows_error ... ok [INFO] [stdout] test app::tests::test_refresh_screen_dependency_view_reloads ... ok [INFO] [stdout] test app::tests::test_refresh_screen_config_is_noop ... ok [INFO] [stdout] test app::tests::test_run_all_enter_navigates_back ... ok [INFO] [stdout] test app::tests::test_run_all_enter_no_batch_when_none_included ... ok [INFO] [stdout] test app::tests::test_refresh_screen_change_list_clamps_selection ... ok [INFO] [stdout] test app::tests::test_run_all_enter_starts_batch_and_implementation ... ok [INFO] [stdout] test app::tests::test_run_all_entry_fields ... ok [INFO] [stdout] test app::tests::test_refresh_screen_artifact_view_reloads_content ... ok [INFO] [stdout] test app::tests::test_s_key_works_from_artifact_view ... ok [INFO] [stdout] test app::tests::test_run_all_selection_a_ignored_on_archived_tab ... ok [INFO] [stdout] test app::tests::test_run_all_selection_navigation ... ok [INFO] [stdout] test app::tests::test_screen_transition_change_list_to_artifact_menu ... ok [INFO] [stdout] test app::tests::test_screen_transition_esc_from_artifact_view ... ok [INFO] [stdout] test app::tests::test_s_key_noop_when_no_implementation ... ok [INFO] [stdout] test app::tests::test_set_config_post_prompt ... ok [INFO] [stdout] test app::tests::test_run_all_selection_toggle ... ok [INFO] [stdout] test app::tests::test_s_key_stops_implementation ... ok [INFO] [stdout] test app::tests::test_run_all_selection_toggle_blocked_is_noop ... ok [INFO] [stdout] test app::tests::test_screen_transition_esc_from_artifact_menu ... ok [INFO] [stdout] test app::tests::test_s_key_works_from_artifact_menu ... ok [INFO] [stdout] test app::tests::test_stop_running_implementation_clears_batch ... ok [INFO] [stdout] test app::tests::test_stop_running_implementation_no_batch_unchanged ... ok [INFO] [stdout] test app::tests::test_spawn_run_finished_command_does_nothing_when_empty ... ok [INFO] [stdout] test app::tests::test_stop_running_implementation_no_impl_clears_batch ... ok [INFO] [stdout] test app::tests::test_tab_switch_already_on_active_left_noop ... ok [INFO] [stdout] test app::tests::test_tab_switch_already_on_archived_right_noop ... ok [INFO] [stdout] test app::tests::test_tab_switch_active_to_archived ... ok [INFO] [stdout] test app::tests::test_tab_switch_with_h_l_keys ... ok [INFO] [stdout] test config::tests::load_save_tests::test_load_missing_file_returns_defaults ... ok [INFO] [stdout] test config::tests::load_save_tests::test_load_full_file ... ok [INFO] [stdout] test config::tests::load_save_tests::test_load_partial_fields_uses_defaults ... ok [INFO] [stdout] test app::tests::test_tab_switch_archived_to_active ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_command_no_prompt_placeholder ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_command_empty_returns_none ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_command_single_binary ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_command_custom_tool ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_interactive_command_default ... ok [INFO] [stdout] test config::tests::load_save_tests::test_save_and_load_roundtrip ... ok [INFO] [stdout] test config::tests::load_save_tests::test_save_creates_file ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_render_post_prompt_replaces_name ... ok [INFO] [stdout] test app::tests::test_set_config_prompt ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_render_post_prompt_returns_none_when_empty ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_render_post_prompt_without_placeholder ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_command_basic ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_command_default ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_interactive_command_empty_returns_none ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_interactive_command_single_binary ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_render_prompt_default_substitutes_correctly ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_build_interactive_command_with_args ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_render_prompt_replaces_all_occurrences ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_render_prompt_no_placeholder ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_render_post_prompt_replaces_all_occurrences ... ok [INFO] [stdout] test config::tests::placeholder_tests::test_render_prompt_replaces_name ... ok [INFO] [stdout] test config::tests::test_clone ... ok [INFO] [stdout] test config::tests::test_default_command ... ok [INFO] [stdout] test config::tests::test_default_post_implementation_prompt_is_empty ... ok [INFO] [stdout] test config::tests::test_default_interactive_command ... ok [INFO] [stdout] test config::tests::test_default_prompt_contains_context_references ... ok [INFO] [stdout] test config::tests::test_default_run_finished_command_is_empty ... ok [INFO] [stdout] test config::tests::test_deserialize_partial_uses_defaults ... ok [INFO] [stdout] test config::tests::test_deserialize_empty_uses_defaults ... ok [INFO] [stdout] test config::tests::test_deserialize_without_interactive_command_defaults_to_claude ... ok [INFO] [stdout] test config::tests::test_deserialize_without_post_prompt_defaults_to_empty ... ok [INFO] [stdout] test config::tests::test_deserialize_without_run_finished_command_defaults_to_empty ... ok [INFO] [stdout] test config::tests::test_deserialize_with_interactive_command ... ok [INFO] [stdout] test config::tests::test_serialize_roundtrip_with_interactive_command ... ok [INFO] [stdout] test config::tests::test_default_prompt_contains_name_placeholder ... ok [INFO] [stdout] test config::tests::test_serialize_roundtrip ... ok [INFO] [stdout] test config::tests::test_serialize_roundtrip_with_post_prompt ... ok [INFO] [stdout] test data::tests::test_change_config_empty_yaml_defaults ... ok [INFO] [stdout] test data::tests::test_change_config_explicit_apply_mode ... ok [INFO] [stdout] test data::tests::test_change_config_explicit_normal_mode ... ok [INFO] [stdout] test data::tests::test_change_config_missing_run_mode_defaults_to_normal ... ok [INFO] [stdout] test data::tests::test_generate_dependency_graph_empty ... ok [INFO] [stdout] test data::tests::test_generate_dependency_graph_no_deps ... ok [INFO] [stdout] test config::tests::test_serialize_roundtrip_with_run_finished_command ... ok [INFO] [stdout] test data::tests::test_generate_dependency_graph_multiple_roots ... ok [INFO] [stdout] test data::tests::test_generate_dependency_graph_diamond ... ok [INFO] [stdout] test data::tests::test_change_config_roundtrip_serialization ... ok [INFO] [stdout] test data::tests::test_generate_dependency_graph_linear_chain ... ok [INFO] [stdout] test data::tests::test_has_tasks_file_nonexistent_dir ... ok [INFO] [stdout] test data::tests::test_has_tasks_file_exists ... ok [INFO] [stdout] test data::tests::test_has_tasks_file_missing ... ok [INFO] [stdout] test data::tests::test_get_archived_change_status_specs_with_subdirs ... ok [INFO] [stdout] test data::tests::test_list_archived_changes_no_tasks_md ... ok [INFO] [stdout] test data::tests::test_list_archived_changes_empty_directory ... ok [INFO] [stdout] test data::tests::test_get_archived_change_status_all_present ... ok [INFO] [stdout] test data::tests::test_list_archived_changes_with_changes ... ok [INFO] [stdout] test data::tests::test_list_archived_changes_nonexistent_directory ... ok [INFO] [stdout] test data::tests::test_has_tasks_file_is_directory ... ok [INFO] [stdout] test data::tests::test_get_archived_change_status_some_missing ... ok [INFO] [stdout] test data::tests::test_next_unchecked_task_mixed ... ok [INFO] [stdout] test data::tests::test_next_unchecked_task_no_tasks ... ok [INFO] [stdout] test data::tests::test_openspec_command_returns_valid_command ... ok [INFO] [stdout] test data::tests::test_parse_change_list_empty ... ok [INFO] [stdout] test data::tests::test_parse_change_list_multiple_changes ... ok [INFO] [stdout] test data::tests::test_load_change_dependencies_with_deps ... ok [INFO] [stdout] test data::tests::test_next_unchecked_task_first_is_unchecked ... ok [INFO] [stdout] test data::tests::test_next_unchecked_task_all_complete ... ok [INFO] [stdout] test data::tests::test_parse_change_list_output ... ok [INFO] [stdout] test data::tests::test_parse_change_status_output ... ok [INFO] [stdout] test data::tests::test_parse_task_progress_file_not_found ... ok [INFO] [stdout] test data::tests::test_parse_task_progress_all_done ... ok [INFO] [stdout] test data::tests::test_parse_task_progress_mixed ... ok [INFO] [stdout] test data::tests::test_next_unchecked_task_missing_file ... ok [INFO] [stdout] test data::tests::test_read_dependencies_file_missing ... ok [INFO] [stdout] test data::tests::test_read_change_config_with_run_mode ... ok [INFO] [stdout] test data::tests::test_parse_task_progress_none_done ... ok [INFO] [stdout] test data::tests::test_read_run_mode_default ... ok [INFO] [stdout] test data::tests::test_resolve_archived_date_prefix_match ... ok [INFO] [stdout] test data::tests::test_resolve_archived_mixed_names ... ok [INFO] [stdout] test data::tests::test_run_mode_default_is_normal ... ok [INFO] [stdout] test data::tests::test_resolve_archived_exact_match ... ok [INFO] [stdout] test data::tests::test_strip_date_prefix_invalid_format ... ok [INFO] [stdout] test data::tests::test_strip_date_prefix_no_prefix ... ok [INFO] [stdout] test data::tests::test_strip_date_prefix_too_short ... ok [INFO] [stdout] test data::tests::test_strip_date_prefix_valid ... ok [INFO] [stdout] test data::tests::test_parse_task_progress_no_tasks ... ok [INFO] [stdout] test data::tests::test_read_dependencies_with_deps ... ok [INFO] [stdout] test app::tests::test_change_list_i_ignored_during_running_implementation ... ok [INFO] [stdout] test data::tests::test_topological_sort_diamond ... ok [INFO] [stdout] test data::tests::test_topological_sort_direct_cycle ... ok [INFO] [stdout] test data::tests::test_read_run_mode_apply ... ok [INFO] [stdout] test data::tests::test_topological_sort_empty ... ok [INFO] [stdout] test data::tests::test_resolve_archived_nonexistent_directory ... ok [INFO] [stdout] test data::tests::test_read_dependencies_empty_list ... ok [INFO] [stdout] test data::tests::test_resolve_archived_no_match ... ok [INFO] [stdout] test data::tests::test_resolve_archived_ignores_files ... ok [INFO] [stdout] test config::tests::test_deserialize_with_run_finished_command ... ok [INFO] [stdout] test data::tests::test_topological_sort_external_dep_ignored ... ok [INFO] [stdout] test data::tests::test_topological_sort_indirect_cycle ... ok [INFO] [stdout] test data::tests::test_topological_sort_linear_chain ... ok [INFO] [stdout] test data::tests::test_list_archived_changes_sort_order ... ok [INFO] [stdout] test data::tests::test_write_dependencies_overwrites_existing ... ok [INFO] [stdout] test data::tests::test_write_dependencies_creates_file ... ok [INFO] [stdout] test app::tests::test_tab_switch_resets_selection ... ok [INFO] [stdout] test data::tests::test_write_change_config_preserves_run_mode ... ok [INFO] [stdout] test runner::tests::test_apply_run_empty_command_sends_finished_false ... ok [INFO] [stdout] test data::tests::test_write_dependencies_empty_list ... ok [INFO] [stdout] test runner::tests::test_batch_advance_success ... ok [INFO] [stdout] test runner::tests::test_batch_advance_failure_skips_dependents ... ok [INFO] [stdout] test runner::tests::test_batch_current_change_empty_queue ... ok [INFO] [stdout] test runner::tests::test_batch_all_complete_finishes ... ok [INFO] [stdout] test runner::tests::test_batch_advance_failure_continues_independent ... ok [INFO] [stdout] test runner::tests::test_batch_deps_stored ... ok [INFO] [stdout] test runner::tests::test_batch_impl_state_new ... ok [INFO] [stdout] test data::tests::test_write_then_add_dependency ... ok [INFO] [stdout] test runner::tests::test_apply_run_cancel_sends_nothing ... ok [INFO] [stdout] test data::tests::test_write_then_remove_dependency ... ok [INFO] [stdout] test data::tests::test_topological_sort_multiple_roots ... ok [INFO] [stdout] test data::tests::test_write_dependencies_preserves_run_mode ... ok [INFO] [stdout] test runner::tests::test_batch_should_skip_transitive ... ok [INFO] [stdout] test runner::tests::test_batch_total ... ok [INFO] [stdout] test runner::tests::test_batch_should_skip_no_failed_deps ... ok [INFO] [stdout] test runner::tests::test_cancel_flag_shared ... ok [INFO] [stdout] test runner::tests::test_batch_current_change ... ok [INFO] [stdout] test data::tests::test_topological_sort_no_deps ... ok [INFO] [stdout] test runner::tests::test_impl_update_finished ... ok [INFO] [stdout] test runner::tests::test_impl_update_stalled_after_progress ... ok [INFO] [stdout] test runner::tests::test_impl_update_stalled ... ok [INFO] [stdout] test runner::tests::test_child_handle_shared ... ok [INFO] [stdout] test runner::tests::test_config_render_prompt_contains_all_context_references ... ok [INFO] [stdout] test runner::tests::test_impl_state_creation ... ok [INFO] [stdout] test runner::tests::test_cancel_flag_stops_loop ... ok [INFO] [stdout] test runner::tests::test_loop_finishes_when_all_tasks_complete ... ok [INFO] [stdout] test runner::tests::test_progress_counting_via_channel ... ok [INFO] [stdout] test runner::tests::test_loop_uses_custom_config_prompt ... ok [INFO] [stdout] test runner::tests::test_start_apply_sets_log_path ... ok [INFO] [stdout] test runner::tests::test_implementation_loop_writes_run_header ... ok [INFO] [stdout] test runner::tests::test_stop_implementation_kills_child_process ... ok [INFO] [stdout] test runner::tests::test_stop_implementation_no_child ... ok [INFO] [stdout] test runner::tests::test_write_run_header_appends_on_second_call ... ok [INFO] [stdout] test runner::tests::test_write_run_header_creates_file_with_content ... ok [INFO] [stdout] test runner::tests::test_write_task_header_appends ... ok [INFO] [stdout] test runner::tests::test_loop_finishes_when_command_empty ... ok [INFO] [stdout] test runner::tests::test_stop_implementation_sets_cancel_flag ... ok [INFO] [stdout] test runner::tests::test_loop_sends_stalled_on_repeated_spawn_failure ... ok [INFO] [stdout] test runner::tests::test_loop_uses_custom_config_command ... ok [INFO] [stdout] test runner::tests::test_write_task_header_creates_file_with_content ... ok [INFO] [stdout] test ui::tests::test_change_list_no_deps_no_arrow ... ok [INFO] [stdout] test runner::tests::test_implementation_loop_writes_task_header ... ok [INFO] [stdout] test ui::tests::test_change_list_shows_inline_dependencies ... ok [INFO] [stdout] test ui::tests::test_change_list_shows_interactive_hint_on_active_tab ... ok [INFO] [stdout] test ui::tests::test_change_list_hides_interactive_hint_on_archived_tab ... ok [INFO] [stdout] test ui::tests::test_change_list_deps_truncated_when_long ... ok [INFO] [stdout] test ui::tests::test_config_screen_cursor_visible_in_edit_mode ... ok [INFO] [stdout] test ui::tests::test_config_screen_no_warning_with_prompt_placeholder ... ok [INFO] [stdout] test ui::tests::test_config_screen_navigation_hints ... ok [INFO] [stdout] test ui::tests::test_config_screen_post_prompt_editor_hint_when_focused ... ok [INFO] [stdout] test ui::tests::test_config_screen_edit_mode_hints ... ok [INFO] [stdout] test ui::tests::test_config_screen_no_cursor_in_navigation_mode ... ok [INFO] [stdout] test runner::tests::test_apply_run_no_progress_or_stalled ... ok [INFO] [stdout] test ui::tests::test_config_screen_shows_command_title ... ok [INFO] [stdout] test ui::tests::test_config_screen_prompt_warning_in_both_modes ... ok [INFO] [stdout] test ui::tests::test_config_screen_shows_disabled_when_empty_post_prompt ... ok [INFO] [stdout] test ui::tests::test_config_screen_shows_editor_hint_when_prompt_focused ... ok [INFO] [stdout] test ui::tests::test_config_screen_shows_post_implementation_prompt_title ... ok [INFO] [stdout] test ui::tests::test_config_screen_shows_interactive_command_field ... ok [INFO] [stdout] test ui::tests::test_config_screen_shows_prompt ... ok [INFO] [stdout] test ui::tests::test_config_screen_warns_missing_prompt_placeholder ... ok [INFO] [stdout] test ui::tests::test_dependency_add_shows_available_changes ... ok [INFO] [stdout] test ui::tests::test_config_screen_shows_keybinding_hints ... ok [INFO] [stdout] test ui::tests::test_config_screen_shows_prompt_title ... ok [INFO] [stdout] test runner::tests::test_apply_run_sends_only_finished ... ok [INFO] [stdout] test ui::tests::test_dependency_add_shows_title ... ok [INFO] [stdout] test ui::tests::test_config_screen_shows_command ... ok [INFO] [stdout] test runner::tests::test_apply_run_writes_run_header ... ok [INFO] [stdout] test ui::tests::test_dependency_view_selection_highlight ... ok [INFO] [stdout] test ui::tests::test_draw_dependency_graph_shows_back_hint ... ok [INFO] [stdout] test ui::tests::test_draw_dependency_graph_shows_scroll_position ... ok [INFO] [stdout] test ui::tests::test_draw_dependency_graph_shows_content ... ok [INFO] [stdout] test ui::tests::test_dependency_view_shows_title ... ok [INFO] [stdout] test ui::tests::test_dependency_view_shows_dependencies ... ok [INFO] [stdout] test ui::tests::test_empty_message_active_tab ... ok [INFO] [stdout] test ui::tests::test_empty_message_archived_tab ... ok [INFO] [stdout] test ui::tests::test_dependency_view_shows_keybinding_hints ... ok [INFO] [stdout] test ui::tests::test_dependency_add_shows_keybinding_hints ... ok [INFO] [stdout] test ui::tests::test_layout_not_split_when_no_implementation ... ok [INFO] [stdout] test ui::tests::test_dependency_view_shows_empty_message ... ok [INFO] [stdout] test ui::tests::test_markdown_headers_rendered_as_formatted_text ... ok [INFO] [stdout] test ui::tests::test_indented_code_block_rendered ... ok [INFO] [stdout] test ui::tests::test_non_log_files_use_markdown_rendering ... ok [INFO] [stdout] test ui::tests::test_run_all_selection_shows_blocked ... ok [INFO] [stdout] test ui::tests::test_plain_text_preserves_single_newlines ... ok [INFO] [stdout] test ui::tests::test_run_all_selection_shows_error ... ok [INFO] [stdout] test ui::tests::test_plain_text_preserves_separator_lines ... ok [INFO] [stdout] test ui::tests::test_run_all_selection_shows_checkboxes ... ok [INFO] [stdout] test ui::tests::test_run_all_selection_empty_shows_message ... ok [INFO] [stdout] test ui::tests::test_run_all_selection_shows_title ... ok [INFO] [stdout] test ui::tests::test_run_all_selection_shows_progress ... ok [INFO] [stdout] test ui::tests::test_run_all_selection_shows_keybinding_hints ... ok [INFO] [stdout] test ui::tests::test_status_bar_batch_with_failures ... ok [INFO] [stdout] test ui::tests::test_status_bar_batch_with_skips ... ok [INFO] [stdout] test ui::tests::test_status_bar_no_batch_unchanged ... ok [INFO] [stdout] test ui::tests::test_status_bar_all_complete ... ok [INFO] [stdout] test ui::tests::test_short_lines_remain_unchanged ... ok [INFO] [stdout] test ui::tests::test_status_bar_shows_change_name ... ok [INFO] [stdout] test ui::tests::test_status_bar_batch_progress ... ok [INFO] [stdout] test ui::tests::test_status_bar_shows_task_counts ... ok [INFO] [stdout] test ui::tests::test_status_bar_shows_stop_hint ... ok [INFO] [stdout] test ui::tests::test_status_bar_shows_log_path ... ok [INFO] [stdout] test ui::tests::test_status_bar_zero_total ... ok [INFO] [stdout] test ui::tests::test_title_rendering_active_tab ... ok [INFO] [stdout] test ui::tests::test_status_bar_shows_progress_bar ... ok [INFO] [stdout] test ui::tests::test_long_lines_are_wrapped ... ok [INFO] [stdout] test ui::tests::test_title_rendering_archived_tab ... ok [INFO] [stdout] test ui::tests::test_draw_full_app_with_config_screen ... ok [INFO] [stdout] test ui::tests::test_layout_split_when_implementation_running ... ok [INFO] [stdout] test ui::tests::test_code_blocks_rendered_with_highlighting ... ok [INFO] [stdout] test app::tests::test_poll_implementation_does_not_fire_hook_mid_batch ... ok [INFO] [stdout] test app::tests::test_spawn_run_finished_command_runs_when_set ... ok [INFO] [stdout] test app::tests::test_poll_implementation_fires_hook_on_single_run_finish ... ok [INFO] [stdout] test runner::tests::test_start_apply_cancel_flag_works ... ok [INFO] [stdout] test runner::tests::test_loop_continues_past_failed_runs_with_eventual_progress ... ok [INFO] [stdout] test runner::tests::test_loop_sends_stalled_after_three_no_progress_runs ... ok [INFO] [stdout] test runner::tests::test_stall_counter_resets_on_progress ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 356 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.57s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "4a7ab5f03c5dda84df387502d0d3659a9e0dad4280b38eaca7fbbb49b510a11c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4a7ab5f03c5dda84df387502d0d3659a9e0dad4280b38eaca7fbbb49b510a11c", kill_on_drop: false }` [INFO] [stdout] 4a7ab5f03c5dda84df387502d0d3659a9e0dad4280b38eaca7fbbb49b510a11c