[INFO] cloning repository https://github.com/iwgyyyy/roost
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/iwgyyyy/roost" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fiwgyyyy%2Froost", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fiwgyyyy%2Froost'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 616da53da7198dc8fa12bb119743a8458b71bdac
[INFO] testing iwgyyyy/roost against 1.98.0-beta.1 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fiwgyyyy%2Froost" "/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/iwgyyyy/roost
[INFO] finished tweaking git repo https://github.com/iwgyyyy/roost
[INFO] tweaked toml for git repo https://github.com/iwgyyyy/roost written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/iwgyyyy/roost on toolchain 1.98.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/iwgyyyy/roost already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad
[INFO] running `Command { std: "docker" "start" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling shlex v2.0.1
[INFO] [stderr]    Compiling log v0.4.30
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling http v1.4.1
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling socket2 v0.6.4
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling unicode-width v0.1.14
[INFO] [stderr]    Compiling autocfg v1.5.1
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling zerocopy v0.8.50
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling cc v1.2.63
[INFO] [stderr]    Compiling nix v0.30.1
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling mio v1.2.1
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling pxfm v0.1.29
[INFO] [stderr]    Compiling memchr v2.8.1
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling camino v1.2.2
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling rustls-native-certs v0.8.3
[INFO] [stderr]    Compiling semver v1.0.28
[INFO] [stderr]    Compiling compact_str v0.8.2
[INFO] [stderr]    Compiling homedir v0.3.6
[INFO] [stderr]    Compiling cassowary v0.3.0
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling unicode-width v0.2.0
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling aws-lc-sys v0.41.0
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]    Compiling unicode-truncate v1.1.0
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling moxcms v0.8.1
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling miette-derive v7.6.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling miette v7.6.0
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling hashlink v0.9.1
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling axotag v0.3.0
[INFO] [stderr]    Compiling axoprocess v0.2.1
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling ratatui v0.29.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling image v0.25.10
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling hyper v1.10.1
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling aws-lc-rs v1.17.0
[INFO] [stderr]    Compiling rusqlite v0.32.1
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling rustls-platform-verifier v0.7.0
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.13.4
[INFO] [stderr]    Compiling axoasset v2.0.1
[INFO] [stderr]    Compiling axoupdater v0.10.0
[INFO] [stderr]    Compiling roost v0.1.10 (/opt/rustwide/workdir)
[INFO] [stdout] warning: function `applescript_str` is never used
[INFO] [stdout]    --> src/notify.rs:151:4
[INFO] [stdout]     |
[INFO] [stdout] 151 | fn applescript_str(s: &str) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 37s
[INFO] running `Command { std: "docker" "inspect" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] warning: function `applescript_str` is never used
[INFO] [stdout]    --> src/notify.rs:151:4
[INFO] [stdout]     |
[INFO] [stdout] 151 | fn applescript_str(s: &str) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling roost v0.1.10 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 15.62s
[INFO] running `Command { std: "docker" "inspect" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: function `applescript_str` is never used
[INFO] [stderr]    --> src/notify.rs:151:4
[INFO] [stderr]     |
[INFO] [stderr] 151 | fn applescript_str(s: &str) -> String {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `roost` (lib) generated 1 warning
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.47s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/roost-6cfcd449f16f071f)
[INFO] [stdout] 
[INFO] [stdout] running 838 tests
[INFO] [stdout] test add::tests::cmd_probe_arch_is_uname_sm ... ok
[INFO] [stdout] test add::tests::cmd_install_roost_contains_curl_and_url ... ok
[INFO] [stdout] test add::tests::cmd_resolve_roost_checks_path_then_install_dirs ... ok
[INFO] [stdout] test add::tests::cmd_probe_home_echoes_home_and_ensures_roost_dir ... ok
[INFO] [stdout] test add::tests::default_origin_ip_with_user ... ok
[INFO] [stdout] test add::tests::default_origin_ip_without_user ... ok
[INFO] [stdout] test add::tests::cmd_setup_remote_includes_origin_and_sock ... ok
[INFO] [stdout] test add::tests::default_origin_no_at_returns_whole_string ... ok
[INFO] [stdout] test add::tests::default_origin_strips_user_at ... ok
[INFO] [stdout] test add::tests::default_origin_uses_last_at_segment ... ok
[INFO] [stdout] test add::tests::extract_home_none_when_no_abs_path ... ok
[INFO] [stdout] test add::tests::extract_home_skips_motd_noise ... ok
[INFO] [stdout] test add::tests::extract_roost_path_none_when_only_noise ... ok
[INFO] [stdout] test add::tests::extract_roost_path_skips_motd_noise ... ok
[INFO] [stdout] test add::tests::format_timestamp_epoch_zero ... ok
[INFO] [stdout] test add::tests::format_timestamp_known_date ... ok
[INFO] [stdout] test add::tests::parse_arch_darwin_x86_64 ... ok
[INFO] [stdout] test add::tests::parse_arch_darwin_arm64_normalised_to_aarch64 ... ok
[INFO] [stdout] test add::tests::parse_arch_ignores_motd_line_starting_with_os_word ... ok
[INFO] [stdout] test add::tests::parse_arch_errs_when_no_valid_line ... ok
[INFO] [stdout] test add::tests::parse_arch_linux_x86_64 ... ok
[INFO] [stdout] test add::tests::parse_arch_skips_motd_noise_before_uname ... ok
[INFO] [stdout] test add::tests::parse_arch_linux_aarch64_normalised_to_arm64 ... ok
[INFO] [stdout] test add::tests::parse_arch_lowercases_os ... ok
[INFO] [stdout] test add::tests::run_add_calls_ssh_in_correct_order_roost_present ... ok
[INFO] [stdout] test add::tests::parse_arch_rejects_empty_string ... ok
[INFO] [stdout] test add::tests::parse_arch_rejects_single_word ... ok
[INFO] [stdout] test config::tests::accent_color_custom_hex_parses_correctly ... ok
[INFO] [stdout] test config::tests::accent_empty_json_defaults_to_orange ... ok
[INFO] [stdout] test config::tests::accent_json_custom_value_is_parsed ... ok
[INFO] [stdout] test add::tests::run_add_fails_when_setup_fails ... ok
[INFO] [stdout] test add::tests::run_add_fails_fast_on_connectivity_error ... ok
[INFO] [stdout] test config::tests::accent_color_invalid_hex_falls_back_to_orange ... ok
[INFO] [stdout] test add::tests::run_add_installs_roost_when_absent ... ok
[INFO] [stdout] test config::tests::accent_color_default_is_orange_rgb ... ok
[INFO] [stdout] test add::tests::run_add_respects_explicit_origin ... ok
[INFO] [stdout] test add::tests::run_add_multiple_targets_creates_separate_entries ... ok
[INFO] [stdout] test config::tests::accent_default_is_orange_hex ... ok
[INFO] [stdout] test add::tests::run_add_fails_when_installer_fails ... ok
[INFO] [stdout] test config::tests::corrupt_json_returns_default ... ok
[INFO] [stdout] test add::tests::run_add_is_idempotent ... ok
[INFO] [stdout] test add::tests::run_add_derives_origin_from_target ... ok
[INFO] [stdout] test config::tests::accent_roundtrip_via_file ... ok
[INFO] [stdout] test add::tests::run_add_is_robust_to_motd_noise_on_stdout ... ok
[INFO] [stdout] test add::tests::run_add_writes_registry_entry ... ok
[INFO] [stdout] test config::tests::accent_serializes_to_json_key ... ok
[INFO] [stdout] test add::tests::run_add_setup_command_contains_origin ... ok
[INFO] [stdout] test config::tests::hex_to_color_invalid_falls_back_to_orange ... ok
[INFO] [stdout] test config::tests::hex_to_color_without_hash ... ok
[INFO] [stdout] test config::tests::remote_offline_empty_json_is_false ... ok
[INFO] [stdout] test config::tests::partial_json_preserves_defaults ... ok
[INFO] [stdout] test config::tests::empty_json_equals_default ... ok
[INFO] [stdout] test config::tests::remote_offline_corrupt_json_falls_back_to_default ... ok
[INFO] [stdout] test config::tests::remote_offline_roundtrip_enabled ... ok
[INFO] [stdout] test config::tests::remote_offline_defaults_to_false ... ok
[INFO] [stdout] test daemon::tests::none_origin_normalises_to_local ... ok
[INFO] [stdout] test config::tests::save_load_roundtrip ... ok
[INFO] [stdout] test config::tests::remote_offline_roundtrip_disabled ... ok
[INFO] [stdout] test config::tests::stage_for_mappings ... ok
[INFO] [stdout] test config::tests::default_is_all_enabled ... ok
[INFO] [stdout] test daemon::tests::session_view_origin_reflects_agent_session_origin ... ok
[INFO] [stdout] test daemon::tests::daemon_state_views_sorted ... ok
[INFO] [stdout] test daemon::tests::edge_working_to_approval_triggers_notification ... ok
[INFO] [stdout] test daemon::tests::session_view_cwd_reflects_agent_session_cwd ... ok
[INFO] [stdout] test daemon::tests::detail_since_is_frozen_when_done ... ok
[INFO] [stdout] test daemon::tests::local_event_origin_is_local ... ok
[INFO] [stdout] test daemon::tests::recent_event_durations_are_stable_across_now ... ok
[INFO] [stdout] test config::tests::remote_offline_partial_json ... ok
[INFO] [stdout] test daemon::tests::same_session_id_different_origin_does_not_collide ... ok
[INFO] [stdout] test daemon::tests::session_view_stale_reflects_agent_session_stale ... ok
[INFO] [stdout] test daemon::tests::stale_session_busy_secs_does_not_advance ... ok
[INFO] [stdout] test hook::tests::build_hook_event_cursor_reads_session_workspace_and_tool ... ok
[INFO] [stdout] test hook::tests::build_hook_event_pre_tool_use ... ok
[INFO] [stdout] test hook::tests::build_hook_event_empty_stdin_uses_cwd_env ... ok
[INFO] [stdout] test hook::tests::build_hook_event_carries_origin ... ok
[INFO] [stdout] test hook::tests::build_hook_event_session_start ... ok
[INFO] [stdout] test hook::tests::collect_locators_codex_thread_id ... ok
[INFO] [stdout] test hook::tests::collect_locators_empty_env_all_none ... ok
[INFO] [stdout] test hook::tests::collect_locators_iterm_session_id ... ok
[INFO] [stdout] test hook::tests::collect_locators_ghostty_session_id ... ok
[INFO] [stdout] test hook::tests::collect_locators_no_tmux_when_no_env ... ok
[INFO] [stdout] test hook::tests::collect_locators_tmux_fallback_pane ... ok
[INFO] [stdout] test hook::tests::collect_locators_tmux_target_combines_tmux_and_pane ... ok
[INFO] [stdout] test hook::tests::collect_locators_tty_env_overrides_fd ... ok
[INFO] [stdout] test hook::tests::collect_locators_tty_none_when_no_env_and_no_fd ... ok
[INFO] [stdout] test hook::tests::collect_locators_wezterm_pane ... ok
[INFO] [stdout] test hook::tests::collect_locators_workspace_from_vscode ... ok
[INFO] [stdout] test hook::tests::detect_host_codex_by_codex_thread_id ... ok
[INFO] [stdout] test hook::tests::detect_host_cursor_by_term_program_with_vscode_injection ... ok
[INFO] [stdout] test hook::tests::detect_host_codex_by_codex_session_id ... ok
[INFO] [stdout] test hook::tests::detect_host_ghostty_by_term_program ... ok
[INFO] [stdout] test hook::tests::detect_host_iterm2_by_term_program ... ok
[INFO] [stdout] test hook::tests::detect_host_jetbrains_by_terminal_emulator ... ok
[INFO] [stdout] test hook::tests::detect_host_terminal_app_by_term_program ... ok
[INFO] [stdout] test hook::tests::collect_locators_zellij_session ... ok
[INFO] [stdout] test hook::tests::detect_host_unknown_when_no_hints ... ok
[INFO] [stdout] test hook::tests::detect_host_tmux_by_tmux_env ... ok
[INFO] [stdout] test hook::tests::detect_host_vscode_by_injection ... ok
[INFO] [stdout] test hook::tests::detect_host_warp_by_term_program ... ok
[INFO] [stdout] test hook::tests::detect_host_wezterm_by_wezterm_pane ... ok
[INFO] [stdout] test hook::tests::detect_host_wezterm_wins_over_tmux ... ok
[INFO] [stdout] test hook::tests::detect_host_zellij_by_session_name ... ok
[INFO] [stdout] test hook::tests::parse_codex_event_kinds ... ok
[INFO] [stdout] test hook::tests::parse_family_cases ... ok
[INFO] [stdout] test hook::tests::non_session_start_events_have_no_pid ... ok
[INFO] [stdout] test hook::tests::resolve_agent_pid_falls_back_to_direct_parent_when_no_match ... ok
[INFO] [stdout] test hook::tests::parse_event_kind_cases ... ok
[INFO] [stdout] test hook::tests::resolve_agent_pid_finds_codex_ancestor ... ok
[INFO] [stdout] test hook::tests::resolve_agent_pid_finds_claude_ancestor ... ok
[INFO] [stdout] test hook::tests::resolve_origin_env_wins_over_none_when_no_flag ... ok
[INFO] [stdout] test hook::tests::resolve_origin_flag_wins_over_env ... ok
[INFO] [stdout] test hook::tests::build_hook_event_origin_none_when_not_provided ... ok
[INFO] [stdout] test hook::tests::collect_locators_tty_fd_fallback_when_no_env ... ok
[INFO] [stdout] test hook::tests::resolve_agent_pid_none_when_no_parent ... ok
[INFO] [stdout] test hook::tests::resolve_origin_none_when_neither_flag_nor_env ... ok
[INFO] [stdout] test hook::tests::resolve_sock_flag_wins_over_env ... ok
[INFO] [stdout] test hook::tests::resolve_sock_env_wins_over_default_when_no_flag ... ok
[INFO] [stdout] test jump::deeplink::tests::codex_thread_url_format ... ok
[INFO] [stdout] test jump::deeplink::tests::codex_thread_url_with_special_chars ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_code_insiders ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_cursor ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_jetbrains_does_not_use_r_flag ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_jetbrains_idea ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_jetbrains_webstorm ... ok
[INFO] [stdout] test jump::deeplink::tests::jump_codex_url_failure_falls_back_to_activate ... ok
[INFO] [stdout] test jump::deeplink::tests::jump_codex_with_thread_id_opens_url ... ok
[INFO] [stdout] test jump::deeplink::tests::jump_codex_all_fail_gives_failed ... ok
[INFO] [stdout] test jump::deeplink::tests::jump_codex_no_thread_id_activates_app ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_trae ... ok
[INFO] [stdout] test hook::tests::detect_host_windsurf_by_term_program_with_vscode_injection ... ok
[INFO] [stdout] test hook::tests::detect_host_zed_by_zed_term ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_vscode ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_windsurf ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_zed_does_not_use_r_flag ... ok
[INFO] [stdout] test jump::editors::tests::jetbrains_open_args_correct ... ok
[INFO] [stdout] test jump::editors::tests::vscode_reuse_args_correct ... ok
[INFO] [stdout] test jump::editors::tests::zed_open_args_correct ... ok
[INFO] [stdout] test jump::editors::tests::build_editor_args_zed ... ok
[INFO] [stdout] test jump::target::tests::descriptor_bundle_ids_present_where_expected ... ok
[INFO] [stdout] test hook::tests::resolve_sock_default_when_neither_flag_nor_env ... ok
[INFO] [stdout] test jump::target::tests::descriptor_for_all_registered_hosts ... ok
[INFO] [stdout] test jump::target::tests::descriptor_categories_correct ... ok
[INFO] [stdout] test jump::target::tests::descriptor_for_unknown_returns_none ... ok
[INFO] [stdout] test jump::target::tests::jump_target_from_session_view_carries_local_origin ... ok
[INFO] [stdout] test jump::target::tests::jump_target_from_session_view_carries_remote_origin ... ok
[INFO] [stdout] test jump::platform::tests::real_executor_nonexistent_command_fails ... ok
[INFO] [stdout] test jump::target::tests::jump_target_no_host_app_gives_unknown ... ok
[INFO] [stdout] test jump::target::tests::normalize_codex_variants ... ok
[INFO] [stdout] test jump::target::tests::jump_target_from_session_view_populates_all_fields ... ok
[INFO] [stdout] test jump::target::tests::normalize_cursor ... ok
[INFO] [stdout] test jump::target::tests::normalize_ghostty_variants ... ok
[INFO] [stdout] test jump::target::tests::normalize_iterm_variants ... ok
[INFO] [stdout] test jump::platform::tests::real_executor_can_run_true ... ok
[INFO] [stdout] test jump::target::tests::normalize_jetbrains_family ... ok
[INFO] [stdout] test jump::target::tests::normalize_terminal_variants ... ok
[INFO] [stdout] test jump::target::tests::normalize_tmux_wezterm_zellij ... ok
[INFO] [stdout] test jump::target::tests::normalize_unknown_returns_lowercased ... ok
[INFO] [stdout] test jump::target::tests::normalize_vscode_variants ... ok
[INFO] [stdout] test jump::target::tests::normalize_warp_variants ... ok
[INFO] [stdout] test jump::platform::tests::real_executor_false_fails ... ok
[INFO] [stdout] test jump::target::tests::normalize_zed_variants ... ok
[INFO] [stdout] test jump::target::tests::tui_labels_non_empty ... ok
[INFO] [stdout] test history::tests::window_stats_counts_interventions_and_avg_wait ... ok
[INFO] [stdout] test jump::terminals::tests::applescript_escape_double_quote ... ok
[INFO] [stdout] test jump::terminals::tests::applescript_escape_multiple_quotes ... ok
[INFO] [stdout] test jump::terminals::tests::applescript_escape_no_special_chars ... ok
[INFO] [stdout] test jump::terminals::tests::cmux_focus_rpc_body_is_valid_json ... ok
[INFO] [stdout] test jump::terminals::tests::ghostty_focus_script_contains_ghostty ... ok
[INFO] [stdout] test jump::terminals::tests::iterm2_focus_script_with_session_id ... ok
[INFO] [stdout] test jump::terminals::tests::iterm2_focus_script_with_tty ... ok
[INFO] [stdout] test jump::terminals::tests::iterm2_script_escapes_quotes_in_session_id ... ok
[INFO] [stdout] test jump::terminals::tests::iterm2_focus_script_no_locator_just_activates ... ok
[INFO] [stdout] test jump::terminals::tests::parse_tmux_target_no_pipe ... ok
[INFO] [stdout] test jump::terminals::tests::parse_tmux_target_splits_on_pipe ... ok
[INFO] [stdout] test jump::terminals::tests::terminal_app_focus_script_no_tty_just_activates ... ok
[INFO] [stdout] test jump::terminals::tests::terminal_app_focus_script_with_tty ... ok
[INFO] [stdout] test jump::terminals::tests::tmux_select_pane_args_correct ... ok
[INFO] [stdout] test jump::terminals::tests::tmux_select_window_args_correct ... ok
[INFO] [stdout] test jump::terminals::tests::tmux_socket_from_env_extracts_first_field ... ok
[INFO] [stdout] test jump::terminals::tests::tmux_switch_client_args_correct ... ok
[INFO] [stdout] test jump::terminals::tests::wezterm_activate_pane_args_correct ... ok
[INFO] [stdout] test jump::terminals::tests::zellij_go_to_tab_args_correct ... ok
[INFO] [stdout] test jump::tests::codex_deep_link_failure_falls_back_to_activate_app ... ok
[INFO] [stdout] test jump::tests::codex_deep_link_success_gives_focused ... ok
[INFO] [stdout] test jump::tests::editor_open_in_app_success_gives_activated ... ok
[INFO] [stdout] test jump::tests::fallback_ladder_opens_dir_when_activate_fails ... ok
[INFO] [stdout] test jump::tests::jump_remote_origin_does_not_invoke_executor ... ok
[INFO] [stdout] test jump::tests::jump_remote_origin_returns_unsupported_outcome_with_hint ... ok
[INFO] [stdout] test jump::tests::cmux_rpc_socket_failure_falls_back_to_activate_app ... ok
[INFO] [stdout] test jump::tests::cmux_rpc_success_gives_focused_and_sends_socket ... ok
[INFO] [stdout] test jump::tests::plan_jump_cmux_with_surface_id_gives_cmux_rpc ... ok
[INFO] [stdout] test jump::tests::plan_jump_codex_no_thread_id_gives_activate_app ... ok
[INFO] [stdout] test jump::tests::plan_jump_codex_with_thread_id_gives_deep_link ... ok
[INFO] [stdout] test jump::tests::plan_jump_editor_with_bundle_id_prefers_open_in_app ... ok
[INFO] [stdout] test jump::tests::plan_jump_cursor_with_workspace_gives_editor_cli ... ok
[INFO] [stdout] test jump::tests::plan_jump_ghostty_gives_applescript ... ok
[INFO] [stdout] test jump::tests::plan_jump_cmux_no_surface_id_falls_back_to_activate_app ... ok
[INFO] [stdout] test jump::tests::plan_jump_local_origin_not_degraded ... ok
[INFO] [stdout] test jump::tests::plan_jump_remote_origin_gives_remote_unsupported_strategy ... ok
[INFO] [stdout] test jump::tests::plan_jump_tmux_no_target_gives_unsupported ... ok
[INFO] [stdout] test jump::tests::plan_jump_unknown_host_gives_unsupported ... ok
[INFO] [stdout] test jump::tests::plan_jump_tmux_with_target_gives_tmux_cli ... ok
[INFO] [stdout] test jump::tests::plan_jump_wezterm_with_pane_gives_wezterm_cli ... ok
[INFO] [stdout] test jump::tests::plan_jump_zed_with_workspace_gives_editor_cli ... ok
[INFO] [stdout] test jump::tests::plan_jump_zellij_gives_zellij_cli ... ok
[INFO] [stdout] test jump::tests::plan_jump_warp_gives_warp_sqlite ... ok
[INFO] [stdout] test jump::tests::unsupported_host_gives_unsupported_outcome ... ok
[INFO] [stdout] test jump::warp::tests::build_tab_cycle_script_contains_key_code ... ok
[INFO] [stdout] test jump::warp::tests::build_tab_cycle_script_zero_gives_zero_repeat ... ok
[INFO] [stdout] test jump::warp::tests::parse_warp_tabs_missing_table_returns_none ... ok
[INFO] [stdout] test history::tests::schema_applies_and_records_turn ... ok
[INFO] [stdout] test jump::warp::tests::parse_warp_tabs_three_tabs_middle_active ... ok
[INFO] [stdout] test jump::warp::tests::tab_cycle_steps_first_to_last ... ok
[INFO] [stdout] test history::tests::window_respects_time_horizon ... ok
[INFO] [stdout] test jump::warp::tests::parse_warp_tabs_no_frontmost_window_returns_none ... ok
[INFO] [stdout] test jump::warp::tests::tab_cycle_steps_forward ... ok
[INFO] [stdout] test jump::warp::tests::tab_cycle_steps_last_to_first ... ok
[INFO] [stdout] test jump::warp::tests::parse_warp_tabs_single_active_tab ... ok
[INFO] [stdout] test jump::warp::tests::cycle_steps_wrap_from_parsed_tabs ... ok
[INFO] [stdout] test history::tests::tool_counts_persist_as_json ... ok
[INFO] [stdout] test history::tests::daily_work_groups_and_sums ... ok
[INFO] [stdout] test jump::warp::tests::parse_warp_tabs_five_tabs_last_active ... ok
[INFO] [stdout] test jump::warp::tests::tab_cycle_steps_same_tab ... ok
[INFO] [stdout] test jump::warp::tests::tab_cycle_steps_one_tab ... ok
[INFO] [stdout] test history::tests::readonly_connection_reads_written_data ... ok
[INFO] [stdout] test jump::warp::tests::warp_tabs_query_is_valid_sql_fragment ... ok
[INFO] [stdout] test jump::warp::tests::tab_cycle_steps_wraps_around ... ok
[INFO] [stdout] test list::tests::cjk_name_and_activity_cells_have_correct_display_width ... ok
[INFO] [stdout] test jump::warp::tests::tab_cycle_steps_zero_tabs ... ok
[INFO] [stdout] test list::tests::format_relative_time_cases ... ok
[INFO] [stdout] test list::tests::print_sessions_does_not_panic ... ok
[INFO] [stdout] test jump::warp::tests::parse_warp_tabs_no_active_tab_returns_none ... ok
[INFO] [stdout] test list_remotes::tests::list_remotes_request_roundtrip ... ok
[INFO] [stdout] test jump::warp::tests::parse_warp_tabs_empty_tabs_returns_none ... ok
[INFO] [stdout] test jump::warp::tests::cycle_steps_from_parsed_tabs ... ok
[INFO] [stdout] test list_remotes::tests::remote_status_roundtrip ... ok
[INFO] [stdout] test history::tests::project_is_deduped_and_name_updated ... ok
[INFO] [stdout] test list_remotes::tests::render_online_no_offline_message ... ok
[INFO] [stdout] test list_remotes::tests::render_multiple_remotes_all_present ... ok
[INFO] [stdout] test list_remotes::tests::render_shows_daemon_offline_message ... ok
[INFO] [stdout] test list_remotes::tests::render_table_has_header_and_row ... ok
[INFO] [stdout] test list_remotes::tests::statuses_from_registry_marks_all_as_unknown ... ok
[INFO] [stdout] test list_remotes::tests::query_or_fallback_uses_registry_when_daemon_absent ... ok
[INFO] [stdout] test list_remotes::tests::render_empty_list_shows_helpful_message ... ok
[INFO] [stdout] test list_remotes::tests::render_all_tunnel_states ... ok
[INFO] [stdout] test list_remotes::tests::truncate_exact_length_unchanged ... ok
[INFO] [stdout] test list_remotes::tests::truncate_long_string_gets_ellipsis ... ok
[INFO] [stdout] test list_remotes::tests::truncate_short_string_unchanged ... ok
[INFO] [stdout] test liveness::tests::alive_process_with_recent_event_not_removed ... ok
[INFO] [stdout] test liveness::tests::consecutive_failures_at_threshold_removes ... ok
[INFO] [stdout] test liveness::tests::consecutive_failures_below_threshold_does_not_remove ... ok
[INFO] [stdout] test liveness::tests::ended_flag_removes_immediately ... ok
[INFO] [stdout] test liveness::tests::local_alive_long_idle_is_keep ... ok
[INFO] [stdout] test liveness::tests::local_alive_recent_is_keep ... ok
[INFO] [stdout] test liveness::tests::local_below_threshold_is_keep ... ok
[INFO] [stdout] test liveness::tests::local_dead_plus_idle_timeout_is_remove ... ok
[INFO] [stdout] test liveness::tests::local_dead_threshold_is_remove ... ok
[INFO] [stdout] test liveness::tests::local_session_ended_is_remove ... ok
[INFO] [stdout] test history::tests::project_breakdown_orders_by_busy_desc ... ok
[INFO] [stdout] test liveness::tests::remote_connected_long_idle_is_to_idle ... ok
[INFO] [stdout] test liveness::tests::remote_connected_recent_is_keep ... ok
[INFO] [stdout] test liveness::tests::remote_connected_session_ended_is_remove ... ok
[INFO] [stdout] test liveness::tests::remote_down_session_ended_is_remove ... ok
[INFO] [stdout] test liveness::tests::remote_reconnecting_long_idle_is_to_idle ... ok
[INFO] [stdout] test liveness::tests::remote_reconnecting_recent_is_keep ... ok
[INFO] [stdout] test liveness::tests::remote_reconnecting_session_ended_is_remove ... ok
[INFO] [stdout] test liveness::tests::remote_skips_pid_probe_connected_wins ... ok
[INFO] [stdout] test liveness::tests::remote_skips_pid_probe_tunnel_down_wins ... ok
[INFO] [stdout] test liveness::tests::remote_tunnel_down_is_freeze ... ok
[INFO] [stdout] test liveness::tests::remote_tunnel_down_long_idle_is_still_freeze ... ok
[INFO] [stdout] test liveness::tests::timeout_but_process_alive_does_not_remove ... ok
[INFO] [stdout] test liveness::tests::timeout_with_dead_pid_removes ... ok
[INFO] [stdout] test liveness::tests::zero_consecutive_dead_and_not_ended_not_removed ... ok
[INFO] [stdout] test naming::tests::cwd_home_returns_tilde ... ok
[INFO] [stdout] test naming::tests::cwd_root_returns_slash ... ok
[INFO] [stdout] test naming::tests::deeper_than_toplevel_monorepo_subdir ... ok
[INFO] [stdout] test naming::tests::fallback_deeply_nested_non_git_uses_last_segment ... ok
[INFO] [stdout] test naming::tests::monorepo_deep_path_uses_last_subdir_segment ... ok
[INFO] [stdout] test naming::tests::monorepo_name_within_16_chars_not_truncated ... ok
[INFO] [stdout] test naming::tests::monorepo_name_truncated_to_16 ... ok
[INFO] [stdout] test naming::tests::monorepo_single_level_subdir ... ok
[INFO] [stdout] test naming::tests::non_git_fallback_to_cwd_last_segment ... ok
[INFO] [stdout] test naming::tests::non_monorepo_at_exact_toplevel_returns_repo_name ... ok
[INFO] [stdout] test naming::tests::same_as_toplevel_returns_repo_name ... ok
[INFO] [stdout] test naming::tests::toplevel_none_uses_last_segment ... ok
[INFO] [stdout] test notify::tests::applescript_str_empty_string ... ok
[INFO] [stdout] test notify::tests::applescript_str_escapes_backslash ... ok
[INFO] [stdout] test notify::tests::applescript_str_escapes_backslash_then_quote ... ok
[INFO] [stdout] test notify::tests::applescript_str_escapes_carriage_return ... ok
[INFO] [stdout] test notify::tests::applescript_str_escapes_double_quotes ... ok
[INFO] [stdout] test notify::tests::applescript_str_escapes_newline ... ok
[INFO] [stdout] test notify::tests::applescript_str_wraps_in_double_quotes ... ok
[INFO] [stdout] test notify::tests::approval_to_question_triggers ... ok
[INFO] [stdout] test notify::tests::done_to_done_no_trigger ... ok
[INFO] [stdout] test notify::tests::idle_to_approval_triggers ... ok
[INFO] [stdout] test notify::tests::linux_sound_event_done ... ok
[INFO] [stdout] test notify::tests::linux_sound_event_approval ... ok
[INFO] [stdout] test notify::tests::linux_sound_event_idle_is_none ... ok
[INFO] [stdout] test notify::tests::linux_sound_event_question ... ok
[INFO] [stdout] test notify::tests::linux_sound_event_working_is_none ... ok
[INFO] [stdout] test notify::tests::linux_sound_file_returns_freedesktop_path ... ok
[INFO] [stdout] test notify::tests::linux_urgency_approval_is_critical ... ok
[INFO] [stdout] test notify::tests::linux_urgency_done_is_low ... ok
[INFO] [stdout] test notify::tests::linux_urgency_question_is_normal ... ok
[INFO] [stdout] test notify::tests::notification_text_local_origin_no_prefix ... ok
[INFO] [stdout] test notify::tests::notification_text_no_activity_approval_says_xu_yao_ni ... ok
[INFO] [stdout] test notify::tests::notification_text_no_activity_done_says_wan_cheng ... ok
[INFO] [stdout] test notify::tests::notification_text_no_activity_question_says_xu_yao_ni ... ok
[INFO] [stdout] test notify::tests::notification_text_remote_origin_done ... ok
[INFO] [stdout] test notify::tests::notification_text_remote_origin_prefixes_body ... ok
[INFO] [stdout] test notify::tests::notification_text_remote_origin_with_activity ... ok
[INFO] [stdout] test notify::tests::notification_text_title_is_always_roost ... ok
[INFO] [stdout] test notify::tests::notification_text_uses_display_label ... ok
[INFO] [stdout] test notify::tests::notification_text_with_activity_contains_dash_separator ... ok
[INFO] [stdout] test notify::tests::offline_text_body_contains_origin_and_disconnect ... ok
[INFO] [stdout] test notify::tests::offline_text_exact_format ... ok
[INFO] [stdout] test notify::tests::offline_text_title_is_roost ... ok
[INFO] [stdout] test notify::tests::question_to_question_no_trigger ... ok
[INFO] [stdout] test notify::tests::sound_file_ping ... ok
[INFO] [stdout] test notify::tests::sound_file_returns_correct_path ... ok
[INFO] [stdout] test notify::tests::sound_for_approval ... ok
[INFO] [stdout] test notify::tests::sound_for_done ... ok
[INFO] [stdout] test notify::tests::sound_for_question ... ok
[INFO] [stdout] test notify::tests::sound_for_working_is_none ... ok
[INFO] [stdout] test notify::tests::working_to_done_triggers ... ok
[INFO] [stdout] test notify::tests::working_to_idle_no_trigger ... ok
[INFO] [stdout] test notify::tests::working_to_question_triggers ... ok
[INFO] [stdout] test protocol::tests::hook_event_optional_fields_default ... ok
[INFO] [stdout] test notify::tests::sound_for_idle_is_none ... ok
[INFO] [stdout] test protocol::tests::hook_event_origin_defaults_to_none_when_absent ... ok
[INFO] [stdout] test protocol::tests::hook_event_origin_serializes_when_set ... ok
[INFO] [stdout] test protocol::tests::hook_event_roundtrip ... ok
[INFO] [stdout] test protocol::tests::remote_status_roundtrip ... ok
[INFO] [stdout] test protocol::tests::request_add_remote_roundtrip ... ok
[INFO] [stdout] test protocol::tests::request_list_remotes_roundtrip ... ok
[INFO] [stdout] test protocol::tests::request_list_tagged ... ok
[INFO] [stdout] test protocol::tests::request_remove_remote_roundtrip ... ok
[INFO] [stdout] test protocol::tests::request_report_tagged ... ok
[INFO] [stdout] test protocol::tests::session_view_cwd_defaults_to_empty_when_absent ... ok
[INFO] [stdout] test protocol::tests::session_view_name_is_basename_cwd_is_full_path ... ok
[INFO] [stdout] test protocol::tests::session_view_roundtrip ... ok
[INFO] [stdout] test protocol::tests::tunnel_state_all_variants_roundtrip ... ok
[INFO] [stdout] test remote_supervisor::tests::argv_contains_exit_on_forward_failure ... ok
[INFO] [stdout] test remote_supervisor::tests::argv_last_element_is_target ... ok
[INFO] [stdout] test remote_supervisor::tests::argv_contains_stream_local_bind_unlink ... ok
[INFO] [stdout] test remote_supervisor::tests::argv_reverse_forward_arg_is_correct ... ok
[INFO] [stdout] test remote_supervisor::tests::argv_starts_with_ssh_minus_n ... ok
[INFO] [stdout] test remote_supervisor::tests::backoff_attempt0_is_1s ... ok
[INFO] [stdout] test remote_supervisor::tests::backoff_caps_at_30s ... ok
[INFO] [stdout] test remote_supervisor::tests::backoff_doubles_each_attempt ... ok
[INFO] [stdout] test remote_supervisor::tests::connected_plus_exited_gives_reconnecting ... ok
[INFO] [stdout] test remote_supervisor::tests::down_ignores_all_events ... ok
[INFO] [stdout] test remote_supervisor::tests::reconnecting_plus_exhausted_gives_down ... ok
[INFO] [stdout] test remote_supervisor::tests::reconnecting_plus_exited_stays_reconnecting ... ok
[INFO] [stdout] test remote_supervisor::tests::supervisor_remove_known_origin_returns_true ... ok
[INFO] [stdout] test remote_supervisor::tests::reconnecting_plus_started_gives_connected ... ok
[INFO] [stdout] test remote_supervisor::tests::supervisor_remove_unknown_origin_returns_false ... ok
[INFO] [stdout] test remote_supervisor::tests::argv_contains_server_alive_options ... ok
[INFO] [stdout] test remote_supervisor::tests::supervisor_state_of_after_add_is_reconnecting_or_connected ... ok
[INFO] [stdout] test remote_supervisor::tests::supervisor_state_of_unknown_origin_is_none ... ok
[INFO] [stdout] test remotes::tests::find_missing_origin_returns_none ... ok
[INFO] [stdout] test remotes::tests::find_missing_target_returns_none ... ok
[INFO] [stdout] test remotes::tests::insert_and_find ... ok
[INFO] [stdout] test remotes::tests::list_all ... ok
[INFO] [stdout] test remotes::tests::remove_by_origin_found ... ok
[INFO] [stdout] test remotes::tests::missing_file_returns_empty ... ok
[INFO] [stdout] test remotes::tests::remove_by_origin_missing ... ok
[INFO] [stdout] test remotes::tests::corrupt_json_returns_empty ... ok
[INFO] [stdout] test remotes::tests::remove_by_target_found ... ok
[INFO] [stdout] test remotes::tests::atomic_write_no_tmp_leftover ... ok
[INFO] [stdout] test remotes::tests::remove_by_target_missing ... ok
[INFO] [stdout] test remotes::tests::upsert_idempotent ... ok
[INFO] [stdout] test remotes::tests::save_load_roundtrip ... ok
[INFO] [stdout] test remove::tests::cmd_purge_remote_contains_rm ... ok
[INFO] [stdout] test remove::tests::cmd_uninstall_remote_is_correct ... ok
[INFO] [stdout] test remove::tests::remove_remote_request_serializes_correctly ... ok
[INFO] [stdout] test remotes::tests::upsert_replaces_existing ... ok
[INFO] [stdout] test session::tests::active_since_set_on_working ... ok
[INFO] [stdout] test session::tests::apply_clears_stale_and_resumes_busy ... ok
[INFO] [stdout] test remove::tests::purge_ssh_calls_go_to_correct_target ... ok
[INFO] [stdout] test remove::tests::remove_by_origin_removes_entry_from_registry ... ok
[INFO] [stdout] test remove::tests::remove_when_uninstall_cmd_fails_still_removes_from_registry ... ok
[INFO] [stdout] test remove::tests::remove_when_remote_unreachable_still_removes_from_registry ... ok
[INFO] [stdout] test remove::tests::remove_by_target_removes_entry_from_registry ... ok
[INFO] [stdout] test session::tests::apply_empty_cwd_does_not_clear_existing ... ok
[INFO] [stdout] test remove::tests::remove_unknown_key_returns_error ... ok
[INFO] [stdout] test remove::tests::remove_without_purge_calls_only_uninstall ... ok
[INFO] [stdout] test session::tests::busy_duration_frozen_while_stale ... ok
[INFO] [stdout] test session::tests::apply_updates_cwd_and_name_on_each_event ... ok
[INFO] [stdout] test remove::tests::remove_with_purge_when_unreachable_still_removes_registry ... ok
[INFO] [stdout] test session::tests::clarify_card_is_not_counted_as_a_tool ... ok
[INFO] [stdout] test remove::tests::remove_only_removes_matched_entry ... ok
[INFO] [stdout] test session::tests::clarify_multi_question_shows_count ... ok
[INFO] [stdout] test session::tests::claude_ask_user_question_yields_question_with_text ... ok
[INFO] [stdout] test session::tests::claude_clarify_answer_clears_awaiting_flag ... ok
[INFO] [stdout] test session::tests::claude_permission_notification_does_not_override_clarify ... ok
[INFO] [stdout] test session::tests::codex_clarify_pretooluse_yields_question ... ok
[INFO] [stdout] test session::tests::codex_clarify_then_answer_returns_to_working ... ok
[INFO] [stdout] test session::tests::codex_no_session_end_returns_false ... ok
[INFO] [stdout] test session::tests::codex_notification_is_noop ... ok
[INFO] [stdout] test session::tests::codex_non_clarify_pretooluse_does_not_change_state ... ok
[INFO] [stdout] test session::tests::codex_permission_request_yields_approval ... ok
[INFO] [stdout] test session::tests::codex_post_tool_use_stays_working ... ok
[INFO] [stdout] test session::tests::codex_session_start_yields_idle ... ok
[INFO] [stdout] test session::tests::codex_stop_yields_done ... ok
[INFO] [stdout] test session::tests::codex_user_prompt_submit_yields_working ... ok
[INFO] [stdout] test session::tests::events_capped_at_max ... ok
[INFO] [stdout] test session::tests::consecutive_working_events_do_not_reset_active_since ... ok
[INFO] [stdout] test session::tests::flush_open_turn_marks_incomplete ... ok
[INFO] [stdout] test session::tests::freeze_stale_is_idempotent ... ok
[INFO] [stdout] test session::tests::freeze_stale_freezes_busy_timer ... ok
[INFO] [stdout] test session::tests::full_lifecycle_sequence ... ok
[INFO] [stdout] test session::tests::idle_notification_detection ... ok
[INFO] [stdout] test session::tests::is_active_states ... ok
[INFO] [stdout] test session::tests::is_approval_notification_cases ... ok
[INFO] [stdout] test session::tests::last_prompt_tracks_most_recent ... ok
[INFO] [stdout] test session::tests::no_turn_open_before_first_prompt ... ok
[INFO] [stdout] test session::tests::notification_other_yields_question ... ok
[INFO] [stdout] test session::tests::pre_tool_use_edit_shows_editing ... ok
[INFO] [stdout] test session::tests::notification_permission_yields_approval ... ok
[INFO] [stdout] test remove::tests::remove_with_purge_calls_uninstall_then_delete_binary ... ok
[INFO] [stdout] test session::tests::session_start_yields_idle ... ok
[INFO] [stdout] test session::tests::post_tool_use_resets_to_thinking ... ok
[INFO] [stdout] test session::tests::stop_freezes_timer_and_accumulates ... ok
[INFO] [stdout] test session::tests::summarize_bash_tool ... ok
[INFO] [stdout] test session::tests::summarize_event_has_summary_in_stored_event ... ok
[INFO] [stdout] test session::tests::summarize_edit_tool ... ok
[INFO] [stdout] test session::tests::apply_cwd_basename_extracted_correctly ... ok
[INFO] [stdout] test session::tests::reactivation_resumes_from_frozen_accum ... ok
[INFO] [stdout] test session::tests::session_end_returns_true ... ok
[INFO] [stdout] test session::tests::stop_yields_done ... ok
[INFO] [stdout] test session::tests::pre_tool_use_bash_shows_running ... ok
[INFO] [stdout] test session::tests::summarize_notification_approval ... ok
[INFO] [stdout] test session::tests::summarize_stop_yields_done ... ok
[INFO] [stdout] test session::tests::turn_closes_on_next_prompt_and_increments_seq ... ok
[INFO] [stdout] test session::tests::turn_closes_on_stop_with_busy_time ... ok
[INFO] [stdout] test session::tests::turn_counts_tool_invocations ... ok
[INFO] [stdout] test session::tests::summarize_permission_request ... ok
[INFO] [stdout] test session::tests::turn_records_needed_input_and_wait ... ok
[INFO] [stdout] test session::tests::unfreeze_stale_does_not_resume_timer_when_paused ... ok
[INFO] [stdout] test session::tests::unfreeze_stale_resumes_busy_timer_when_active ... ok
[INFO] [stdout] test session::tests::user_prompt_submit_yields_working ... ok
[INFO] [stdout] test setup::tests::config_has_roost_hook_detects_installed ... ok
[INFO] [stdout] test setup::tests::cursor_event_names_parse_correctly ... ok
[INFO] [stdout] test setup::tests::config_has_roost_hook_false_when_absent ... ok
[INFO] [stdout] test setup::tests::cursor_roost_entry_has_no_fail_closed ... ok
[INFO] [stdout] test setup::tests::deepseek_event_names_parse_correctly ... ok
[INFO] [stdout] test setup::tests::disable_codex_hooks_feature_sets_false ... ok
[INFO] [stdout] test setup::tests::enable_codex_hooks_feature_empty_toml ... ok
[INFO] [stdout] test setup::tests::deepseek_config_has_roost_hook_detects ... ok
[INFO] [stdout] test setup::tests::enable_codex_hooks_feature_idempotent ... ok
[INFO] [stdout] test setup::tests::enable_codex_hooks_feature_sets_flag ... ok
[INFO] [stdout] test setup::tests::merge_codex_hooks_cleans_stale_root_keys ... ok
[INFO] [stdout] test setup::tests::merge_codex_hooks_idempotent ... ok
[INFO] [stdout] test setup::tests::merge_codex_hooks_from_none_creates_all_events ... ok
[INFO] [stdout] test setup::tests::merge_codex_hooks_permission_request_has_long_timeout ... ok
[INFO] [stdout] test setup::tests::merge_codex_hooks_post_tool_use_has_matcher ... ok
[INFO] [stdout] test setup::tests::merge_codex_hooks_pre_tool_use_matches_clarify_only ... ok
[INFO] [stdout] test setup::tests::merge_codex_hooks_preserves_third_party_style_groups ... ok
[INFO] [stdout] test setup::tests::merge_codex_hooks_uses_nested_group_schema ... ok
[INFO] [stdout] test setup::tests::merge_cursor_from_none_registers_all_events_v1 ... ok
[INFO] [stdout] test setup::tests::merge_cursor_preserves_user_hooks ... ok
[INFO] [stdout] test setup::tests::merge_from_none_correct_command_format ... ok
[INFO] [stdout] test setup::tests::merge_cursor_is_idempotent ... ok
[INFO] [stdout] test setup::tests::merge_is_idempotent ... ok
[INFO] [stdout] test setup::tests::remove_claude_hooks_preserves_user_entries ... ok
[INFO] [stdout] test setup::tests::merge_from_none_creates_all_events ... ok
[INFO] [stdout] test setup::tests::remove_claude_hooks_removes_roost_entries ... ok
[INFO] [stdout] test setup::tests::remove_codex_hooks_removes_roost_groups ... ok
[INFO] [stdout] test setup::tests::remove_codex_hooks_cleans_stale_root_keys ... ok
[INFO] [stdout] test setup::tests::setup_no_flags_codex_command_unchanged ... ok
[INFO] [stdout] test setup::tests::setup_no_flags_cursor_command_unchanged ... ok
[INFO] [stdout] test setup::tests::remove_deepseek_disables_when_no_hooks_left ... ok
[INFO] [stdout] test setup::tests::setup_event_names_parse_correctly ... ok
[INFO] [stdout] test setup::tests::merge_deepseek_from_empty_registers_all_events_and_enables ... ok
[INFO] [stdout] test setup::tests::remove_codex_hooks_preserves_third_party_groups ... ok
[INFO] [stdout] test setup::tests::setup_no_flags_deepseek_command_unchanged ... ok
[INFO] [stdout] test setup::tests::remove_deepseek_strips_roost_keeps_user ... ok
[INFO] [stdout] test setup::tests::setup_no_flags_claude_command_unchanged ... ok
[INFO] [stdout] test setup::tests::merge_deepseek_is_idempotent ... ok
[INFO] [stdout] test setup::tests::setup_with_flags_claude_idempotent ... ok
[INFO] [stdout] test setup::tests::setup_with_origin_only_codex ... ok
[INFO] [stdout] test setup::tests::merge_deepseek_preserves_user_hooks_and_config ... ok
[INFO] [stdout] test setup::tests::setup_with_flags_deepseek ... ok
[INFO] [stdout] test setup::tests::remove_cursor_strips_roost_keeps_user ... ok
[INFO] [stdout] test setup::tests::setup_with_sock_and_origin_claude ... ok
[INFO] [stdout] test setup::tests::merge_preserves_user_hooks ... ok
[INFO] [stdout] test setup::tests::setup_with_sock_and_origin_codex ... ok
[INFO] [stdout] test setup::tests::setup_with_sock_and_origin_cursor ... ok
[INFO] [stdout] test setup::tests::setup_with_sock_only_claude ... ok
[INFO] [stdout] test sock::tests::is_listening_returns_false_for_nonexistent ... ok
[INFO] [stdout] test sock::tests::socket_path_contains_user_namespace ... ok
[INFO] [stdout] test sock::tests::socket_path_fallback_to_tmp_when_no_tmpdir ... ok
[INFO] [stdout] test tui::anim::tests::anim_new_does_not_panic ... ok
[INFO] [stdout] test tui::anim::tests::breathe_at_half_period_is_near_one ... ok
[INFO] [stdout] test tui::anim::tests::breathe_at_zero_is_near_zero ... ok
[INFO] [stdout] test tui::anim::tests::breathe_triangle_wave_rising_half_is_linear ... ok
[INFO] [stdout] test tui::anim::tests::breathe_is_in_range ... ok
[INFO] [stdout] test tui::anim::tests::breathe_triangle_wave_wraps_to_zero ... ok
[INFO] [stdout] test tui::anim::tests::heartbeat_on_at_start ... ok
[INFO] [stdout] test tui::anim::tests::breathe_triangle_wave_quarter_point_is_0_25 ... ok
[INFO] [stdout] test tui::anim::tests::breathe_triangle_wave_falling_half_is_linear ... ok
[INFO] [stdout] test tui::anim::tests::heartbeat_off_after_55_pct ... ok
[INFO] [stdout] test tui::anim::tests::heartbeat_wraps ... ok
[INFO] [stdout] test sock::tests::recv_line_handles_multibyte_utf8 ... ok
[INFO] [stdout] test tui::anim::tests::relative_time_days_drop_seconds ... ok
[INFO] [stdout] test tui::anim::tests::relative_time_hours_show_h_m_s ... ok
[INFO] [stdout] test sock::tests::socket_path_with_xdg_runtime_dir ... ok
[INFO] [stdout] test tui::anim::tests::relative_time_minutes_show_seconds ... ok
[INFO] [stdout] test tui::anim::tests::relative_time_zero ... ok
[INFO] [stdout] test tui::anim::tests::spinner_frame_advances_every_90ms ... ok
[INFO] [stdout] test tui::anim::tests::spinner_frame_at_zero_is_first ... ok
[INFO] [stdout] test tui::anim::tests::spinner_frame_returns_valid_braille ... ok
[INFO] [stdout] test tui::anim::tests::spinner_frame_wraps_at_cycle_end ... ok
[INFO] [stdout] test tui::bg_detect::tests::black_bg_is_dark ... ok
[INFO] [stdout] test tui::bg_detect::tests::dark_1c1c_bg_is_dark ... ok
[INFO] [stdout] test tui::bg_detect::tests::light_border_is_visually_lighter_than_dark_gray ... ok
[INFO] [stdout] test tui::bg_detect::tests::light_bg_gives_lighter_border ... ok
[INFO] [stdout] test tui::bg_detect::tests::dark_bg_gives_dark_gray_border ... ok
[INFO] [stdout] test tui::bg_detect::tests::luminance_of_dark_gray_1c1c_is_low ... ok
[INFO] [stdout] test tui::bg_detect::tests::luminance_of_mid_gray_is_near_half ... ok
[INFO] [stdout] test tui::bg_detect::tests::luminance_of_white_is_one ... ok
[INFO] [stdout] test tui::bg_detect::tests::malformed_response_falls_back_to_dark ... ok
[INFO] [stdout] test tui::bg_detect::tests::parse_esc_backslash_terminator ... ok
[INFO] [stdout] test tui::bg_detect::tests::luminance_of_black_is_zero ... ok
[INFO] [stdout] test tui::bg_detect::tests::parse_malformed_returns_none ... ok
[INFO] [stdout] test tui::bg_detect::tests::parse_white_background ... ok
[INFO] [stdout] test tui::bg_detect::tests::white_bg_is_light ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_all_fit_no_scroll ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_empty_input_returns_zero_range ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_exact_fit_no_scroll ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_group_header_at_top ... ok
[INFO] [stdout] test tui::anim::tests::relative_time_seconds ... ok
[INFO] [stdout] test tui::bg_detect::tests::parse_dark_gray_background ... ok
[INFO] [stdout] test sock::tests::socket_path_fallback_with_tmpdir ... ok
[INFO] [stdout] test tui::bg_detect::tests::parse_black_background ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_mixed_heights_selected_in_range ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_no_scrollbar_when_content_fits ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_range_covers_viewport_when_enough_content ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_row_offset_always_zero_for_uniform_cards ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_scrollbar_when_content_overflows ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_selected_always_in_range ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_selected_first_card_offset_zero ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_selected_last_card_fully_visible ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_shorter_than_one_card ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_single_card_exact_fit ... ok
[INFO] [stdout] test tui::layout::tests::card_viewport_single_card_no_scroll ... ok
[INFO] [stdout] test tui::layout::tests::columns_for_100_is_full ... ok
[INFO] [stdout] test tui::layout::tests::columns_for_39_degenerate ... ok
[INFO] [stdout] test tui::layout::tests::columns_for_40_no_icon_no_time ... ok
[INFO] [stdout] test tui::layout::tests::columns_for_5_too_small ... ok
[INFO] [stdout] test tui::layout::tests::columns_for_60_no_label ... ok
[INFO] [stdout] test tui::layout::tests::columns_for_80_no_label ... ok
[INFO] [stdout] test tui::layout::tests::columns_for_99_no_label ... ok
[INFO] [stdout] test tui::layout::tests::columns_for_full_width ... ok
[INFO] [stdout] test tui::layout::tests::family_column_absent_below_60 ... ok
[INFO] [stdout] test tui::layout::tests::family_column_present_at_60_and_above ... ok
[INFO] [stdout] test tui::layout::tests::height_profile_compact ... ok
[INFO] [stdout] test tui::layout::tests::height_profile_critical ... ok
[INFO] [stdout] test tui::layout::tests::height_profile_normal ... ok
[INFO] [stdout] test tui::layout::tests::height_profile_too_small ... ok
[INFO] [stdout] test tui::layout::tests::pad_exact_unchanged ... ok
[INFO] [stdout] test remote_supervisor::tests::supervisor_empty_registry_no_watchers ... ok
[INFO] [stdout] test tui::layout::tests::pad_short_string ... ok
[INFO] [stdout] test tui::layout::tests::pad_wide_unchanged ... ok
[INFO] [stdout] test tui::layout::tests::peek_placement_fullscreen_at_15 ... ok
[INFO] [stdout] test tui::layout::tests::peek_placement_fullscreen_at_8 ... ok
[INFO] [stdout] test tui::layout::tests::peek_placement_fullscreen_at_zero ... ok
[INFO] [stdout] test remote_supervisor::tests::supervisor_add_calls_spawner_with_correct_argv ... ok
[INFO] [stdout] test tui::layout::tests::peek_placement_inline_at_16 ... ok
[INFO] [stdout] test tui::layout::tests::peek_placement_inline_at_24 ... ok
[INFO] [stdout] test remote_supervisor::tests::supervisor_add_same_origin_is_noop ... ok
[INFO] [stdout] test tui::layout::tests::peek_placement_inline_at_large ... ok
[INFO] [stdout] test tui::layout::tests::split_for_inline_peek_odd_height ... ok
[INFO] [stdout] test tui::layout::tests::split_for_inline_peek_splits_evenly ... ok
[INFO] [stdout] test tui::layout::tests::truncate_ascii_adds_ellipsis ... ok
[INFO] [stdout] test tui::layout::tests::truncate_cjk_does_not_overflow ... ok
[INFO] [stdout] test tui::layout::tests::truncate_cwd_long_path_preserves_basename ... ok
[INFO] [stdout] test tui::layout::tests::truncate_cwd_short_path_unchanged ... ok
[INFO] [stdout] test tui::layout::tests::truncate_cwd_very_long_basename_truncated ... ok
[INFO] [stdout] test tui::layout::tests::truncate_cwd_zero_budget_is_empty ... ok
[INFO] [stdout] test tui::layout::tests::truncate_exact_width_unchanged ... ok
[INFO] [stdout] test tui::layout::tests::truncate_mixed_cjk_ascii ... ok
[INFO] [stdout] test tui::layout::tests::truncate_short_string_unchanged ... ok
[INFO] [stdout] test tui::layout::tests::truncate_zero_width_returns_empty ... ok
[INFO] [stdout] test tui::layout::tests::v2_cjk_name_fits ... ok
[INFO] [stdout] test tui::layout::tests::v2_cjk_step_text_fits ... ok
[INFO] [stdout] test tui::layout::tests::v2_cwd_short_path_unchanged ... ok
[INFO] [stdout] test tui::layout::tests::v2_fill_d_absorbs_time_width_change ... ok
[INFO] [stdout] test tui::layout::tests::v2_cwd_long_path_preserves_basename ... ok
[INFO] [stdout] test tui::layout::tests::v2_fill_d_at_least_1 ... ok
[INFO] [stdout] test tui::layout::tests::v2_fill_d_differs_by_1_between_1m30s_and_59m59s ... ok
[INFO] [stdout] test tui::layout::tests::v2_fill_d_differs_by_1_between_2s_and_59s ... ok
[INFO] [stdout] test tui::layout::tests::v2_height_always_4 ... ok
[INFO] [stdout] test tui::layout::tests::v2_inner_width_is_width_minus_2 ... ok
[INFO] [stdout] test tui::layout::tests::v2_narrow_80_col_structure ... ok
[INFO] [stdout] test tui::layout::tests::v2_source_local ... ok
[INFO] [stdout] test tui::layout::tests::v2_source_remote_device ... ok
[INFO] [stdout] test tui::layout::tests::v2_state_glyph_approval ... ok
[INFO] [stdout] test tui::layout::tests::v2_state_glyph_done ... ok
[INFO] [stdout] test tui::layout::tests::v2_state_glyph_offline ... ok
[INFO] [stdout] test tui::layout::tests::v2_state_glyph_question ... ok
[INFO] [stdout] test tui::layout::tests::v2_state_glyph_working ... ok
[INFO] [stdout] test tui::layout::tests::v2_step_approval_uses_activity ... ok
[INFO] [stdout] test tui::layout::tests::v2_step_done_uses_last_prompt ... ok
[INFO] [stdout] test tui::layout::tests::v2_step_idle_uses_last_prompt ... ok
[INFO] [stdout] test tui::layout::tests::v2_step_idle_without_prompt_falls_back_to_new_session ... ok
[INFO] [stdout] test tui::layout::tests::v2_step_offline_falls_back_to_activity ... ok
[INFO] [stdout] test tui::layout::tests::v2_step_working_uses_activity ... ok
[INFO] [stdout] test tui::layout::tests::v2_step_offline_uses_last_prompt_with_offline_prefix ... ok
[INFO] [stdout] test tui::layout::tests::v2_time_approval_uses_busy_secs ... ok
[INFO] [stdout] test tui::layout::tests::v2_time_done_uses_busy_secs_frozen ... ok
[INFO] [stdout] test tui::layout::tests::v2_time_idle_uses_busy_secs_frozen ... ok
[INFO] [stdout] test tui::layout::tests::v2_time_online_working_uses_busy_secs ... ok
[INFO] [stdout] test tui::layout::tests::v2_time_stale_uses_last_activity_secs ... ok
[INFO] [stdout] test tui::layout::tests::v2_time_str_is_natural_width_not_padded ... ok
[INFO] [stdout] test tui::layout::tests::v2_time_str_natural_fill_d_at_least_1 ... ok
[INFO] [stdout] test tui::layout::tests::v2_top_border_total_always_equals_inner_width ... ok
[INFO] [stdout] test tui::layout::tests::v2_top_border_total_with_icon_space_equals_inner_width ... ok
[INFO] [stdout] test tui::layout::tests::v2_via_str_with_host_app ... ok
[INFO] [stdout] test tui::layout::tests::v2_via_str_without_host_app ... ok
[INFO] [stdout] test tui::layout::tests::v2_wide_100_col_structure ... ok
[INFO] [stdout] test tui::peek::tests::peek_contains_esc_close_in_footer ... ok
[INFO] [stdout] test tui::peek::tests::dump_combined_list_plus_inline_peek ... ok
[INFO] [stdout] test tui::peek::tests::peek_contains_path_field ... ok
[INFO] [stdout] test tui::peek::tests::peek_contains_session_id_in_header ... ok
[INFO] [stdout] test tui::peek::tests::peek_contains_recent_events ... ok
[INFO] [stdout] test tui::peek::tests::peek_left_border_on_every_row ... ok
[INFO] [stdout] test tui::peek::tests::dump_peek_fullscreen_ascii ... ok
[INFO] [stdout] test tui::peek::tests::peek_header_right_border_at_73_cols ... ok
[INFO] [stdout] test tui::peek::tests::dump_peek_inline_ascii ... ok
[INFO] [stdout] test tui::peek::tests::peek_field_order_agent_status_source_path_step_since ... ok
[INFO] [stdout] test tui::peek::tests::peek_offline_since_shows_last_seen ... ok
[INFO] [stdout] test tui::peek::tests::peek_right_border_on_every_row ... ok
[INFO] [stdout] test tui::peek::tests::recent_rows_capacity_accounts_for_chrome ... ok
[INFO] [stdout] test tui::render::tests::approval_glyph_has_semantic_rgb ... ok
[INFO] [stdout] test tui::peek::tests::peek_footer_right_border_at_last_col ... ok
[INFO] [stdout] test tui::peek::tests::peek_offline_status_text ... ok
[INFO] [stdout] test tui::peek::tests::peek_offline_timeline_has_lost_connection ... ok
[INFO] [stdout] test tui::render::tests::approval_row_renders_triangle_glyph ... ok
[INFO] [stdout] test tui::peek::tests::peek_source_local_renders ... ok
[INFO] [stdout] test tui::render::tests::card_cjk_activity_does_not_overflow ... ok
[INFO] [stdout] test tui::peek::tests::peek_recent_events_reverse_chron ... ok
[INFO] [stdout] test tui::render::tests::cjk_name_does_not_overflow_column ... ok
[INFO] [stdout] test tui::peek::tests::peek_scroll_reveals_older_events ... ok
[INFO] [stdout] test tui::render::tests::body_first_content_row_is_after_top_padding ... ok
[INFO] [stdout] test tui::peek::tests::peek_source_remote_renders ... ok
[INFO] [stdout] test tui::render::tests::codex_family_label_appears_at_60_cols ... ok
[INFO] [stdout] test tui::render::tests::claude_family_label_appears_at_100_cols ... ok
[INFO] [stdout] test tui::render::tests::done_without_last_prompt_mid_is_empty_not_name ... ok
[INFO] [stdout] test tui::peek::tests::peek_header_right_border_at_last_col ... ok
[INFO] [stdout] test tui::render::tests::body_has_no_outer_side_border_glyph ... ok
[INFO] [stdout] test tui::peek::tests::peek_title_shows_repo_name ... ok
[INFO] [stdout] test tui::render::tests::dump_60_col_frame_ascii ... ok
[INFO] [stdout] test tui::render::tests::done_with_last_prompt_shows_prompt_in_mid ... ok
[INFO] [stdout] test tui::peek::tests::peek_agent_row_shows_icon_and_label ... ok
[INFO] [stdout] test tui::render::tests::card_top_border_not_at_col_0 ... ok
[INFO] [stdout] test tui::render::tests::dump_100_col_frame_ascii ... ok
[INFO] [stdout] test tui::render::tests::family_label_has_family_color ... ok
[INFO] [stdout] test tui::render::tests::empty_state_has_headline ... ok
[INFO] [stdout] test tui::render::tests::cwd_row_follows_selected_session ... ok
[INFO] [stdout] test tui::peek::tests::peek_step_field_label ... ok
[INFO] [stdout] test tui::render::tests::empty_state_lines_are_centered ... ok
[INFO] [stdout] test tui::render::tests::empty_state_has_start_line ... ok
[INFO] [stdout] test tui::render::tests::empty_state_has_watch_line ... ok
[INFO] [stdout] test tui::render::tests::empty_state_has_hooks_line ... ok
[INFO] [stdout] test tui::render::tests::footer_has_no_box_corners ... ok
[INFO] [stdout] test tui::render::tests::empty_state_has_star_glyph ... ok
[INFO] [stdout] test tui::render::tests::empty_state_header_shows_zero ... ok
[INFO] [stdout] test tui::render::tests::frame_card_scroll_selected_card_visible ... ok
[INFO] [stdout] test tui::render::tests::footer_plain_text_contains_key_hints ... ok
[INFO] [stdout] test tui::render::tests::empty_state_renders_without_panic ... ok
[INFO] [stdout] test remote_supervisor::tests::supervisor_boots_all_registry_entries ... ok
[INFO] [stdout] test tui::render::tests::footer_hints_not_at_col_0 ... ok
[INFO] [stdout] test tui::render::tests::footer_right_border_aligns_at_100_cols ... ok
[INFO] [stdout] test tui::render::tests::frame_card_top_border_appears_at_60_cols ... ok
[INFO] [stdout] test tui::render::tests::frame_card_bottom_border_appears_at_80_cols ... ok
[INFO] [stdout] test tui::render::tests::frame_card_top_border_appears_in_body_at_80_cols ... ok
[INFO] [stdout] test tui::render::tests::footer_peek_open_shows_esc_close ... ok
[INFO] [stdout] test tui::render::tests::frame_card_top_border_appears_at_100_cols ... ok
[INFO] [stdout] test tui::render::tests::footer_right_border_aligns_at_73_cols ... ok
[INFO] [stdout] test tui::render::tests::frame_card_body_contains_session_name_at_80 ... ok
[INFO] [stdout] test tui::render::tests::footer_border_is_dark_gray ... ok
[INFO] [stdout] test tui::render::tests::frame_empty_state_no_card_border ... ok
[INFO] [stdout] test tui::render::tests::frame_renders_at_40_cols ... ok
[INFO] [stdout] test tui::render::tests::frame_too_narrow_shows_too_small_notice ... ok
[INFO] [stdout] test tui::render::tests::frame_selected_card_border_is_family_colour ... ok
[INFO] [stdout] test tui::render::tests::frame_renders_at_80_cols ... ok
[INFO] [stdout] test tui::render::tests::frame_renders_at_120_cols ... ok
[INFO] [stdout] test tui::render::tests::frame_group_header_appears_above_card ... ok
[INFO] [stdout] test tui::render::tests::header_border_is_dark_gray ... ok
[INFO] [stdout] test tui::render::tests::frame_stale_card_has_dashed_top_border ... ok
[INFO] [stdout] test tui::render::tests::frame_cjk_name_no_card_border_overflow ... ok
[INFO] [stdout] test tui::render::tests::global_cwd_row_appears_above_footer ... ok
[INFO] [stdout] test tui::render::tests::global_cwd_home_is_abbreviated ... ok
[INFO] [stdout] test tui::render::tests::idle_mid_text_has_dark_gray_fg ... ok
[INFO] [stdout] test tui::render::tests::global_cwd_row_is_dim ... ok
[INFO] [stdout] test tui::render::tests::name_cell_has_no_explicit_fg ... ok
[INFO] [stdout] test tui::render::tests::no_family_label_below_60_cols ... ok
[INFO] [stdout] test tui::render::tests::header_brand_not_at_col_0 ... ok
[INFO] [stdout] test tui::render::tests::mid_column_shows_activity_for_working ... ok
[INFO] [stdout] test tui::render::tests::header_right_border_aligns_at_100_cols ... ok
[INFO] [stdout] test tui::render::tests::header_plain_roost_has_accent_color ... ok
[INFO] [stdout] test tui::render::tests::header_roost_uses_accent_not_family_color ... ok
[INFO] [stdout] test tui::render::tests::header_has_no_box_corners ... ok
[INFO] [stdout] test tui::render::tests::header_plain_text_contains_roost ... ok
[INFO] [stdout] test tui::render::tests::heartbeat_dot_appears_in_header_at_100_cols ... ok
[INFO] [stdout] test tui::render::tests::row_family_icon_still_uses_family_color ... ok
[INFO] [stdout] test tui::render::tests::header_plain_text_shows_agent_count ... ok
[INFO] [stdout] test tui::render::tests::v2_border_unselected_offline_dashed_fill ... ok
[INFO] [stdout] test tui::render::tests::v2_border_unselected_online_thin_corners ... ok
[INFO] [stdout] test tui::render::tests::v2_border_chars_not_bold ... ok
[INFO] [stdout] test tui::render::tests::unselected_row_has_no_selection_bar ... ok
[INFO] [stdout] test tui::render::tests::scrolled_away_group_header_not_rendered ... ok
[INFO] [stdout] test tui::render::tests::v2_border_selected_offline_heavy_accent_with_offline_prefix ... ok
[INFO] [stdout] test tui::render::tests::v2_card_cwd_still_in_row2 ... ok
[INFO] [stdout] test tui::render::tests::scrolled_frame_shows_correct_rows ... ok
[INFO] [stdout] test tui::render::tests::selected_agent_cwd_shown_above_footer ... ok
[INFO] [stdout] test tui::render::tests::v2_approval_time_is_amber ... ok
[INFO] [stdout] test tui::render::tests::header_roost_invariant_to_selected_family ... ok
[INFO] [stdout] test tui::render::tests::v2_border_selected_online_heavy_corners_accent_color ... ok
[INFO] [stdout] test tui::render::tests::no_selection_cwd_row_is_empty ... ok
[INFO] [stdout] test tui::render::tests::side_borders_aligned_at_100_cols ... ok
[INFO] [stdout] test tui::render::tests::header_zero_agents_idle_no_dot ... ok
[INFO] [stdout] test tui::render::tests::v2_card_top_border_cursor_family ... ok
[INFO] [stdout] test tui::render::tests::v2_icon_at_col2_name_at_col4 ... ok
[INFO] [stdout] test tui::render::tests::v2_card_top_border_codex_family ... ok
[INFO] [stdout] test tui::render::tests::v2_card_top_border_deepseek_family_is_codewhale ... ok
[INFO] [stdout] test tui::render::tests::v2_card_top_border_shows_family_name_not_session_name ... ok
[INFO] [stdout] test tui::render::tests::v2_icon_has_family_color ... ok
[INFO] [stdout] test tui::render::tests::v2_icon_has_leading_space_not_at_x0_plus_1 ... ok
[INFO] [stdout] test tui::render::tests::v2_non_working_step_text_is_dim ... ok
[INFO] [stdout] test tui::render::tests::v2_bot_border_right_corner_at_last_col ... ok
[INFO] [stdout] test tui::render::tests::v2_offline_icon_is_dim ... ok
[INFO] [stdout] test tui::render::tests::v2_offline_step_prefix_is_offline_glyph ... ok
[INFO] [stdout] test tui::render::tests::v2_offline_unselected_sides_remain_dashed ... ok
[INFO] [stdout] test tui::render::tests::v2_cjk_name_top_border_aligned ... ok
[INFO] [stdout] test tui::render::tests::v2_frame_session_name_visible_at_80 ... ok
[INFO] [stdout] test tui::render::tests::v2_online_step_prefix_is_arrow ... ok
[INFO] [stdout] test tui::render::tests::v2_online_unselected_corners_remain_solid ... ok
[INFO] [stdout] test tui::render::tests::v2_shorter_time_gives_longer_fill_d ... ok
[INFO] [stdout] test tui::render::tests::v2_selected_card_sides_remain_heavy ... ok
[INFO] [stdout] test tui::render::tests::v2_online_unselected_side_is_dashed_vertical ... ok
[INFO] [stdout] test tui::render::tests::v2_source_remote_is_cold_blue ... ok
[INFO] [stdout] test tui::render::tests::v2_source_local_is_dim ... ok
[INFO] [stdout] test tui::render::tests::v2_working_spinner_is_braille ... ok
[INFO] [stdout] test tui::settings::tests::cursor_line_offsets_are_correct ... ok
[INFO] [stdout] test tui::render::tests::v2_selected_title_name_is_bold ... ok
[INFO] [stdout] test tui::render::tests::v2_working_step_text_is_reset_fg ... ok
[INFO] [stdout] test tui::render::tests::working_mid_text_has_reset_fg ... ok
[INFO] [stdout] test tui::settings::tests::cursor_line_remote_offline_col_ignored ... ok
[INFO] [stdout] test tui::render::tests::v2_via_app_appears_in_source_row ... ok
[INFO] [stdout] test tui::settings::tests::line_count_is_positive_and_stable ... ok
[INFO] [stdout] test tui::settings::tests::move_cursor_down_clamps_at_max_row ... ok
[INFO] [stdout] test tui::settings::tests::move_cursor_left_right_noop_on_remote_offline_row ... ok
[INFO] [stdout] test tui::settings::tests::move_cursor_down_to_remote_offline_resets_col ... ok
[INFO] [stdout] test tui::settings::tests::move_cursor_up_down_normal ... ok
[INFO] [stdout] test tui::settings::tests::move_cursor_up_clamps_at_zero ... ok
[INFO] [stdout] test tui::settings::tests::move_cursor_left_right_normal ... ok
[INFO] [stdout] test tui::settings::tests::move_cursor_left_clamps_at_zero ... ok
[INFO] [stdout] test tui::render::tests::header_right_border_aligns_at_73_cols ... ok
[INFO] [stdout] test tui::render::tests::v2_unselected_title_name_not_bold ... ok
[INFO] [stdout] test tui::settings::tests::move_cursor_down_clamps_at_remote_offline_row ... ok
[INFO] [stdout] test tui::settings::tests::move_cursor_right_clamps_at_max_col ... ok
[INFO] [stdout] test tui::render::tests::v2_top_border_no_duplicate_adjacent_content ... ok
[INFO] [stdout] test tui::render::tests::working_row_has_spinner ... ok
[INFO] [stdout] test tui::settings::tests::scrolling_to_bottom_shows_up_arrow ... ok
[INFO] [stdout] test tui::settings::tests::should_fire_offline_when_cfg_enabled_and_tunnel_down ... ok
[INFO] [stdout] test tui::settings::tests::should_not_fire_offline_when_cfg_disabled ... ok
[INFO] [stdout] test tui::settings::tests::render_shows_remote_offline_label ... ok
[INFO] [stdout] test tui::render::tests::v2_time_natural_width_right_corner_stable ... ok
[INFO] [stdout] test tui::settings::tests::toggle_clarify_banner ... ok
[INFO] [stdout] test tui::settings::tests::toggle_clarify_sound ... ok
[INFO] [stdout] test tui::settings::tests::toggle_does_not_mutate_original ... ok
[INFO] [stdout] test tui::settings::tests::toggle_done_banner_off_to_on ... ok
[INFO] [stdout] test tui::settings::tests::short_terminal_shows_down_arrow ... ok
[INFO] [stdout] test tui::settings::tests::toggle_approve_sound ... ok
[INFO] [stdout] test tui::render::tests::v2_top_border_right_corner_at_last_col ... ok
[INFO] [stdout] test tui::settings::tests::toggle_remote_offline_off_to_on ... ok
[INFO] [stdout] test tui::settings::tests::scroll_advances_to_keep_cursor_visible_on_short_terminal ... ok
[INFO] [stdout] test tui::settings::tests::toggle_remote_offline_on_to_off ... ok
[INFO] [stdout] test tui::settings::tests::toggle_remote_offline_pure ... ok
[INFO] [stdout] test tui::settings::tests::no_scroll_indicator_when_all_fits ... ok
[INFO] [stdout] test tui::settings::tests::render_shows_off_when_disabled ... ok
[INFO] [stdout] test tui::stats::tests::bar_is_proportional_and_clamped ... ok
[INFO] [stdout] test tui::stats::tests::fmt_dur_cases ... ok
[INFO] [stdout] test tui::render::tests::jump_status_renders_above_footer_not_in_border ... ok
[INFO] [stdout] test tui::settings::tests::render_remote_offline_shows_off_when_disabled ... ok
[INFO] [stdout] test tui::settings::tests::render_shows_title_and_stages ... ok
[INFO] [stdout] test tui::settings::tests::render_shows_sound_label ... ok
[INFO] [stdout] test tui::theme::tests::approval_breathe_color_at_one_is_bright ... ok
[INFO] [stdout] test tui::theme::tests::approval_breathe_color_at_zero_is_dim ... ok
[INFO] [stdout] test tui::stats::tests::long_content_scrolls_and_shows_indicators ... ok
[INFO] [stdout] test tui::theme::tests::approval_breathe_color_clamps ... ok
[INFO] [stdout] test tui::stats::tests::render_empty_stats_says_no_history ... ok
[INFO] [stdout] test tui::theme::tests::family_icon_claude ... ok
[INFO] [stdout] test tui::settings::tests::render_remote_offline_shows_on_when_enabled ... ok
[INFO] [stdout] test tui::theme::tests::family_icon_codex ... ok
[INFO] [stdout] test tui::theme::tests::family_icon_cursor ... ok
[INFO] [stdout] test tui::stats::tests::render_populated_stats_shows_sections ... ok
[INFO] [stdout] test tui::theme::tests::family_icon_deepseek ... ok
[INFO] [stdout] test tui::theme::tests::family_icon_unknown ... ok
[INFO] [stdout] test tui::theme::tests::state_color_matches_glyph_color ... ok
[INFO] [stdout] test tui::theme::tests::state_glyph_approval ... ok
[INFO] [stdout] test tui::theme::tests::state_glyph_done ... ok
[INFO] [stdout] test tui::theme::tests::state_glyph_idle ... ok
[INFO] [stdout] test tui::theme::tests::state_glyph_question ... ok
[INFO] [stdout] test tui::theme::tests::state_glyph_working ... ok
[INFO] [stdout] test tui::theme::tests::theme_classic_structural_colours_are_adaptive ... ok
[INFO] [stdout] test tui::viewmodel::tests::approval_before_question_in_needs_input ... ok
[INFO] [stdout] test tui::viewmodel::tests::correct_counts ... ok
[INFO] [stdout] test tui::viewmodel::tests::cycle_handles_empty_and_none ... ok
[INFO] [stdout] test tui::viewmodel::tests::cycle_next_wraps_from_last_to_first ... ok
[INFO] [stdout] test tui::viewmodel::tests::cycle_prev_wraps_from_first_to_last ... ok
[INFO] [stdout] test tui::viewmodel::tests::done_and_idle_both_land_in_idle_group ... ok
[INFO] [stdout] test tui::viewmodel::tests::empty_input_still_yields_no_offline_group ... ok
[INFO] [stdout] test tui::viewmodel::tests::empty_input_yields_no_groups ... ok
[INFO] [stdout] test tui::viewmodel::tests::group_order_needs_input_first ... ok
[INFO] [stdout] test tui::viewmodel::tests::group_state_color_needs_input_is_approval_amber ... ok
[INFO] [stdout] test tui::viewmodel::tests::no_prompt_sessions_sort_last ... ok
[INFO] [stdout] test tui::viewmodel::tests::no_stale_sessions_means_no_offline_group ... ok
[INFO] [stdout] test tui::viewmodel::tests::offline_group_sorted_by_recency ... ok
[INFO] [stdout] test tui::viewmodel::tests::offline_group_state_color_is_warm_grey ... ok
[INFO] [stdout] test tui::viewmodel::tests::selection_clamp_initialises_to_zero ... ok
[INFO] [stdout] test tui::viewmodel::tests::selection_empty_list ... ok
[INFO] [stdout] test tui::viewmodel::tests::offline_group_is_last_after_all_normal_groups ... ok
[INFO] [stdout] test tui::viewmodel::tests::order_ignores_last_activity_uses_prompt_time ... ok
[INFO] [stdout] test tui::viewmodel::tests::selection_is_selected ... ok
[INFO] [stdout] test tui::viewmodel::tests::selection_move_down ... ok
[INFO] [stdout] test tui::viewmodel::tests::selection_move_on_empty_list ... ok
[INFO] [stdout] test tui::viewmodel::tests::selection_move_up ... ok
[INFO] [stdout] test tui::viewmodel::tests::session_view_defaults_origin_local_and_not_stale ... ok
[INFO] [stdout] test tui::viewmodel::tests::single_working_session ... ok
[INFO] [stdout] test tui::viewmodel::tests::stale_approval_goes_to_offline_not_needs_input ... ok
[INFO] [stdout] test tui::viewmodel::tests::stale_session_goes_to_offline_group_not_original_state_group ... ok
[INFO] [stdout] test tui::viewmodel::tests::stale_working_does_not_appear_in_working_group ... ok
[INFO] [stdout] test tui::viewmodel::tests::total_rows_counts_across_groups ... ok
[INFO] [stdout] test tui::viewmodel::tests::within_group_sorted_by_recency_ascending ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 838 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.25s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/roost-992b91ef9a725800)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/daemon_integration.rs (/opt/rustwide/target/debug/deps/daemon_integration-f80701597a3948c5)
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test daemon_removes_session_on_session_end ... ok
[INFO] [stdout] test daemon_accepts_report_and_returns_list ... ok
[INFO] [stdout] test daemon_state_changes_correctly ... ok
[INFO] [stdout] test daemon_tracks_multiple_sessions ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/detail_integration.rs (/opt/rustwide/target/debug/deps/detail_integration-337c90af4bfb64de)
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test detail_unknown_session_returns_null ... ok
[INFO] [stdout] test detail_contains_action_when_working ... ok
[INFO] [stdout] test detail_returns_full_path_and_state ... ok
[INFO] [stdout] test detail_events_are_in_reverse_chronological_order ... ok
[INFO] [stdout] test detail_events_capped_at_max ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/hook_integration.rs (/opt/rustwide/target/debug/deps/hook_integration-25480189944e36ac)
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test hook_returns_error_for_unknown_event ... ok
[INFO] [stdout] test hook_extracts_prompt_from_user_prompt_submit ... ok
[INFO] [stdout] test hook_handles_empty_stdin ... ok
[INFO] [stdout] test hook_extracts_session_id_and_family ... ok
[INFO] [stdout] test hook_sends_session_start_event ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/list_integration.rs (/opt/rustwide/target/debug/deps/list_integration-851382eb2018f568)
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test list_shows_correct_fields ... ok
[INFO] [stdout] test list_returns_two_sessions ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/liveness_integration.rs (/opt/rustwide/target/debug/deps/liveness_integration-e92006b1813fb23f)
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test alive_pid_session_not_removed_by_liveness ... ok
[INFO] [stdout] test dead_pid_session_removed_by_liveness ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 9.03s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/setup_codex_integration.rs (/opt/rustwide/target/debug/deps/setup_codex_integration-598c331ec9e829f2)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test install_enables_hooks_feature_in_config_toml ... ok
[INFO] [stdout] test install_returns_none_when_codex_not_installed ... ok
[INFO] [stdout] test uninstall_disables_hooks_feature ... ok
[INFO] [stdout] test uninstall_preserves_user_codex_hooks ... ok
[INFO] [stdout] test uninstall_preserves_user_toml_settings ... ok
[INFO] [stdout] test install_writes_all_codex_hooks ... ok
[INFO] [stdout] test install_twice_is_idempotent ... ok
[INFO] [stdout] test uninstall_removes_codex_hooks ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/setup_integration.rs (/opt/rustwide/target/debug/deps/setup_integration-85fe519b75630027)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test install_preserves_user_hooks ... ok
[INFO] [stdout] test install_twice_is_idempotent ... ok
[INFO] [stdout] test uninstall_on_fresh_settings_does_not_crash ... ok
[INFO] [stdout] test uninstall_removes_roost_hooks_cleanly ... ok
[INFO] [stdout] test real_io_install_creates_settings_with_roost_hooks ... ok
[INFO] [stdout] test install_writes_roost_hooks_to_settings ... ok
[INFO] [stdout] test uninstall_preserves_user_hooks ... ok
[INFO] [stdout] test real_io_install_twice_is_idempotent ... ok
[INFO] [stdout] test real_io_uninstall_removes_roost_and_preserves_user_hooks ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests roost
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test src/add.rs - add::default_origin (line 191) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 1.59s; merged doctests compilation took 1.56s
[INFO] running `Command { std: "docker" "inspect" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad", kill_on_drop: false }`
[INFO] [stdout] 365b0813326dcedf649634fcf5538d0a6bcd111c71e26e16c6435c654745c1ad
