[INFO] fetching crate kando-tui 1.2.1... [INFO] testing kando-tui-1.2.1 against try#dec9417b8611e34e787a3e4c37686b5131f9e5c5 for pr-154210-1 [INFO] extracting crate kando-tui 1.2.1 into /workspace/builds/worker-7-tc2/source [INFO] started tweaking crates.io crate kando-tui 1.2.1 [INFO] finished tweaking crates.io crate kando-tui 1.2.1 [INFO] tweaked toml for crates.io crate kando-tui 1.2.1 written to /workspace/builds/worker-7-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate kando-tui 1.2.1 on toolchain dec9417b8611e34e787a3e4c37686b5131f9e5c5 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate kando-tui 1.2.1 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" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 29a20a697111662d5a9073afbb8bf5cb4596efdf2c3f89ba17a6ccdb305ca42a [INFO] running `Command { std: "docker" "start" "-a" "29a20a697111662d5a9073afbb8bf5cb4596efdf2c3f89ba17a6ccdb305ca42a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "29a20a697111662d5a9073afbb8bf5cb4596efdf2c3f89ba17a6ccdb305ca42a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "29a20a697111662d5a9073afbb8bf5cb4596efdf2c3f89ba17a6ccdb305ca42a", kill_on_drop: false }` [INFO] [stdout] 29a20a697111662d5a9073afbb8bf5cb4596efdf2c3f89ba17a6ccdb305ca42a [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 8e4800847c5b7d1519bdf207196755b077da530d8b22b8ffb39761dc710a0711 [INFO] running `Command { std: "docker" "start" "-a" "8e4800847c5b7d1519bdf207196755b077da530d8b22b8ffb39761dc710a0711", kill_on_drop: false }` [INFO] [stderr] Compiling itertools v0.14.0 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling lru v0.16.3 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling compact_str v0.9.0 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling owo-colors v4.3.0 [INFO] [stderr] Compiling time-core v0.1.7 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling linux-raw-sys v0.12.1 [INFO] [stderr] Compiling line-clipping v0.3.5 [INFO] [stderr] Compiling winnow v0.7.15 [INFO] [stderr] Compiling dirs-sys v0.5.0 [INFO] [stderr] Compiling tinyvec v1.10.0 [INFO] [stderr] Compiling time v0.3.45 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling object v0.37.3 [INFO] [stderr] Compiling serde_spanned v1.0.4 [INFO] [stderr] Compiling toml_datetime v1.0.0+spec-1.1.0 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling rustc-demangle v0.1.27 [INFO] [stderr] Compiling toml_writer v1.0.6+spec-1.1.0 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling tracing-subscriber v0.3.22 [INFO] [stderr] Compiling clap_builder v4.5.60 [INFO] [stderr] Compiling unicode-normalization v0.1.25 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling dirs v6.0.0 [INFO] [stderr] Compiling fuzzy-matcher v0.3.7 [INFO] [stderr] Compiling tracing-error v0.2.1 [INFO] [stderr] Compiling color-spantrace v0.3.0 [INFO] [stderr] Compiling unicode-truncate v2.0.1 [INFO] [stderr] Compiling toml_parser v1.0.9+spec-1.1.0 [INFO] [stderr] Compiling darling_core v0.20.11 [INFO] [stderr] Compiling toml v1.0.6+spec-1.1.0 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Compiling backtrace v0.3.76 [INFO] [stderr] Compiling derive_more v2.1.1 [INFO] [stderr] Compiling crossterm v0.29.0 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling kasuari v0.4.11 [INFO] [stderr] Compiling color-eyre v0.6.5 [INFO] [stderr] Compiling clap v4.5.60 [INFO] [stderr] Compiling darling_macro v0.20.11 [INFO] [stderr] Compiling darling v0.20.11 [INFO] [stderr] Compiling strum v0.27.2 [INFO] [stderr] Compiling instability v0.3.10 [INFO] [stderr] Compiling ratatui-core v0.1.0 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling ratatui-widgets v0.3.0 [INFO] [stderr] Compiling ratatui-crossterm v0.1.0 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling ratatui-macros v0.7.0 [INFO] [stderr] Compiling ratatui v0.30.0 [INFO] [stderr] Compiling kando-core v1.2.1 [INFO] [stderr] Compiling kando-tui v1.2.1 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 35.79s [INFO] running `Command { std: "docker" "inspect" "8e4800847c5b7d1519bdf207196755b077da530d8b22b8ffb39761dc710a0711", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8e4800847c5b7d1519bdf207196755b077da530d8b22b8ffb39761dc710a0711", kill_on_drop: false }` [INFO] [stdout] 8e4800847c5b7d1519bdf207196755b077da530d8b22b8ffb39761dc710a0711 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 8b8901f324dfe0de8e07fc08ce6416592e3018ed0e2bead1fe2192ae88a70e84 [INFO] running `Command { std: "docker" "start" "-a" "8b8901f324dfe0de8e07fc08ce6416592e3018ed0e2bead1fe2192ae88a70e84", kill_on_drop: false }` [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling crossterm v0.29.0 [INFO] [stderr] Compiling tempfile v3.26.0 [INFO] [stderr] Compiling ratatui-crossterm v0.1.0 [INFO] [stderr] Compiling ratatui v0.30.0 [INFO] [stderr] Compiling kando-tui v1.2.1 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 12.96s [INFO] running `Command { std: "docker" "inspect" "8b8901f324dfe0de8e07fc08ce6416592e3018ed0e2bead1fe2192ae88a70e84", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8b8901f324dfe0de8e07fc08ce6416592e3018ed0e2bead1fe2192ae88a70e84", kill_on_drop: false }` [INFO] [stdout] 8b8901f324dfe0de8e07fc08ce6416592e3018ed0e2bead1fe2192ae88a70e84 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 5d64f4faf96452e67ab2880a3bafd4deff20fb318477be956eec25b0be0aad60 [INFO] running `Command { std: "docker" "start" "-a" "5d64f4faf96452e67ab2880a3bafd4deff20fb318477be956eec25b0be0aad60", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.29s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/kando-5adc66e6b733ae13) [INFO] [stdout] [INFO] [stdout] running 838 tests [INFO] [stdout] test app::tests::archive_card_empty_column ... ok [INFO] [stdout] test app::tests::assign_letters_archive_always_gets_a ... ok [INFO] [stdout] test app::tests::assign_letters_hidden_columns_excluded ... ok [INFO] [stdout] test app::tests::archive_card_already_in_archive ... ok [INFO] [stdout] test app::tests::assign_letters_hidden_columns_included_when_show_hidden ... ok [INFO] [stdout] test app::tests::archive_card_no_archive_column ... ok [INFO] [stdout] test app::tests::assign_letters_empty_board ... ok [INFO] [stdout] test app::tests::assign_letters_no_duplicate_letters ... ok [INFO] [stdout] test app::tests::assign_letters_name_character_fallback ... ok [INFO] [stdout] test app::tests::assign_letters_hidden_archive_always_included ... ok [INFO] [stdout] test app::tests::assign_letters_single_column ... ok [INFO] [stdout] test app::tests::assign_letters_reserves_g_and_e ... ok [INFO] [stdout] test app::tests::clamp_selection_empty_column ... ok [INFO] [stdout] test app::tests::clamp_selection_filtered_no_visible_cards ... ok [INFO] [stdout] test app::tests::clamp_selection_filtered_no_filter_delegates ... ok [INFO] [stdout] test app::tests::clear_filters_clears_all ... ok [INFO] [stdout] test app::tests::clamp_selection_out_of_bounds ... ok [INFO] [stdout] test app::tests::col_move_right_at_rightmost_errors ... ok [INFO] [stdout] test app::tests::clamp_selection_within_bounds_unchanged ... ok [INFO] [stdout] test app::tests::clamp_selection_filtered_snaps_to_visible ... ok [INFO] [stdout] test app::tests::col_add_before_enters_input_mode ... ok [INFO] [stdout] test app::tests::col_set_wip_opens_input ... ok [INFO] [stdout] test app::tests::col_move_left_at_leftmost_errors ... ok [INFO] [stdout] test app::tests::archive_card_moves_to_archive_column ... ok [INFO] [stdout] test app::tests::col_remove_last_column_blocked ... ok [INFO] [stdout] test app::tests::column_w_maps_to_col_set_wip ... ok [INFO] [stdout] test app::tests::blocker_reason_input_applies_to_selected_card ... ok [INFO] [stdout] test app::tests::col_remove_confirm_removes_column ... ok [INFO] [stdout] test app::tests::col_add_confirm_creates_column ... ok [INFO] [stdout] test app::tests::col_remove_archive_blocked ... ok [INFO] [stdout] test app::tests::completion_hint_all_values_entered_returns_none ... ok [INFO] [stdout] test app::tests::col_move_to_position_same_notifies ... ok [INFO] [stdout] test app::tests::completion_hint_candidates_sorted_alphabetically ... ok [INFO] [stdout] test app::tests::completion_hint_empty_stale_candidates_gives_none_selected ... ok [INFO] [stdout] test app::tests::completion_hint_empty_token_shows_all_remaining ... ok [INFO] [stdout] test app::tests::completion_hint_excludes_already_entered ... ok [INFO] [stdout] test app::tests::completion_hint_none_for_non_tag_target ... ok [INFO] [stdout] test app::tests::completion_hint_none_in_normal_mode ... ok [INFO] [stdout] test app::tests::col_remove_with_cards_blocked ... ok [INFO] [stdout] test app::tests::completion_hint_none_when_no_prefix_match ... ok [INFO] [stdout] test app::tests::blocker_reason_input_empty_sets_blocked_no_reason ... ok [INFO] [stdout] test app::tests::completion_hint_none_when_no_tags_on_board ... ok [INFO] [stdout] test app::tests::col_rename_selected_enters_input_mode ... ok [INFO] [stdout] test app::tests::completion_hint_returns_matching_candidates ... ok [INFO] [stdout] test app::tests::col_rename_empty_name_errors ... ok [INFO] [stdout] test app::tests::completion_hint_selected_none_when_cycled_candidate_no_longer_matches ... ok [INFO] [stdout] test app::tests::completion_hint_selected_tracks_cycling_candidate ... ok [INFO] [stdout] test app::tests::completion_hint_title_is_assignees_for_edit_assignees ... ok [INFO] [stdout] test app::tests::completion_hint_title_is_tags_for_edit_tags ... ok [INFO] [stdout] test app::tests::completion_hint_works_for_assignees ... ok [INFO] [stdout] test app::tests::completion_hint_stale_index_oob_gives_none_selected ... ok [INFO] [stdout] test app::tests::blocker_reason_input_confirm_sets_reason ... ok [INFO] [stdout] test app::tests::current_csv_token_after_comma_with_space ... ok [INFO] [stdout] test app::tests::current_csv_token_multiple_commas ... ok [INFO] [stdout] test app::tests::current_csv_token_single_word ... ok [INFO] [stdout] test app::tests::current_csv_token_trailing_comma ... ok [INFO] [stdout] test app::tests::cycle_completion_backward_wraps ... ok [INFO] [stdout] test app::tests::cycle_completion_excludes_already_entered ... ok [INFO] [stdout] test app::tests::cycle_completion_multi_token_replaces_only_last_segment ... ok [INFO] [stdout] test app::tests::cycle_completion_noop_for_non_tag_target ... ok [INFO] [stdout] test app::tests::cycle_completion_forward_and_wrap ... ok [INFO] [stdout] test app::tests::detail_next_card_at_last_visible_with_filter_notifies ... ok [INFO] [stdout] test app::tests::detail_next_card_at_last_card_notifies_last_card ... ok [INFO] [stdout] test app::tests::detail_prev_card_at_first_card_notifies_first_card ... ok [INFO] [stdout] test app::tests::detail_prev_card_at_first_visible_with_filter_notifies ... ok [INFO] [stdout] test app::tests::current_csv_token_empty ... ok [INFO] [stdout] test app::tests::detail_next_card_navigates_when_not_at_last ... ok [INFO] [stdout] test app::tests::edit_assignees_no_assignees_on_board_completion_hint_is_none ... ok [INFO] [stdout] test app::tests::edit_tags_action_ghost_text_none_when_buffer_empty ... ok [INFO] [stdout] test app::tests::cycle_completion_noop_when_all_candidates_entered ... ok [INFO] [stdout] test app::tests::edit_tags_action_populates_completion_hint_immediately ... ok [INFO] [stdout] test app::tests::cycle_completion_works_for_assignees ... ok [INFO] [stdout] test app::tests::cycle_completion_noop_when_board_has_no_tags ... ok [INFO] [stdout] test app::tests::detail_prev_card_navigates_when_not_at_first ... ok [INFO] [stdout] test app::tests::edit_assignees_action_ghost_text_none_when_buffer_empty ... ok [INFO] [stdout] test app::tests::entered_values_empty ... ok [INFO] [stdout] test app::tests::entered_values_single_token_returns_empty ... ok [INFO] [stdout] test app::tests::entered_values_multiple_lowercased ... ok [INFO] [stdout] test app::tests::entered_values_trailing_comma ... ok [INFO] [stdout] test app::tests::filter_guard_does_not_block_new_card ... ok [INFO] [stdout] test app::tests::ghost_text_none_during_active_completion ... ok [INFO] [stdout] test app::tests::ghost_text_none_for_empty_token ... ok [INFO] [stdout] test app::tests::ghost_text_shows_suffix ... ok [INFO] [stdout] test app::tests::filter_guard_notifies_no_visible_card_selected ... ok [INFO] [stdout] test app::tests::filter_guard_passes_when_selected_card_is_visible ... ok [INFO] [stdout] test app::tests::edit_tags_no_tags_on_board_completion_hint_is_none ... ok [INFO] [stdout] test app::tests::filtered_candidates_excludes_already_entered ... ok [INFO] [stdout] test app::tests::filtered_candidates_no_match ... ok [INFO] [stdout] test app::tests::ghost_text_works_for_assignees ... ok [INFO] [stdout] test app::tests::filter_guard_does_not_block_detail_nav_selected_not_in_visible_set ... ok [INFO] [stdout] test app::tests::ghost_text_none_when_board_has_no_tags ... ok [INFO] [stdout] test app::tests::ghost_text_none_when_cursor_not_at_end ... ok [INFO] [stdout] test app::tests::filtered_candidates_prefix_match_case_insensitive ... ok [INFO] [stdout] test app::tests::ghost_text_none_for_non_tag_target ... ok [INFO] [stdout] test app::tests::goto_resets_mode_to_normal ... ok [INFO] [stdout] test app::tests::edit_assignees_action_populates_completion_hint_immediately ... ok [INFO] [stdout] test app::tests::has_active_filter_staleness_only ... ok [INFO] [stdout] test app::tests::has_active_filter_none ... ok [INFO] [stdout] test app::tests::has_active_filter_tags_only ... ok [INFO] [stdout] test app::tests::has_active_filter_assignees_only ... ok [INFO] [stdout] test app::tests::col_rename_confirm_changes_name ... ok [INFO] [stdout] test app::tests::handle_col_hide_board_persisted ... ok [INFO] [stdout] test app::tests::has_active_filter_text_only ... ok [INFO] [stdout] test app::tests::handle_col_hide_focus_moves_to_first_visible_when_hidden_not_shown ... ok [INFO] [stdout] test app::tests::hint_col_move_forward ... ok [INFO] [stdout] test app::tests::hint_archive ... ok [INFO] [stdout] test app::tests::hint_col_move_backward ... ok [INFO] [stdout] test app::tests::handle_col_hide_last_visible_column_blocked ... ok [INFO] [stdout] test app::tests::handle_col_hide_focus_unchanged_when_show_hidden_true ... ok [INFO] [stdout] test app::tests::handle_col_hide_activity_logged ... ok [INFO] [stdout] test app::tests::handle_col_hide_two_visible_allows_hide ... ok [INFO] [stdout] test app::tests::hint_col_remove ... ok [INFO] [stdout] test app::tests::hint_col_set_hidden_false ... ok [INFO] [stdout] test app::tests::hint_delete_card ... ok [INFO] [stdout] test app::tests::hint_move_backward ... ok [INFO] [stdout] test app::tests::hint_move_forward ... ok [INFO] [stdout] test app::tests::hint_move_to_column ... ok [INFO] [stdout] test app::tests::hint_pipe_command_short ... ok [INFO] [stdout] test app::tests::hint_pipe_command_truncates_at_20_chars ... ok [INFO] [stdout] test app::tests::hint_set_assignees ... ok [INFO] [stdout] test app::tests::hint_set_blocked_false ... ok [INFO] [stdout] test app::tests::hint_set_due_date_none ... ok [INFO] [stdout] test app::tests::hint_set_priority_all_variants ... ok [INFO] [stdout] test app::tests::hint_set_tags ... ok [INFO] [stdout] test app::tests::hint_set_due_date_some ... ok [INFO] [stdout] test app::tests::hint_set_wip_limit_none ... ok [INFO] [stdout] test app::tests::hint_sort_column ... ok [INFO] [stdout] test app::tests::hint_set_wip_limit_some ... ok [INFO] [stdout] test app::tests::is_column_level_false ... ok [INFO] [stdout] test app::tests::hint_set_blocked_true ... ok [INFO] [stdout] test app::tests::is_column_level_true ... ok [INFO] [stdout] test app::tests::hint_set_tags_empty ... ok [INFO] [stdout] test app::tests::jump_to_column_by_letter_clamps_selection ... ok [INFO] [stdout] test app::tests::jump_to_last_card_global_no_cards_notifies ... ok [INFO] [stdout] test app::tests::jump_to_last_card_global_skips_hidden_columns ... ok [INFO] [stdout] test app::tests::jump_to_first_card_no_visible_cards_notifies ... ok [INFO] [stdout] test app::tests::jump_to_first_card_global_skips_hidden_columns ... ok [INFO] [stdout] test app::tests::jump_to_last_card_no_visible_cards_notifies ... ok [INFO] [stdout] test app::tests::jump_to_last_column_skips_hidden ... ok [INFO] [stdout] test app::tests::jump_to_visible_card_skips_hidden_columns ... ok [INFO] [stdout] test app::tests::hint_col_set_hidden_true ... ok [INFO] [stdout] test app::tests::next_visible_column_all_hidden_returns_none ... ok [INFO] [stdout] test app::tests::handle_col_hide_marks_column_hidden ... ok [INFO] [stdout] test app::tests::move_card_forward_at_last_column_notifies_last_column ... ok [INFO] [stdout] test app::tests::move_card_from_empty_last_column_notifies_last_column ... ok [INFO] [stdout] test app::tests::move_card_from_empty_column_notifies_no_cards_to_move ... ok [INFO] [stdout] test app::tests::jump_to_first_card_global_no_cards_notifies ... ok [INFO] [stdout] test app::tests::jump_to_first_column_skips_hidden ... ok [INFO] [stdout] test app::tests::move_card_backward_at_first_column_notifies_first_column ... ok [INFO] [stdout] test app::tests::jump_to_visible_card_backward ... ok [INFO] [stdout] test app::tests::jump_to_column_by_letter_unknown_letter_is_noop ... ok [INFO] [stdout] test app::tests::jump_to_visible_card_no_matches ... ok [INFO] [stdout] test app::tests::next_visible_column_backward ... ok [INFO] [stdout] test app::tests::next_visible_column_forward ... ok [INFO] [stdout] test app::tests::jump_to_visible_card_forward ... ok [INFO] [stdout] test app::tests::jump_to_visible_card_wraps_forward ... ok [INFO] [stdout] test app::tests::next_visible_column_shows_hidden_when_flag_set ... ok [INFO] [stdout] test app::tests::pipe_card_does_not_clear_undo_state ... ok [INFO] [stdout] test app::tests::normal_s_maps_to_start_sort ... ok [INFO] [stdout] test app::tests::pipe_card_enters_input_mode ... ok [INFO] [stdout] test app::tests::pipe_card_no_card_selected ... ok [INFO] [stdout] test app::tests::normal_n_maps_to_find_next ... ok [INFO] [stdout] test app::tests::normal_shift_n_maps_to_find_prev ... ok [INFO] [stdout] test app::tests::notify_clears_notification_is_hook_flag ... ok [INFO] [stdout] test app::tests::notify_error_clears_notification_is_hook_flag ... ok [INFO] [stdout] test app::tests::pipe_command_card_not_found ... ok [INFO] [stdout] test app::tests::notify_error_sets_error_level ... ok [INFO] [stdout] test app::tests::notify_sets_info_level ... ok [INFO] [stdout] test app::tests::next_visible_column_at_edge_returns_none ... ok [INFO] [stdout] test app::tests::next_visible_column_skips_hidden ... ok [INFO] [stdout] test app::tests::record_col_remove ... ok [INFO] [stdout] test app::tests::pipe_command_empty_input_does_nothing ... ok [INFO] [stdout] test app::tests::handle_col_hide_mode_resets_to_normal ... ok [INFO] [stdout] test app::tests::record_col_set_hidden_to_false ... ok [INFO] [stdout] test app::tests::record_col_set_hidden ... ok [INFO] [stdout] test app::tests::record_edit_assignees ... ok [INFO] [stdout] test app::tests::record_archive_card ... ok [INFO] [stdout] test app::tests::pipe_command_empty_stdout_shows_pipe_complete ... ok [INFO] [stdout] test app::tests::record_delete_card ... ok [INFO] [stdout] test app::tests::pipe_command_nonzero_exit_empty_stderr ... ok [INFO] [stdout] test app::tests::pipe_command_skips_empty_lines ... ok [INFO] [stdout] test app::tests::pipe_command_nonzero_exit_shows_stderr ... ok [INFO] [stdout] test app::tests::record_set_wip_limit_zero_clears ... ok [INFO] [stdout] test app::tests::record_set_wip_limit ... ok [INFO] [stdout] test app::tests::record_pipe_command ... ok [INFO] [stdout] test app::tests::pipe_command_returns_no_sync_message ... ok [INFO] [stdout] test app::tests::record_move_to_column ... ok [INFO] [stdout] test app::tests::pipe_command_success_shows_stdout_first_line ... ok [INFO] [stdout] test app::tests::record_edit_tags ... ok [INFO] [stdout] test app::tests::pipe_command_receives_card_contents_on_stdin ... ok [INFO] [stdout] test app::tests::record_set_priority ... ok [INFO] [stdout] test app::tests::record_sort_column ... ok [INFO] [stdout] test app::tests::record_move_card_next_column ... ok [INFO] [stdout] test app::tests::record_move_card_prev_column ... ok [INFO] [stdout] test app::tests::record_toggle_blocker_block_opens_input ... ok [INFO] [stdout] test app::tests::pipe_command_sets_env_vars ... ok [INFO] [stdout] test app::tests::repeat_block_already_blocked ... ok [INFO] [stdout] test app::tests::repeat_archive ... ok [INFO] [stdout] test app::tests::repeat_archive_already_in_archive ... ok [INFO] [stdout] test app::tests::record_toggle_blocker_unblock ... ok [INFO] [stdout] test app::tests::repeat_archive_no_archive_column ... ok [INFO] [stdout] test app::tests::repeat_block_card_with_reason ... ok [INFO] [stdout] test app::tests::repeat_col_remove_only_column ... ok [INFO] [stdout] test app::tests::repeat_col_remove_enters_confirm ... ok [INFO] [stdout] test app::tests::repeat_col_remove_has_cards ... ok [INFO] [stdout] test app::tests::repeat_col_set_hidden_already_visible ... ok [INFO] [stdout] test app::tests::repeat_block_card ... ok [INFO] [stdout] test app::tests::repeat_column_level_no_column ... ok [INFO] [stdout] test app::tests::repeat_col_remove_archive_blocked ... ok [INFO] [stdout] test app::tests::record_set_due_date ... ok [INFO] [stdout] test app::tests::repeat_col_set_hidden_already_hidden ... ok [INFO] [stdout] test app::tests::repeat_col_move_forward_already_rightmost ... ok [INFO] [stdout] test app::tests::repeat_col_move_backward_already_leftmost ... ok [INFO] [stdout] test app::tests::repeat_delete_card_no_card ... ok [INFO] [stdout] test app::tests::repeat_clear_due_date ... ok [INFO] [stdout] test app::tests::record_pipe_command_not_on_failure ... ok [INFO] [stdout] test app::tests::repeat_move_to_column_already_there ... ok [INFO] [stdout] test app::tests::repeat_move_to_column ... ok [INFO] [stdout] test app::tests::repeat_nothing_to_repeat ... ok [INFO] [stdout] test app::tests::repeat_col_set_hidden_false ... ok [INFO] [stdout] test app::tests::repeat_move_to_column_missing ... ok [INFO] [stdout] test app::tests::repeat_col_set_hidden_true ... ok [INFO] [stdout] test app::tests::repeat_move_card_forward ... ok [INFO] [stdout] test app::tests::repeat_delete_card_enters_confirm ... ok [INFO] [stdout] test app::tests::repeat_does_not_update_last_repeatable ... ok [INFO] [stdout] test app::tests::repeat_no_card_selected ... ok [INFO] [stdout] test app::tests::repeat_pipe_command_no_card ... ok [INFO] [stdout] test app::tests::repeat_set_assignees ... ok [INFO] [stdout] test app::tests::repeat_sort_column_empty ... ok [INFO] [stdout] test app::tests::repeat_preserves_undo_on_noop ... ok [INFO] [stdout] test app::tests::repeat_set_wip_limit_none ... ok [INFO] [stdout] test app::tests::repeat_set_due_date ... ok [INFO] [stdout] test app::tests::repeat_set_wip_limit_some ... ok [INFO] [stdout] test app::tests::repeat_sort_column_unknown_key ... ok [INFO] [stdout] test app::tests::repeat_sort_column_by_priority ... ok [INFO] [stdout] test app::tests::repeat_unblock_already_unblocked ... ok [INFO] [stdout] test app::tests::repeat_sort_column_by_title ... ok [INFO] [stdout] test app::tests::repeat_unblock_card ... ok [INFO] [stdout] test app::tests::repeat_set_priority ... ok [INFO] [stdout] test app::tests::risk_level_high_variants ... ok [INFO] [stdout] test app::tests::selected_card_metadata_no_card ... ok [INFO] [stdout] test app::tests::selected_card_metadata_with_card ... ok [INFO] [stdout] test app::tests::selected_card_ref_invalid_card ... ok [INFO] [stdout] test app::tests::selected_card_ref_invalid_column ... ok [INFO] [stdout] test app::tests::space_x_maps_to_archive_card ... ok [INFO] [stdout] test app::tests::start_sort_opens_picker ... ok [INFO] [stdout] test app::tests::selected_card_ref_valid ... ok [INFO] [stdout] test app::tests::test_close_metrics_panel ... ok [INFO] [stdout] test app::tests::test_close_panel ... ok [INFO] [stdout] test app::tests::test_delete_card_enters_confirm_mode ... ok [INFO] [stdout] test app::tests::sort_empty_column_no_panic ... ok [INFO] [stdout] test app::tests::sort_by_title ... ok [INFO] [stdout] test app::tests::test_cycle_prev_wraps_to_prev_column ... ok [INFO] [stdout] test app::tests::test_deny_returns_to_normal ... ok [INFO] [stdout] test app::tests::test_detail_scroll ... ok [INFO] [stdout] test app::tests::test_delete_card_confirm ... ok [INFO] [stdout] test app::tests::test_delete_populates_last_delete ... ok [INFO] [stdout] test app::tests::test_focus_next_column ... ok [INFO] [stdout] test app::tests::test_focus_prev_column ... ok [INFO] [stdout] test app::tests::repeat_with_active_filter_no_visible_card ... ok [INFO] [stdout] test app::tests::test_filter_confirm_sets_active_filter ... ok [INFO] [stdout] test app::tests::test_focus_skips_hidden_columns ... ok [INFO] [stdout] test app::tests::test_input_backspace ... ok [INFO] [stdout] test app::tests::test_input_cancel_clears_filter ... ok [INFO] [stdout] test app::tests::test_input_cancel_picker_keeps_tag_filters ... ok [INFO] [stdout] test app::tests::test_close_help_panel ... ok [INFO] [stdout] test app::tests::test_help_scroll ... ok [INFO] [stdout] test app::tests::test_filter_confirm_empty_clears ... ok [INFO] [stdout] test app::tests::repeat_pipe_command_on_card ... ok [INFO] [stdout] test app::tests::repeat_col_move_backward ... ok [INFO] [stdout] test app::tests::repeat_col_move_forward ... ok [INFO] [stdout] test app::tests::repeat_column_level_skips_card_guard ... ok [INFO] [stdout] test app::tests::test_input_char_in_input_mode ... ok [INFO] [stdout] test app::tests::test_input_cursor_movement ... ok [INFO] [stdout] test app::tests::test_jump_to_column_by_letter ... ok [INFO] [stdout] test app::tests::test_input_char_in_filter_syncs ... ok [INFO] [stdout] test app::tests::repeat_move_card_backward ... ok [INFO] [stdout] test app::tests::test_jump_to_column_by_letter_auto_shows_hidden_archive ... ok [INFO] [stdout] test app::tests::test_jump_to_first_column ... ok [INFO] [stdout] test app::tests::test_edit_tags_confirm ... ok [INFO] [stdout] test app::tests::test_jump_to_first_last_card ... ok [INFO] [stdout] test app::tests::test_jump_to_first_card_global ... ok [INFO] [stdout] test app::tests::test_jump_to_last_card_global ... ok [INFO] [stdout] test app::tests::test_jump_to_last_column ... ok [INFO] [stdout] test app::tests::test_metrics_scroll ... ok [INFO] [stdout] test app::tests::test_navigation_clears_minor_mode ... ok [INFO] [stdout] test app::tests::test_new_card_enters_input_mode ... ok [INFO] [stdout] test app::tests::test_delete_card_file_goes_to_trash ... ok [INFO] [stdout] test app::tests::test_select_in_picker_mode ... ok [INFO] [stdout] test app::tests::test_open_card_detail ... ok [INFO] [stdout] test app::tests::test_select_next_prev_card ... ok [INFO] [stdout] test app::tests::test_show_help_defaults_to_keybindings_page ... ok [INFO] [stdout] test app::tests::test_start_filter ... ok [INFO] [stdout] test app::tests::test_start_tag_filter_no_tags ... ok [INFO] [stdout] test app::tests::test_start_tag_filter_with_tags ... ok [INFO] [stdout] test app::tests::test_move_card_sets_completed_integration ... ok [INFO] [stdout] test app::tests::test_tag_filter_toggle ... ok [INFO] [stdout] test app::tests::test_toggle_help_page_noop_outside_help ... ok [INFO] [stdout] test app::tests::test_new_card_confirm_empty_title ... ok [INFO] [stdout] test app::tests::test_toggle_hidden_columns ... ok [INFO] [stdout] test app::tests::test_toggle_blocker_blocked_unblocks ... ok [INFO] [stdout] test app::tests::test_toggle_hidden_refocuses_if_on_hidden ... ok [INFO] [stdout] test app::tests::textbuffer_backspace_at_end ... ok [INFO] [stdout] test app::tests::textbuffer_backspace_at_start_does_nothing ... ok [INFO] [stdout] test app::tests::textbuffer_backspace_in_middle ... ok [INFO] [stdout] test app::tests::textbuffer_delete_word_single_word ... ok [INFO] [stdout] test app::tests::textbuffer_delete_word_trailing_spaces ... ok [INFO] [stdout] test app::tests::textbuffer_emoji_backspace ... ok [INFO] [stdout] test app::tests::textbuffer_emoji_operations ... ok [INFO] [stdout] test app::tests::textbuffer_empty_cursor_at_zero ... ok [INFO] [stdout] test app::tests::textbuffer_home_end ... ok [INFO] [stdout] test app::tests::textbuffer_home_end_with_unicode ... ok [INFO] [stdout] test app::tests::textbuffer_insert_at_end ... ok [INFO] [stdout] test app::tests::textbuffer_insert_at_start ... ok [INFO] [stdout] test app::tests::textbuffer_insert_in_middle ... ok [INFO] [stdout] test app::tests::textbuffer_move_left_at_start_stays ... ok [INFO] [stdout] test app::tests::textbuffer_move_left_right ... ok [INFO] [stdout] test app::tests::test_undo_nothing_to_undo ... ok [INFO] [stdout] test app::tests::textbuffer_new_cursor_at_end ... ok [INFO] [stdout] test app::tests::textbuffer_move_right_at_end_stays ... ok [INFO] [stdout] test app::tests::test_cycle_next_wraps_to_next_column ... ok [INFO] [stdout] test app::tests::textbuffer_unicode_backspace ... ok [INFO] [stdout] test app::tests::textbuffer_unicode_insert ... ok [INFO] [stdout] test app::tests::textbuffer_unicode_insert_middle ... ok [INFO] [stdout] test app::tests::tick_notification_clears_expired ... ok [INFO] [stdout] test app::tests::risk_level_low_variants ... ok [INFO] [stdout] test app::tests::risk_level_normal_variants ... ok [INFO] [stdout] test app::tests::tick_notification_clears_hook_flag ... ok [INFO] [stdout] test app::tests::repeat_set_tags ... ok [INFO] [stdout] test app::tests::test_toggle_help_page_switches_and_resets_scroll ... ok [INFO] [stdout] test app::tests::tick_notification_keeps_unexpired ... ok [INFO] [stdout] test app::tests::tick_notification_preserves_hook_flag_when_unexpired ... ok [INFO] [stdout] test app::tests::textbuffer_delete_word_removes_last_word ... ok [INFO] [stdout] test app::tests::test_toggle_blocker_unblocked_opens_input ... ok [INFO] [stdout] test app::tests::typing_after_tab_cycle_resets_completion ... ok [INFO] [stdout] test app::tests::visible_card_indices_no_filter ... ok [INFO] [stdout] test app::tests::visible_card_indices_tag_filter ... ok [INFO] [stdout] test app::tests::test_undo_restores_card ... ok [INFO] [stdout] test app::tests::visible_card_indices_text_filter ... ok [INFO] [stdout] test input::keymap::tests::column_a_enters_add_prefilled ... ok [INFO] [stdout] test input::keymap::tests::column_d_enters_remove_prefilled ... ok [INFO] [stdout] test input::keymap::tests::column_esc_cancels ... ok [INFO] [stdout] test input::keymap::tests::column_h_hides_focused_column ... ok [INFO] [stdout] test app::tests::test_undo_focuses_restored_card ... ok [INFO] [stdout] test input::keymap::tests::column_r_enters_rename_prefilled ... ok [INFO] [stdout] test input::keymap::tests::confirm_n_denies ... ok [INFO] [stdout] test input::keymap::tests::confirm_y_confirms ... ok [INFO] [stdout] test input::keymap::tests::detail_bindings_contains_pipe ... ok [INFO] [stdout] test input::keymap::tests::detail_esc_closes ... ok [INFO] [stdout] test input::keymap::tests::detail_j_k_scrolls ... ok [INFO] [stdout] test input::keymap::tests::detail_p_is_noop ... ok [INFO] [stdout] test input::keymap::tests::detail_pipe_maps_to_pipe_card ... ok [INFO] [stdout] test input::keymap::tests::detail_q_closes ... ok [INFO] [stdout] test input::keymap::tests::detail_t_is_noop ... ok [INFO] [stdout] test input::keymap::tests::detail_tab_navigates_cards ... ok [INFO] [stdout] test input::keymap::tests::detail_up_arrow_scrolls_up ... ok [INFO] [stdout] test input::keymap::tests::dot_is_noop_in_column_mode ... ok [INFO] [stdout] test input::keymap::tests::dot_is_noop_in_goto_mode ... ok [INFO] [stdout] test input::keymap::tests::dot_is_noop_in_space_mode ... ok [INFO] [stdout] test input::keymap::tests::filter_bindings_contains_overdue ... ok [INFO] [stdout] test input::keymap::tests::filter_menu_a_starts_assignee_filter ... ok [INFO] [stdout] test input::keymap::tests::filter_menu_d_starts_overdue_filter ... ok [INFO] [stdout] test input::keymap::tests::filter_menu_s_starts_staleness_filter ... ok [INFO] [stdout] test input::keymap::tests::filter_menu_t_starts_tag_filter ... ok [INFO] [stdout] test input::keymap::tests::goto_c_enters_goto_column ... ok [INFO] [stdout] test input::keymap::tests::goto_column_digit_is_noop ... ok [INFO] [stdout] test input::keymap::tests::column_s_toggles_hidden_columns ... ok [INFO] [stdout] test input::keymap::tests::goto_column_e_jumps_last_column ... ok [INFO] [stdout] test input::keymap::tests::detail_down_arrow_scrolls_down ... ok [INFO] [stdout] test input::keymap::tests::detail_b_is_noop ... ok [INFO] [stdout] test app::tests::wip_limit_invalid_input ... ok [INFO] [stdout] test app::tests::wip_limit_clear_with_zero ... ok [INFO] [stdout] test input::keymap::tests::goto_column_esc_cancels ... ok [INFO] [stdout] test app::tests::wip_limit_set_valid ... ok [INFO] [stdout] test app::tests::test_wip_limit_confirm ... ok [INFO] [stdout] test input::keymap::tests::goto_column_g_jumps_first_column ... ok [INFO] [stdout] test input::keymap::tests::goto_column_letter_dispatches ... ok [INFO] [stdout] test input::keymap::tests::goto_column_uppercase_is_noop ... ok [INFO] [stdout] test input::keymap::tests::goto_g_jumps_first ... ok [INFO] [stdout] test input::keymap::tests::goto_shift_e_jumps_last_global ... ok [INFO] [stdout] test input::keymap::tests::goto_shift_g_jumps_first_global ... ok [INFO] [stdout] test input::keymap::tests::goto_unmapped_key_is_noop ... ok [INFO] [stdout] test input::keymap::tests::help_groups_all_have_at_least_one_binding ... ok [INFO] [stdout] test input::keymap::tests::help_groups_contains_template ... ok [INFO] [stdout] test input::keymap::tests::help_mode_down_arrow_scrolls_down ... ok [INFO] [stdout] test input::keymap::tests::help_mode_esc_closes ... ok [INFO] [stdout] test input::keymap::tests::help_mode_j_scrolls_down ... ok [INFO] [stdout] test input::keymap::tests::help_mode_other_key_is_noop ... ok [INFO] [stdout] test input::keymap::tests::help_mode_k_scrolls_up ... ok [INFO] [stdout] test input::keymap::tests::help_mode_q_closes ... ok [INFO] [stdout] test input::keymap::tests::help_mode_question_mark_toggles_page ... ok [INFO] [stdout] test input::keymap::tests::help_mode_tab_toggles_page ... ok [INFO] [stdout] test input::keymap::tests::input_backspace_deletes ... ok [INFO] [stdout] test input::keymap::tests::input_ctrl_w_deletes_word ... ok [INFO] [stdout] test input::keymap::tests::input_enter_confirms ... ok [INFO] [stdout] test app::tests::test_undo_restores_to_original_column ... ok [INFO] [stdout] test input::keymap::tests::input_ctrl_a_homes ... ok [INFO] [stdout] test input::keymap::tests::input_ctrl_e_ends ... ok [INFO] [stdout] test input::keymap::tests::input_left_right_moves ... ok [INFO] [stdout] test input::keymap::tests::goto_e_jumps_last ... ok [INFO] [stdout] test input::keymap::tests::goto_esc_cancels ... ok [INFO] [stdout] test input::keymap::tests::help_mode_up_arrow_scrolls_up ... ok [INFO] [stdout] test input::keymap::tests::input_esc_cancels ... ok [INFO] [stdout] test input::keymap::tests::metrics_mode_down_arrow_scrolls_down ... ok [INFO] [stdout] test input::keymap::tests::metrics_mode_esc_closes ... ok [INFO] [stdout] test input::keymap::tests::metrics_mode_j_scrolls_down ... ok [INFO] [stdout] test input::keymap::tests::metrics_mode_k_scrolls_up ... ok [INFO] [stdout] test input::keymap::tests::metrics_mode_other_key_is_noop ... ok [INFO] [stdout] test input::keymap::tests::metrics_mode_q_closes ... ok [INFO] [stdout] test input::keymap::tests::metrics_mode_up_arrow_scrolls_up ... ok [INFO] [stdout] test input::keymap::tests::mode_bindings_column_returns_bindings ... ok [INFO] [stdout] test input::keymap::tests::mode_bindings_goto_column_returns_bindings ... ok [INFO] [stdout] test input::keymap::tests::mode_bindings_goto_returns_bindings ... ok [INFO] [stdout] test input::keymap::tests::mode_bindings_normal_returns_empty ... ok [INFO] [stdout] test input::keymap::tests::mode_bindings_space_returns_bindings ... ok [INFO] [stdout] test input::keymap::tests::normal_bindings_contains_dot ... ok [INFO] [stdout] test input::keymap::tests::mode_bindings_template_returns_bindings ... ok [INFO] [stdout] test input::keymap::tests::normal_bindings_contains_pipe ... ok [INFO] [stdout] test input::keymap::tests::normal_bindings_contains_question_mark ... ok [INFO] [stdout] test input::keymap::tests::normal_bindings_contains_template_mode ... ok [INFO] [stdout] test input::keymap::tests::normal_c_enters_column_mode ... ok [INFO] [stdout] test app::tests::test_new_card_confirm ... ok [INFO] [stdout] test input::keymap::tests::normal_ctrl_c_quits_not_column_mode ... ok [INFO] [stdout] test input::keymap::tests::normal_dot_maps_to_repeat_last ... ok [INFO] [stdout] test input::keymap::tests::normal_enter_opens_detail ... ok [INFO] [stdout] test input::keymap::tests::normal_g_enters_goto ... ok [INFO] [stdout] test input::keymap::tests::normal_h_moves_left ... ok [INFO] [stdout] test input::keymap::tests::normal_j_selects_next ... ok [INFO] [stdout] test input::keymap::tests::normal_k_selects_prev ... ok [INFO] [stdout] test input::keymap::tests::normal_l_moves_right ... ok [INFO] [stdout] test input::keymap::tests::normal_m_maps_to_show_metrics ... ok [INFO] [stdout] test input::keymap::tests::normal_pipe_maps_to_pipe_card ... ok [INFO] [stdout] test input::keymap::tests::normal_q_quits ... ok [INFO] [stdout] test input::keymap::tests::normal_question_mark_shows_help ... ok [INFO] [stdout] test input::keymap::tests::normal_r_maps_to_reload_board ... ok [INFO] [stdout] test input::keymap::tests::normal_shift_h_l_moves_card ... ok [INFO] [stdout] test input::keymap::tests::normal_slash_starts_filter ... ok [INFO] [stdout] test input::keymap::tests::normal_space_enters_space_mode ... ok [INFO] [stdout] test input::keymap::tests::normal_t_enters_template_mode ... ok [INFO] [stdout] test input::keymap::tests::normal_u_undoes ... ok [INFO] [stdout] test input::keymap::tests::normal_unmapped_key_is_noop ... ok [INFO] [stdout] test input::keymap::tests::picker_enter_confirms ... ok [INFO] [stdout] test input::keymap::tests::picker_j_k_navigates ... ok [INFO] [stdout] test input::keymap::tests::space_b_toggle_blocker ... ok [INFO] [stdout] test input::keymap::tests::space_bindings_contains_due_date ... ok [INFO] [stdout] test input::keymap::tests::space_e_edit_external ... ok [INFO] [stdout] test input::keymap::tests::space_m_move_to_column ... ok [INFO] [stdout] test input::keymap::tests::space_shift_d_sets_due_date ... ok [INFO] [stdout] test input::keymap::tests::template_bindings_contains_expected_keys ... ok [INFO] [stdout] test input::keymap::tests::template_bindings_rename_description ... ok [INFO] [stdout] test input::keymap::tests::template_esc_is_noop ... ok [INFO] [stdout] test input::keymap::tests::template_n_maps_to_template_new ... ok [INFO] [stdout] test input::keymap::tests::template_unmapped_key_is_noop ... ok [INFO] [stdout] test input::keymap::tests::template_r_maps_to_template_rename ... ok [INFO] [stdout] test input::keymap::tests::template_e_maps_to_template_edit ... ok [INFO] [stdout] test input::keymap::tests::template_d_maps_to_template_delete ... ok [INFO] [stdout] test tests::card_entry_from_card_started_completed_present ... ok [INFO] [stdout] test tests::card_entry_due_date_present_serializes ... ok [INFO] [stdout] test tests::card_full_empty_body_serializes_as_empty_string ... ok [INFO] [stdout] test tests::card_entry_serializes_to_valid_json ... ok [INFO] [stdout] test tests::card_full_serializes_with_body_and_flattened_entry ... ok [INFO] [stdout] test input::keymap::tests::space_n_new_card ... ok [INFO] [stdout] test tests::card_entry_empty_collections_serialize_as_empty_arrays ... ok [INFO] [stdout] test input::keymap::tests::space_d_delete_card ... ok [INFO] [stdout] test tests::classify_time_eight_days_ago ... ok [INFO] [stdout] test tests::classify_time_three_days_ago ... ok [INFO] [stdout] test tests::classify_time_future_timestamp_is_today ... ok [INFO] [stdout] test tests::classify_time_twenty_days_ago ... ok [INFO] [stdout] test tests::classify_time_exactly_seven_days_ago ... ok [INFO] [stdout] test tests::classify_time_sixty_days_ago ... ok [INFO] [stdout] test tests::classify_time_exactly_thirty_days_ago ... ok [INFO] [stdout] test tests::classify_time_thirty_one_days_ago ... ok [INFO] [stdout] test tests::classify_time_today ... ok [INFO] [stdout] test tests::classify_time_two_days_ago ... ok [INFO] [stdout] test tests::classify_time_yesterday ... ok [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "JSON card", [INFO] [stdout] "column": "Backlog" [INFO] [stdout] } [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "JSON card", [INFO] [stdout] "column": "Backlog" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_add_with_column_by_slug ... ok [INFO] [stdout] test tests::cmd_add_with_column_sets_started ... ok [INFO] [stdout] test tests::cmd_add_json_card_actually_created ... ok [INFO] [stdout] test tests::cmd_add_with_column_done_sets_started_and_completed ... ok [INFO] [stdout] test tests::cmd_add_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_add_with_column_backlog_no_started ... ok [INFO] [stdout] test tests::cmd_add_with_invalid_due_date_returns_error ... ok [INFO] [stdout] test tests::cmd_add_with_column_case_insensitive_name ... ok [INFO] [stdout] test tests::cmd_add_with_column_invalid_returns_error ... ok [INFO] [stdout] test tests::cmd_add_with_column_none_defaults_to_first ... ok [INFO] [stdout] test tests::cmd_add_with_due_date_sets_field ... ok [INFO] [stdout] test tests::cmd_add_with_template_applies_fields ... ok [INFO] [stdout] test tests::cmd_archive_list_empty_archive_returns_ok ... ok [INFO] [stdout] test tests::cmd_add_with_template_due_override ... ok [INFO] [stdout] test tests::cmd_add_with_nonexistent_template_returns_err ... ok [INFO] [stdout] test tests::cmd_add_with_template_cli_priority_overrides ... ok [INFO] [stdout] test tests::cmd_add_with_template_cli_tags_merge ... ok [INFO] [stdout] id,title,completed,days_ago [INFO] [stdout] 1,Archived task,2026-04-10,0 [INFO] [stdout] test tests::cmd_add_without_due_date_field_is_none ... ok [INFO] [stdout] test tests::cmd_archive_list_csv_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_no_action_defaults_to_list ... ok [INFO] [stdout] [] [INFO] [stdout] test tests::cmd_archive_restore_card_not_in_archive_returns_err ... ok [INFO] [stdout] test tests::cmd_archive_restore_invalid_column_returns_err ... ok [INFO] [stdout] test tests::cmd_archive_list_no_kando_dir_returns_err ... ok [INFO] [stdout] Archive (1 cards): [INFO] [stdout] 1 Archived task completed 2026-03-11 (30 days ago) [INFO] [stdout] test tests::cmd_archive_restore_no_kando_dir_returns_err ... ok [INFO] [stdout] Archive (1 cards): [INFO] [stdout] 1 Archived task completed 2026-04-10 (0 days ago) [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Archived task", [INFO] [stdout] "column": "Backlog" [INFO] [stdout] } [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Archived task", [INFO] [stdout] "column": "Archive", [INFO] [stdout] "column_slug": "archive", [INFO] [stdout] "priority": "normal", [INFO] [stdout] "tags": [], [INFO] [stdout] "assignees": [], [INFO] [stdout] "created": "2026-04-10T08:32:50+00:00", [INFO] [stdout] "updated": "2026-04-10T08:32:50+00:00" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] Archive (1 cards): [INFO] [stdout] 1 Archived task completed 2026-04-10 (0 days ago) [INFO] [stdout] test tests::cmd_archive_restore_appends_activity_log ... ok [INFO] [stdout] test tests::cmd_archive_list_with_cards_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_list_uses_completed_date_returns_ok ... ok [INFO] [stdout] Archive (1 cards): [INFO] [stdout] 1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA… completed 2026-04-10 (0 days ago) [INFO] [stdout] test tests::cmd_archive_list_json_with_cards_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_list_json_empty_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_restore_preserves_completed_timestamp ... ok [INFO] [stdout] test tests::cmd_archive_list_falls_back_to_updated_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_list_long_title_does_not_panic ... ok [INFO] [stdout] 1 Plain title completed 2026-04-10 (0 days ago) [INFO] [stdout] test tests::cmd_archive_search_body_match_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_restore_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_search_empty_query_empty_archive_returns_ok ... ok [INFO] [stdout] 1 Archived task completed 2026-04-10 (0 days ago) [INFO] [stdout] test tests::cmd_archive_restore_to_archive_column_returns_err ... ok [INFO] [stdout] id,title,completed,days_ago [INFO] [stdout] 1,Archived task,2026-04-10,0 [INFO] [stdout] test tests::cmd_archive_search_case_insensitive_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_search_no_kando_dir_returns_err ... ok [INFO] [stdout] test tests::cmd_archive_search_csv_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_search_no_match_returns_ok ... ok [INFO] [stdout] test tests::cmd_archive_restore_preserves_started_timestamp ... ok [INFO] [stdout] test tests::cmd_col_add_after_invalid_column_returns_err ... ok [INFO] [stdout] test tests::cmd_archive_restore_to_custom_column_moves_card ... ok [INFO] [stdout] test tests::cmd_col_add_after_named_column ... ok [INFO] [stdout] [] [INFO] [stdout] test tests::cmd_archive_restore_to_done_moves_card ... ok [INFO] [stdout] test tests::cmd_col_add_appends_activity_log ... ok [INFO] [stdout] test tests::cmd_archive_search_json_no_match_returns_ok ... ok [INFO] [stdout] 1 Archived task completed 2026-04-10 (0 days ago) [INFO] [stdout] test tests::cmd_archive_search_title_match_returns_ok ... ok [INFO] [stdout] test tests::cmd_col_add_archive_name_gets_different_slug ... ok [INFO] [stdout] test tests::cmd_col_add_no_kando_dir_returns_err ... ok [INFO] [stdout] test tests::cmd_col_add_duplicate_name_gets_unique_slug ... ok [INFO] [stdout] test tests::cmd_col_add_empty_name_returns_err ... ok [INFO] [stdout] test tests::cmd_col_add_creates_column_dir_on_disk ... ok [INFO] [stdout] { [INFO] [stdout] "name": "Review", [INFO] [stdout] "slug": "review" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_col_add_slug_generated_from_name ... ok [INFO] [stdout] { [INFO] [stdout] "name": "Backlog", [INFO] [stdout] "slug": "backlog", [INFO] [stdout] "hidden": true [INFO] [stdout] } [INFO] [stdout] test tests::cmd_col_hide_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_col_add_json_returns_ok ... ok [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "position": 1, [INFO] [stdout] "name": "Backlog", [INFO] [stdout] "slug": "backlog", [INFO] [stdout] "cards": 0, [INFO] [stdout] "hidden": false [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "position": 2, [INFO] [stdout] "name": "In Progress", [INFO] [stdout] "slug": "in-progress", [INFO] [stdout] "cards": 0, [INFO] [stdout] "wip_limit": 3, [INFO] [stdout] "hidden": false [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "position": 3, [INFO] [stdout] "name": "Done", [INFO] [stdout] "slug": "done", [INFO] [stdout] "cards": 0, [INFO] [stdout] "hidden": false [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "position": 4, [INFO] [stdout] "name": "Archive", [INFO] [stdout] "slug": "archive", [INFO] [stdout] "cards": 0, [INFO] [stdout] "hidden": true [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] test tests::cmd_col_list_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_col_add_inserted_before_hidden_column ... ok [INFO] [stdout] test tests::cmd_col_list_no_kando_dir_returns_err ... ok [INFO] [stdout] test tests::cmd_col_cli_no_action_defaults_to_list ... ok [INFO] [stdout] test tests::cmd_col_move_appends_activity_log ... ok [INFO] [stdout] test tests::cmd_col_add_orders_normalized_after_insert ... ok [INFO] [stdout] test tests::cmd_col_list_returns_ok_with_board ... ok [INFO] [stdout] position,name,slug,cards,wip_limit,hidden [INFO] [stdout] 1,Backlog,backlog,0,,false [INFO] [stdout] 2,In Progress,in-progress,0,3,false [INFO] [stdout] 3,Done,done,0,,false [INFO] [stdout] 4,Archive,archive,0,,true [INFO] [stdout] test tests::cmd_col_add_saves_board_persistently ... ok [INFO] [stdout] test input::keymap::tests::detail_e_edits_external ... ok [INFO] [stdout] test input::keymap::tests::input_char_inserts ... ok [INFO] [stdout] test input::keymap::tests::space_p_pick_priority ... ok [INFO] [stdout] test tests::card_entry_due_date_none_omitted_from_json ... ok [INFO] [stdout] test tests::card_entry_from_card_maps_all_fields ... ok [INFO] [stdout] { [INFO] [stdout] "name": "Backlog", [INFO] [stdout] "slug": "backlog", [INFO] [stdout] "position": 2 [INFO] [stdout] } [INFO] [stdout] test tests::cmd_col_move_no_kando_dir_returns_err ... ok [INFO] [stdout] test tests::cmd_col_move_first_happy_path ... ok [INFO] [stdout] test tests::cmd_col_list_csv_returns_ok ... ok [INFO] [stdout] test tests::cmd_col_move_left_already_leftmost_returns_err ... ok [INFO] [stdout] test tests::cmd_col_move_left_happy_path ... ok [INFO] [stdout] test tests::cmd_col_move_numeric_position_exceeds_len_returns_err ... ok [INFO] [stdout] test tests::cmd_col_move_same_position_is_noop ... ok [INFO] [stdout] test tests::cmd_col_move_right_happy_path ... ok [INFO] [stdout] test tests::cmd_col_move_saves_board_persistently ... ok [INFO] [stdout] test tests::cmd_col_remove_appends_activity_log ... ok [INFO] [stdout] test tests::cmd_col_remove_archive_reserved_returns_err ... ok [INFO] [stdout] test tests::cmd_col_move_nonexistent_column_returns_err ... ok [INFO] [stdout] test tests::cmd_col_move_numeric_position_0_returns_err ... ok [INFO] [stdout] test tests::cmd_col_remove_empty_column_dir_deleted ... ok [INFO] [stdout] test tests::bubble_up_days_alias_deserializes_as_stale_days ... ok [INFO] [stdout] test tests::cmd_col_remove_no_kando_dir_returns_err ... ok [INFO] [stdout] test tests::cmd_col_remove_move_to_invalid_column_returns_err ... ok [INFO] [stdout] test tests::cmd_col_remove_empty_column_succeeds ... ok [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Archived task", [INFO] [stdout] "column": "Archive", [INFO] [stdout] "column_slug": "archive", [INFO] [stdout] "priority": "normal", [INFO] [stdout] "tags": [], [INFO] [stdout] "assignees": [], [INFO] [stdout] "created": "2026-04-10T08:32:50+00:00", [INFO] [stdout] "updated": "2026-04-10T08:32:50+00:00" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] 1 Archived task completed 2026-04-10 (0 days ago) [INFO] [stdout] test tests::cmd_col_move_numeric_position_valid ... ok [INFO] [stdout] test tests::cmd_col_move_invalid_string_returns_err ... ok [INFO] [stdout] test tests::cmd_col_remove_orders_normalized_after_remove ... ok [INFO] [stdout] test tests::cmd_archive_restore_saves_board ... ok [INFO] [stdout] test tests::cmd_col_remove_nonempty_without_move_to_returns_err ... ok [INFO] [stdout] test tests::cmd_archive_search_json_match_returns_ok ... ok [INFO] [stdout] test tests::cmd_col_move_cards_preserved_after_reorder ... ok [INFO] [stdout] test tests::cmd_archive_search_empty_query_returns_ok ... ok [INFO] [stdout] test tests::cmd_col_move_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_col_add_happy_path_column_created ... ok [INFO] [stdout] test tests::cmd_col_remove_move_to_same_column_returns_err ... ok [INFO] [stdout] test tests::cmd_col_move_right_already_rightmost_returns_err ... ok [INFO] [stdout] test tests::cmd_col_move_last_happy_path ... ok [INFO] [stdout] test tests::cmd_col_rename_nonexistent_column_returns_err ... ok [INFO] [stdout] test tests::cmd_col_rename_appends_activity_log ... ok [INFO] [stdout] test tests::cmd_col_rename_saves_board_persistently ... ok [INFO] [stdout] test tests::cmd_col_rename_slug_changes ... ok [INFO] [stdout] { [INFO] [stdout] "name": "Backlog", [INFO] [stdout] "slug": "backlog", [INFO] [stdout] "hidden": false [INFO] [stdout] } [INFO] [stdout] test tests::cmd_col_rename_happy_path_name_updated ... ok [INFO] [stdout] { [INFO] [stdout] "old_name": "Backlog", [INFO] [stdout] "new_name": "Todo", [INFO] [stdout] "old_slug": "backlog", [INFO] [stdout] "new_slug": "todo" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_col_rename_no_kando_dir_returns_err ... ok [INFO] [stdout] test tests::cmd_col_show_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_col_rename_same_name_as_self_is_allowed ... ok [INFO] [stdout] test tests::cmd_col_remove_last_column_returns_err ... ok [INFO] [stdout] test tests::cmd_config_archive_after_days_no_kando_dir_returns_err ... ok [INFO] [stdout] test tests::cmd_col_remove_nonexistent_column_returns_err ... ok [INFO] [stdout] test tests::cmd_col_rename_empty_new_name_returns_err ... ok [INFO] [stdout] test tests::cmd_col_rename_duplicate_slug_returns_err ... ok [INFO] [stdout] test tests::cmd_col_move_orders_assigned_by_vec_position ... ok [INFO] [stdout] test tests::cmd_config_archive_after_days_default_is_zero ... ok [INFO] [stdout] test tests::cmd_col_rename_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_col_rename_name_derived_from_slug ... ok [INFO] [stdout] test tests::cmd_config_archive_after_days_persists_value ... ok [INFO] [stdout] test tests::cmd_config_show_returns_ok ... ok [INFO] [stdout] { [INFO] [stdout] "name": "Test", [INFO] [stdout] "nerd_font": false, [INFO] [stdout] "policies": { [INFO] [stdout] "auto_close_days": 30, [INFO] [stdout] "auto_close_target": "archive", [INFO] [stdout] "stale_days": 7, [INFO] [stdout] "trash_purge_days": 30, [INFO] [stdout] "archive_after_days": 0 [INFO] [stdout] }, [INFO] [stdout] "wip_limits": { [INFO] [stdout] "in-progress": 3 [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] test tests::cmd_config_auto_close_target_valid_column_persists ... ok [INFO] [stdout] test tests::cmd_config_nerd_font_off_persists ... ok [INFO] [stdout] test tests::cmd_delete_card_moved_to_trash_not_deleted ... ok [INFO] [stdout] test tests::cmd_config_show_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_config_auto_close_days_persists ... ok [INFO] [stdout] test tests::cmd_config_stale_days_persists ... ok [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "name": "board_exists", [INFO] [stdout] "passed": false, [INFO] [stdout] "message": "Board not found", [INFO] [stdout] "hint": "Run: kando init" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] test tests::cmd_doctor_json_no_board_returns_nonzero ... ok [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "name": "board_exists", [INFO] [stdout] "passed": true, [INFO] [stdout] "message": "Board found at /tmp/.tmpcp4oBi/.kando" [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "board_config", [INFO] [stdout] "passed": true, [INFO] [stdout] "message": "Board config valid (name: \"Test\")" [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "columns", [INFO] [stdout] "passed": true, [INFO] [stdout] "message": "4 columns OK" [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "cards", [INFO] [stdout] "passed": true, [INFO] [stdout] "message": "0 cards loaded" [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "sync", [INFO] [stdout] "passed": true, [INFO] [stdout] "message": "Not configured", [INFO] [stdout] "hint": "Run kando init --git to enable" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card", [INFO] [stdout] "from": "Backlog" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_col_remove_with_move_to_drains_cards ... ok [INFO] [stdout] test tests::cmd_config_auto_close_target_invalid_column_returns_err ... ok [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card", [INFO] [stdout] "from": "Backlog" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_doctor_json_healthy_board_returns_zero ... ok [INFO] [stdout] test tests::cmd_doctor_human_healthy_board_returns_zero ... ok [INFO] [stdout] test tests::cmd_delete_json_card_not_found_returns_err ... ok [INFO] [stdout] test tests::cmd_config_trash_purge_days_persists ... ok [INFO] [stdout] test tests::cmd_delete_happy_path_card_removed_from_board ... ok [INFO] [stdout] test tests::cmd_config_archive_after_days_zero_disables ... ok [INFO] [stdout] test tests::cmd_delete_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_delete_json_card_actually_removed ... ok [INFO] [stdout] test tests::cmd_config_nerd_font_on_persists ... ok [INFO] [stdout] test tests::cmd_delete_card_not_found_returns_err ... ok [INFO] [stdout] test tests::cmd_delete_activity_log_written ... ok [INFO] [stdout] test tests::cmd_edit_add_existing_tag_is_idempotent ... ok [INFO] [stdout] test tests::cmd_edit_blocked_and_unblocked_both_true_unblocked_wins ... ok [INFO] [stdout] test tests::cmd_config_archive_after_days_overwrite_works ... ok [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card" [INFO] [stdout] } [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_edit_json_blocked_returns_ok ... ok [INFO] [stdout] test tests::cmd_edit_card_not_found_returns_err ... ok [INFO] [stdout] test tests::cmd_edit_due_date_sets_field ... ok [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "New Title" [INFO] [stdout] } [INFO] [stdout] id,column,age,priority,title,tags,assignees,blocked,due [INFO] [stdout] test tests::cmd_edit_blocked_sets_flag ... ok [INFO] [stdout] test tests::cmd_edit_due_counts_as_has_flags ... ok [INFO] [stdout] test tests::cmd_edit_json_title_actually_changed ... ok [INFO] [stdout] test tests::cmd_list_csv_empty_board_returns_ok ... ok [INFO] [stdout] id,column,age,priority,title,tags,assignees,blocked,due [INFO] [stdout] 1,Backlog,new,normal,Test card,bug,alice,false, [INFO] [stdout] test tests::cmd_list_csv_returns_ok ... ok [INFO] [stdout] test tests::cmd_edit_due_date_invalid_returns_error ... ok [INFO] [stdout] test tests::cmd_edit_title_change ... ok [INFO] [stdout] [] [INFO] [stdout] test tests::cmd_list_json_returns_ok ... ok [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_edit_tag_remove_normalizes_to_lowercase ... ok [INFO] [stdout] test tests::cmd_log_empty_activity_log_returns_ok ... ok [INFO] [stdout] [] [INFO] [stdout] Older [INFO] [stdout] 2025-06-01 10:00 Created "Test" in Backlog [INFO] [stdout] test tests::cmd_log_json_empty_file_returns_empty_array ... ok [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "action": "create", [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test", [INFO] [stdout] "ts": "2025-06-01T10:00:00Z" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] test tests::cmd_log_human_mode_returns_ok ... ok [INFO] [stdout] test tests::cmd_log_json_mode_returns_ok ... ok [INFO] [stdout] test tests::cmd_edit_remove_nonexistent_tag_succeeds ... ok [INFO] [stdout] [] [INFO] [stdout] Older [INFO] [stdout] 2025-06-01 10:00 Created "Test" in [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "action": "create", [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test", [INFO] [stdout] "ts": "2025-06-01T10:00:00Z" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] test tests::cmd_list_overdue_filter_excludes_non_overdue ... ok [INFO] [stdout] test tests::cmd_log_json_no_activity_log_returns_empty_array ... ok [INFO] [stdout] test tests::cmd_log_malformed_lines_skipped ... ok [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card", [INFO] [stdout] "column": "Backlog", [INFO] [stdout] "column_slug": "backlog", [INFO] [stdout] "priority": "normal", [INFO] [stdout] "tags": [ [INFO] [stdout] "bug" [INFO] [stdout] ], [INFO] [stdout] "assignees": [ [INFO] [stdout] "alice" [INFO] [stdout] ], [INFO] [stdout] "created": "2026-04-10T08:32:50+00:00", [INFO] [stdout] "updated": "2026-04-10T08:32:50+00:00" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] test tests::cmd_log_no_activity_log_returns_ok ... ok [INFO] [stdout] test tests::cmd_list_json_with_card_returns_ok ... ok [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card", [INFO] [stdout] "column": "Backlog", [INFO] [stdout] "column_slug": "backlog", [INFO] [stdout] "priority": "normal", [INFO] [stdout] "tags": [ [INFO] [stdout] "bug" [INFO] [stdout] ], [INFO] [stdout] "assignees": [ [INFO] [stdout] "alice" [INFO] [stdout] ], [INFO] [stdout] "created": "2026-04-10T08:32:50+00:00", [INFO] [stdout] "updated": "2026-04-10T08:32:50+00:00" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card", [INFO] [stdout] "column": "Backlog", [INFO] [stdout] "column_slug": "backlog", [INFO] [stdout] "priority": "normal", [INFO] [stdout] "tags": [ [INFO] [stdout] "bug" [INFO] [stdout] ], [INFO] [stdout] "assignees": [ [INFO] [stdout] "alice" [INFO] [stdout] ], [INFO] [stdout] "created": "2026-04-10T08:32:50+00:00", [INFO] [stdout] "updated": "2026-04-10T08:32:50+00:00" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "New Title" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_log_stream_empty_file_returns_ok ... ok [INFO] [stdout] test tests::cmd_log_nested_cwd_finds_kando_in_ancestor ... ok [INFO] [stdout] test tests::cmd_log_no_trailing_newline_returns_ok ... ok [INFO] [stdout] test tests::cmd_list_json_tag_filter_returns_ok ... ok [INFO] [stdout] test tests::cmd_log_non_utf8_content_returns_err ... ok [INFO] [stdout] {"action":"create","id":"1","title":"Test","ts":"2025-06-01T10:00:00Z"} [INFO] [stdout] test tests::cmd_log_unreadable_file_returns_err ... ok [INFO] [stdout] test tests::cmd_edit_json_title_returns_ok ... ok [INFO] [stdout] test tests::cmd_edit_json_tag_add_returns_ok ... ok [INFO] [stdout] test tests::cmd_list_json_column_filter_returns_ok ... ok [INFO] [stdout] test tests::cmd_log_valid_jsonl_returns_ok ... ok [INFO] [stdout] test tests::cmd_edit_json_no_flags_bails ... ok [INFO] [stdout] test tests::cmd_edit_priority_change ... ok [INFO] [stdout] test tests::cmd_log_human_invalid_ts_entries_skipped ... ok [INFO] [stdout] test tests::cmd_edit_json_priority_returns_ok ... ok [INFO] [stdout] test tests::cmd_log_stream_mode_returns_ok ... ok [INFO] [stdout] test tests::cmd_log_no_kando_dir_returns_err ... ok [INFO] [stdout] not json [INFO] [stdout] {also bad} [INFO] [stdout] {"action":"create","id":"1","title":"Test","ts":"2025-06-01T10:00:00Z"} [INFO] [stdout] test tests::cmd_log_stream_with_malformed_lines_passes_through ... ok [INFO] [stdout] test tests::cmd_log_stream_takes_precedence_over_json ... ok [INFO] [stdout] test tests::cmd_log_stream_no_activity_log_returns_ok ... ok [INFO] [stdout] test tests::cmd_show_card_not_found_returns_err ... ok [INFO] [stdout] test tests::cmd_edit_unblocked_clears_flag ... ok [INFO] [stdout] --- [INFO] [stdout] id = "1" [INFO] [stdout] title = "No body" [INFO] [stdout] created = "2026-04-10T08:32:50Z" [INFO] [stdout] updated = "2026-04-10T08:32:50Z" [INFO] [stdout] priority = "normal" [INFO] [stdout] tags = [] [INFO] [stdout] --- [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] --- [INFO] [stdout] id = "1" [INFO] [stdout] title = "Unicode card" [INFO] [stdout] created = "2026-04-10T08:32:50Z" [INFO] [stdout] updated = "2026-04-10T08:32:50Z" [INFO] [stdout] priority = "normal" [INFO] [stdout] tags = [] [INFO] [stdout] --- [INFO] [stdout] [INFO] [stdout] Line 1 [INFO] [stdout] Line 2 [INFO] [stdout] Emoji: 🚀🦀 [INFO] [stdout] CJK: 日本語 [INFO] [stdout] Arabic: مرحبا [INFO] [stdout] { [INFO] [stdout] "wip_per_column": [ [INFO] [stdout] { [INFO] [stdout] "name": "Backlog", [INFO] [stdout] "count": 0, [INFO] [stdout] "wip_limit": null, [INFO] [stdout] "is_active": false [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "In Progress", [INFO] [stdout] "count": 0, [INFO] [stdout] "wip_limit": 3, [INFO] [stdout] "is_active": true [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "Done", [INFO] [stdout] "count": 0, [INFO] [stdout] "wip_limit": null, [INFO] [stdout] "is_active": false [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "Archive", [INFO] [stdout] "count": 0, [INFO] [stdout] "wip_limit": null, [INFO] [stdout] "is_active": false [INFO] [stdout] } [INFO] [stdout] ], [INFO] [stdout] "active_wip_total": 0, [INFO] [stdout] "blocked_count": 0, [INFO] [stdout] "blocked_pct": 0.0, [INFO] [stdout] "throughput_per_week": [], [INFO] [stdout] "throughput_stddev": null, [INFO] [stdout] "arrival_per_week": [], [INFO] [stdout] "time_stats": null, [INFO] [stdout] "priority_breakdown": [], [INFO] [stdout] "total_completed": 0, [INFO] [stdout] "since": "2026-04-10T08:32:50Z", [INFO] [stdout] "work_item_age": null, [INFO] [stdout] "stage_times": null [INFO] [stdout] } [INFO] [stdout] --- [INFO] [stdout] id = "1" [INFO] [stdout] title = "In Progress card" [INFO] [stdout] created = "2026-04-10T08:32:50Z" [INFO] [stdout] updated = "2026-04-10T08:32:50Z" [INFO] [stdout] priority = "normal" [INFO] [stdout] tags = [] [INFO] [stdout] --- [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] --- [INFO] [stdout] id = "10" [INFO] [stdout] title = "Card ten" [INFO] [stdout] created = "2026-04-10T08:32:50Z" [INFO] [stdout] updated = "2026-04-10T08:32:50Z" [INFO] [stdout] priority = "normal" [INFO] [stdout] tags = [] [INFO] [stdout] --- [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] test tests::cmd_show_json_card_not_found_returns_err ... ok [INFO] [stdout] test tests::cmd_metrics_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_show_card_in_non_first_column ... ok [INFO] [stdout] test tests::cmd_show_file_missing_from_disk ... ok [INFO] [stdout] test tests::cmd_show_card_with_unicode_and_multiline_body ... ok [INFO] [stdout] test tests::cmd_show_disambiguates_prefix_matches ... ok [INFO] [stdout] { [INFO] [stdout] "wip_per_column": [ [INFO] [stdout] { [INFO] [stdout] "name": "Backlog", [INFO] [stdout] "count": 0, [INFO] [stdout] "wip_limit": null, [INFO] [stdout] "is_active": false [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "In Progress", [INFO] [stdout] "count": 0, [INFO] [stdout] "wip_limit": 3, [INFO] [stdout] "is_active": true [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "Done", [INFO] [stdout] "count": 0, [INFO] [stdout] "wip_limit": null, [INFO] [stdout] "is_active": false [INFO] [stdout] }, [INFO] [stdout] { [INFO] [stdout] "name": "Archive", [INFO] [stdout] "count": 0, [INFO] [stdout] "wip_limit": null, [INFO] [stdout] "is_active": false [INFO] [stdout] } [INFO] [stdout] ], [INFO] [stdout] "active_wip_total": 0, [INFO] [stdout] "blocked_count": 0, [INFO] [stdout] "blocked_pct": 0.0, [INFO] [stdout] "throughput_per_week": [], [INFO] [stdout] "throughput_stddev": null, [INFO] [stdout] "arrival_per_week": [], [INFO] [stdout] "time_stats": null, [INFO] [stdout] "priority_breakdown": [], [INFO] [stdout] "total_completed": 0, [INFO] [stdout] "since": "2026-03-13T08:32:50.893494699Z", [INFO] [stdout] "work_item_age": null, [INFO] [stdout] "stage_times": null [INFO] [stdout] } [INFO] [stdout] test tests::cmd_show_card_with_empty_body ... ok [INFO] [stdout] test tests::cmd_move_json_column_not_found_returns_err ... ok [INFO] [stdout] test tests::cmd_metrics_csv_returns_ok ... ok [INFO] [stdout] { [INFO] [stdout] "configured": false [INFO] [stdout] } [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "", [INFO] [stdout] "from": "Backlog", [INFO] [stdout] "to": "In Progress" [INFO] [stdout] } [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card", [INFO] [stdout] "column": "Backlog", [INFO] [stdout] "column_slug": "backlog", [INFO] [stdout] "priority": "normal", [INFO] [stdout] "tags": [ [INFO] [stdout] "bug" [INFO] [stdout] ], [INFO] [stdout] "assignees": [ [INFO] [stdout] "alice" [INFO] [stdout] ], [INFO] [stdout] "created": "2026-04-10T08:32:50+00:00", [INFO] [stdout] "updated": "2026-04-10T08:32:50+00:00", [INFO] [stdout] "body": "" [INFO] [stdout] } [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "", [INFO] [stdout] "from": "Backlog", [INFO] [stdout] "to": "In Progress" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_edit_tag_add_normalizes_to_lowercase ... ok [INFO] [stdout] test tests::cmd_show_no_kando_dir_returns_err ... ok [INFO] [stdout] test tests::cmd_metrics_json_with_weeks_returns_ok ... ok [INFO] [stdout] tag,count [INFO] [stdout] bug,1 [INFO] [stdout] test tests::cmd_sync_status_json_returns_ok ... ok [INFO] [stdout] [] [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "slug": "bug-report", [INFO] [stdout] "name": "Bug Report", [INFO] [stdout] "priority": "normal", [INFO] [stdout] "tags": [], [INFO] [stdout] "assignees": [] [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] --- [INFO] [stdout] id = "1" [INFO] [stdout] title = "My pipe card" [INFO] [stdout] created = "2026-04-10T08:32:50Z" [INFO] [stdout] updated = "2026-04-10T08:32:50Z" [INFO] [stdout] priority = "normal" [INFO] [stdout] tags = [] [INFO] [stdout] --- [INFO] [stdout] [INFO] [stdout] Some description for piping. [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "tag": "bug", [INFO] [stdout] "count": 1 [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] slug,name,priority,tags,assignees,blocked,due_offset_days [INFO] [stdout] tag,count [INFO] [stdout] test tests::cmd_move_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_show_json_returns_ok ... ok [INFO] [stdout] test tests::cmd_edit_due_date_clear_removes_field ... ok [INFO] [stdout] test tests::cmd_template_edit_nonexistent_returns_err ... ok [INFO] [stdout] test tests::cmd_tags_csv_returns_ok ... ok [INFO] [stdout] test tests::cmd_show_card_id_with_leading_trailing_whitespace_returns_err ... ok [INFO] [stdout] test tests::cmd_move_json_card_not_found_returns_err ... ok [INFO] [stdout] test tests::cmd_template_list_json_empty_returns_ok ... ok [INFO] [stdout] test tests::cmd_template_list_json_with_templates_returns_ok ... ok [INFO] [stdout] test tests::cmd_show_prints_card_file_contents ... ok [INFO] [stdout] test tests::cmd_move_json_card_actually_moved ... ok [INFO] [stdout] test tests::cmd_tags_json_with_tags_returns_ok ... ok [INFO] [stdout] test tests::cmd_template_list_csv_empty_returns_ok ... ok [INFO] [stdout] [] [INFO] [stdout] { [INFO] [stdout] "purged": 0 [INFO] [stdout] } [INFO] [stdout] { [INFO] [stdout] "name": "Bug", [INFO] [stdout] "slug": "bug" [INFO] [stdout] } [INFO] [stdout] test tests::cmd_template_list_empty_returns_ok ... ok [INFO] [stdout] test tests::cmd_tags_csv_empty_board_returns_ok ... ok [INFO] [stdout] test tests::column_entry_serializes_correctly ... ok [INFO] [stdout] test tests::cmd_tags_json_returns_ok ... ok [INFO] [stdout] [] [INFO] [stdout] test tests::cmd_template_remove_json_returns_ok ... ok [INFO] [stdout] test tests::column_entry_skips_wip_limit_when_none ... ok [INFO] [stdout] test tests::config_json_serializes_correctly ... ok [INFO] [stdout] test tests::doctor_check_skips_hint_when_none ... ok [INFO] [stdout] test tests::format_follow_line_invalid_json_returns_raw ... ok [INFO] [stdout] test tests::format_log_entry_archive ... ok [INFO] [stdout] test tests::format_log_entry_assignees ... ok [INFO] [stdout] test tests::format_log_entry_blocker_blocked ... ok [INFO] [stdout] test tests::cmd_trash_purge_json_empty_returns_ok ... ok [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "title": "Test card", [INFO] [stdout] "column": "Backlog" [INFO] [stdout] } [INFO] [stdout] [ [INFO] [stdout] { [INFO] [stdout] "id": "1", [INFO] [stdout] "deleted": "2026-04-10T08:32:50Z", [INFO] [stdout] "from_column": "backlog", [INFO] [stdout] "title": "Test card" [INFO] [stdout] } [INFO] [stdout] ] [INFO] [stdout] test tests::cmd_trash_list_json_empty_returns_ok ... ok [INFO] [stdout] test tests::cmd_template_remove_existing_returns_ok ... ok [INFO] [stdout] test tests::format_log_entry_blocker_missing_blocked_field ... ok [INFO] [stdout] test tests::format_log_entry_blocker_unblocked ... ok [INFO] [stdout] test tests::format_follow_line_missing_ts_omits_time ... ok [INFO] [stdout] test tests::format_follow_line_valid_json ... ok [INFO] [stdout] test tests::cmd_template_remove_nonexistent_returns_err ... ok [INFO] [stdout] test tests::format_follow_line_invalid_ts_omits_time ... ok [INFO] [stdout] test tests::format_log_entry_auto_close ... ok [INFO] [stdout] test tests::format_log_entry_col_add ... ok [INFO] [stdout] test tests::cmd_template_list_with_templates_returns_ok ... ok [INFO] [stdout] test tests::cmd_trash_restore_json_returns_ok ... ok [INFO] [stdout] test tests::doctor_check_serializes_with_hint ... ok [INFO] [stdout] test tests::cmd_trash_list_json_with_entries_returns_ok ... ok [INFO] [stdout] test tests::format_log_entry_col_rename ... ok [INFO] [stdout] id,title,from_column,deleted [INFO] [stdout] test tests::format_log_entry_col_remove ... ok [INFO] [stdout] test tests::format_log_entry_col_hide ... ok [INFO] [stdout] test tests::format_log_entry_col_rename_legacy ... ok [INFO] [stdout] test tests::format_log_entry_create ... ok [INFO] [stdout] test tests::format_log_entry_col_move ... ok [INFO] [stdout] test tests::format_log_entry_restore ... ok [INFO] [stdout] test tests::format_log_entry_tags ... ok [INFO] [stdout] test tests::format_log_entry_edit ... ok [INFO] [stdout] test tests::format_log_entry_missing_action ... ok [INFO] [stdout] test tests::cmd_trash_csv_empty_returns_ok ... ok [INFO] [stdout] test tests::format_log_entry_missing_title ... ok [INFO] [stdout] test tests::format_log_entry_col_show ... ok [INFO] [stdout] test tests::format_log_entry_priority ... ok [INFO] [stdout] test tests::format_log_entry_move ... ok [INFO] [stdout] id,title,from_column,deleted [INFO] [stdout] 1,Test card,backlog,2026-04-10T08:32:50Z [INFO] [stdout] test tests::format_log_entry_delete ... ok [INFO] [stdout] test tests::format_time_in_bucket_last_month_shows_mon_dd_hhmm ... ok [INFO] [stdout] test tests::format_time_in_bucket_last_week_shows_day_hhmm ... ok [INFO] [stdout] test tests::sync_status_json_not_configured_skips_optional ... ok [INFO] [stdout] test tests::format_time_in_bucket_today_shows_hhmm ... ok [INFO] [stdout] test tests::mutation_result_includes_from_to_when_set ... ok [INFO] [stdout] test tests::mutation_result_skips_none_fields ... ok [INFO] [stdout] test tests::format_log_entry_unarchive ... ok [INFO] [stdout] test tests::format_log_entry_unknown_action ... ok [INFO] [stdout] test tests::format_time_in_bucket_older_shows_full_date ... ok [INFO] [stdout] test tests::format_time_in_bucket_yesterday_shows_hhmm ... ok [INFO] [stdout] test tests::tag_entry_serializes_correctly ... ok [INFO] [stdout] test tests::write_csv_row_escapes_carriage_return ... ok [INFO] [stdout] test tests::write_csv_row_escapes_commas ... ok [INFO] [stdout] test tests::write_csv_row_escapes_quotes ... ok [INFO] [stdout] test tests::write_csv_row_escapes_newlines ... ok [INFO] [stdout] test ui::board_view::tests::border_color_blocked_beats_overdue_with_stale ... ok [INFO] [stdout] test ui::board_view::tests::border_color_blocked_wins_over_all ... ok [INFO] [stdout] test ui::board_view::tests::border_color_focused_stale_is_stale_color ... ok [INFO] [stdout] test ui::board_view::tests::border_color_focused_fresh_is_card_border ... ok [INFO] [stdout] test ui::board_view::tests::border_color_focused_very_stale_is_very_stale_color ... ok [INFO] [stdout] test ui::board_view::tests::border_color_overdue_beats_staleness ... ok [INFO] [stdout] test ui::board_view::tests::border_color_stale_always_shows_semantic_color ... ok [INFO] [stdout] test ui::board_view::tests::border_color_unfocused_stale_returns_stale_color ... ok [INFO] [stdout] test ui::board_view::tests::border_color_unfocused_very_stale_returns_very_stale_color ... ok [INFO] [stdout] test ui::board_view::tests::border_color_new_card_is_green ... ok [INFO] [stdout] test ui::board_view::tests::border_color_very_stale_always_shows_semantic_color ... ok [INFO] [stdout] test ui::board_view::tests::border_color_overdue_beats_new_card ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_all_fit_returns_all ... ok [INFO] [stdout] test ui::board_view::tests::border_color_staleness_beats_new_card ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_empty_input_returns_empty ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_exact_boundary_no_drop ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_one_over_boundary_drops_leftmost ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_preserves_input_order ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_urgent_dropped_blocker_survives ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_urgent_exact_fit ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_drops_stale_when_only_blocker_fits ... ok [INFO] [stdout] test ui::board_view::tests::is_new_card_one_second_across_midnight_is_false ... ok [INFO] [stdout] test ui::board_view::tests::is_new_card_same_day_start_and_end ... ok [INFO] [stdout] test ui::board_view::tests::is_new_card_created_yesterday_is_false ... ok [INFO] [stdout] test ui::board_view::tests::total_icon_width_empty_is_zero ... ok [INFO] [stdout] test tests::write_csv_row_plain_fields ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_clears_all_when_nothing_fits ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_drops_stale_and_priority_blocker_survives ... ok [INFO] [stdout] test ui::board_view::tests::is_new_card_created_today_is_true ... ok [INFO] [stdout] test tests::resolve_col_cli_name_case_insensitive ... ok [INFO] [stdout] test ui::board_view::tests::fit_icons_after_left_drop_remaining_order_preserved ... ok [INFO] [stdout] test tests::resolve_col_cli_not_found_returns_err_with_hint ... ok [INFO] [stdout] test tests::resolve_col_cli_partial_slug_no_match ... ok [INFO] [stdout] test tests::cmd_trash_csv_returns_ok ... ok [INFO] [stdout] test ui::board_view::tests::total_icon_width_one_icon_no_separator ... ok [INFO] [stdout] test ui::board_view::tests::total_icon_width_three_icons_two_separators ... ok [INFO] [stdout] test ui::board_view::tests::total_icon_width_two_char_icon_counts_correctly ... ok [INFO] [stdout] test ui::board_view::tests::total_icon_width_two_icons_one_separator ... ok [INFO] [stdout] test ui::status_bar::tests::cursor_at_start_reverses_first_char ... ok [INFO] [stdout] test ui::status_bar::tests::cursor_at_end_shows_reversed_space ... ok [INFO] [stdout] test tests::resolve_col_cli_exact_slug_match ... ok [INFO] [stdout] test ui::status_bar::tests::cursor_in_middle_reverses_char ... ok [INFO] [stdout] test ui::status_bar::tests::empty_input_shows_reversed_space ... ok [INFO] [stdout] test ui::status_bar::tests::left_zone_normal_mode_no_filters ... ok [INFO] [stdout] test ui::status_bar::tests::left_zone_multiple_filters_together ... ok [INFO] [stdout] test ui::board_view::tests::border_color_unfocused_fresh_returns_dim ... ok [INFO] [stdout] test ui::status_bar::tests::left_zone_shows_active_text_filter ... ok [INFO] [stdout] test ui::status_bar::tests::left_zone_shows_assignee_filters ... ok [INFO] [stdout] test ui::status_bar::tests::left_zone_template_mode_shows_badge ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_no_repeat_hint_when_none ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_no_sync_has_two_spans ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_repeat_hint_delete_text ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_repeat_hint_high_risk_bold_yellow ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_repeat_hint_low_risk_fg ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_repeat_hint_normal_risk_fg ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_shows_board_name ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_repeat_hint_ends_with_double_space ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_sync_online_shows_icon ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_repeat_hint_with_sync_icon_span_order ... ok [INFO] [stdout] test ui::tests::centered_rect_min_width_enforced ... ok [INFO] [stdout] test ui::tests::centered_rect_with_offset ... ok [INFO] [stdout] test ui::tests::centered_rect_zero_area ... ok [INFO] [stdout] test ui::status_bar::tests::left_zone_shows_staleness_filters ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_shows_repeat_hint ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_repeat_hint_col_remove_text ... ok [INFO] [stdout] test ui::tests::centered_rect_basic ... ok [INFO] [stdout] test ui::tests::centered_rect_capped_at_area ... ok [INFO] [stdout] test ui::tests::overlay_rect_enforces_minimums ... ok [INFO] [stdout] test ui::theme::tests::all_icon_fields_are_non_empty ... ok [INFO] [stdout] test ui::theme::tests::dim_style_uses_dim_color ... ok [INFO] [stdout] test ui::tests::centered_rect_min_height_enforced ... ok [INFO] [stdout] test ui::status_bar::tests::left_zone_shows_tag_filters ... ok [INFO] [stdout] test ui::theme::tests::bubble_up_colors_escalate_without_matching_blocker ... ok [INFO] [stdout] test ui::theme::tests::bubble_up_levels_are_distinct_colors ... ok [INFO] [stdout] test ui::theme::tests::icons_nerd_font_when_enabled ... ok [INFO] [stdout] test ui::theme::tests::nerd_icons_are_all_distinct ... ok [INFO] [stdout] test ui::theme::tests::new_card_title_is_green ... ok [INFO] [stdout] test ui::theme::tests::column_border_is_dimmed ... ok [INFO] [stdout] test ui::theme::tests::priority_returns_none_for_normal ... ok [INFO] [stdout] test ui::theme::tests::column_focused_border_is_reset ... ok [INFO] [stdout] test ui::theme::tests::priority_returns_some_for_non_normal ... ok [INFO] [stdout] test ui::tests::overlay_rect_returns_expected_size ... ok [INFO] [stdout] test ui::theme::tests::semantic_content_colors_are_never_dim ... ok [INFO] [stdout] test ui::theme::tests::tag_color_deterministic ... ok [INFO] [stdout] test ui::theme::tests::tag_color_different_tags_may_differ ... ok [INFO] [stdout] test ui::theme::tests::tag_color_empty_string_no_panic ... ok [INFO] [stdout] test ui::theme::tests::tag_color_never_returns_dim ... ok [INFO] [stdout] test ui::theme::tests::status_style_uses_fg_color ... ok [INFO] [stdout] test ui::theme::tests::icons_default_is_ascii ... ok [INFO] [stdout] test ui::theme::tests::very_stale_nerd_icon_is_warning_triangle ... ok [INFO] [stdout] test ui::theme::tests::priority_color_all_variants ... ok [INFO] [stdout] test ui::theme::tests::sync_offline_ascii_icon_is_exclamation ... ok [INFO] [stdout] test ui::theme::tests::sync_offline_nerd_icon_is_broken_chain ... ok [INFO] [stdout] test ui::status_bar::tests::right_zone_sync_offline_shows_icon ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 838 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.67s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "5d64f4faf96452e67ab2880a3bafd4deff20fb318477be956eec25b0be0aad60", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5d64f4faf96452e67ab2880a3bafd4deff20fb318477be956eec25b0be0aad60", kill_on_drop: false }` [INFO] [stdout] 5d64f4faf96452e67ab2880a3bafd4deff20fb318477be956eec25b0be0aad60