[INFO] fetching crate cairn-framework 0.1.4...
[INFO] testing cairn-framework-0.1.4 against 1.98.0-beta.1 for beta-1.98-1
[INFO] extracting crate cairn-framework 0.1.4 into /workspace/builds/worker-1-tc2/source
[INFO] started tweaking crates.io crate cairn-framework 0.1.4
[INFO] finished tweaking crates.io crate cairn-framework 0.1.4
[INFO] tweaked toml for crates.io crate cairn-framework 0.1.4 written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate cairn-framework 0.1.4 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 crates.io crate cairn-framework 0.1.4 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-1-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f
[INFO] running `Command { std: "docker" "start" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f", 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" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f" "/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" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f", 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" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling find-msvc-tools v0.1.9
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling tree-sitter-language v0.1.7
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling hashbrown v0.17.0
[INFO] [stderr]    Compiling libc v0.2.185
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling camino v1.2.3
[INFO] [stderr]    Compiling cc v1.2.60
[INFO] [stderr]    Compiling fluent-uri v0.1.4
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling streaming-iterator v0.1.9
[INFO] [stderr]    Compiling log v0.4.32
[INFO] [stderr]    Compiling crossbeam-channel v0.5.15
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling tree-sitter-python v0.25.0
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling tree-sitter-rust v0.24.2
[INFO] [stderr]    Compiling tree-sitter-go v0.25.0
[INFO] [stderr]    Compiling tree-sitter-typescript v0.23.2
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling serde_repr v0.1.20
[INFO] [stderr]    Compiling cairn-macros v0.1.0
[INFO] [stderr]    Compiling tree-sitter v0.26.8
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling lsp-types v0.97.0
[INFO] [stderr]    Compiling lsp-server v0.7.9
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling cairn-framework v0.1.4 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::fmt::Write`
[INFO] [stdout]  --> src/cli/commands/decision.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt::Write as _;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Write`
[INFO] [stdout]  --> src/cli/commands/workspace.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::fmt::Write as _;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Write`
[INFO] [stdout]  --> src/cli/render/bundle.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt::Write as _;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 48.90s
[INFO] running `Command { std: "docker" "inspect" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f", 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" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling ucd-trie v0.1.7
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stderr]    Compiling console v0.16.3
[INFO] [stderr]    Compiling similar v2.7.0
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling pest v2.8.6
[INFO] [stderr]    Compiling lsp-server v0.7.9
[INFO] [stderr]    Compiling lsp-types v0.97.0
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling tree-sitter v0.26.8
[INFO] [stderr]    Compiling pest_meta v2.8.6
[INFO] [stderr]    Compiling pest_generator v2.8.6
[INFO] [stderr]    Compiling pest_derive v2.8.6
[INFO] [stderr]    Compiling insta v1.47.2
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling cairn-framework v0.1.4 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::fmt::Write`
[INFO] [stdout]  --> src/cli/commands/decision.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt::Write as _;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Write`
[INFO] [stdout]  --> src/cli/commands/workspace.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::fmt::Write as _;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Write`
[INFO] [stdout]  --> src/cli/render/bundle.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt::Write as _;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Write`
[INFO] [stdout]  --> src/cli/commands/decision.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt::Write as _;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Write`
[INFO] [stdout]  --> src/cli/commands/workspace.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::fmt::Write as _;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt::Write`
[INFO] [stdout]  --> src/cli/render/bundle.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt::Write as _;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 55.15s
[INFO] running `Command { std: "docker" "inspect" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f", 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" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `std::fmt::Write`
[INFO] [stderr]  --> src/cli/commands/decision.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::fmt::Write as _;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fmt::Write`
[INFO] [stderr]  --> src/cli/commands/workspace.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 9 | use std::fmt::Write as _;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fmt::Write`
[INFO] [stderr]  --> src/cli/render/bundle.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::fmt::Write as _;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `cairn-framework` (lib) generated 3 warnings
[INFO] [stderr] warning: `cairn-framework` (lib test) generated 3 warnings (3 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.17s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/cairn-5f428d808356c3b9)
[INFO] [stdout] 
[INFO] [stdout] running 1069 tests
[INFO] [stdout] test artefacts::registry::parse::tests::test_decision_status_binding_alias_is_accepted ... ok
[INFO] [stdout] test artefacts::registry::parse::tests::test_decision_status_invalid_emits_finding ... ok
[INFO] [stdout] test artefacts::registry::parse::tests::test_review_type_all_variants ... ok
[INFO] [stdout] test artefacts::registry::parse::tests::test_review_type_invalid_emits_finding ... ok
[INFO] [stdout] test artefacts::registry::parse::tests::test_source_verification_invalid_emits_finding ... ok
[INFO] [stdout] test artefacts::registry::parse::tests::test_todo_status_all_variants ... ok
[INFO] [stdout] test artefacts::registry::parse::tests::test_todo_status_invalid_emits_finding ... ok
[INFO] [stdout] test artefacts::registry::sha256::tests::sha256_hex_empty_input_matches_known_vector ... ok
[INFO] [stdout] test artefacts::registry::sha256::tests::sha256_hex_abc_matches_known_vector ... ok
[INFO] [stdout] test artefacts::registry::changes::tests::test_load_changes_loads_active_skips_archive_and_proposalless ... ok
[INFO] [stdout] test artefacts::registry::parse::tests::test_source_verification_all_variants ... ok
[INFO] [stdout] test artefacts::registry::tests::test_parse_claims_absent_when_no_folder_key ... ok
[INFO] [stdout] test artefacts::registry::tests::test_load_artefacts_reports_unknown_node_references ... ok
[INFO] [stdout] test artefacts::registry::tests::test_parse_claims_exhaustive_with_items_returns_some ... ok
[INFO] [stdout] test artefacts::registry::tests::test_parse_claims_illustrative_mode_returns_some ... ok
[INFO] [stdout] test artefacts::registry::parse::tests::test_decision_status_all_variants ... ok
[INFO] [stdout] test artefacts::registry::tests::test_parse_claims_missing_items_defaults_to_empty_not_none ... ok
[INFO] [stdout] test artefacts::registry::tests::test_parse_claims_unknown_mode_returns_none ... ok
[INFO] [stdout] test artefacts::registry::tests::test_parse_status_kinds_reject_unknown_values ... ok
[INFO] [stdout] test artefacts::registry::tests::test_load_artefacts_reports_duplicate_or_invalid_provenance ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_accepted_gap_emits_no_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_claimed_closed_questions_requires_a_close_verb ... ok
[INFO] [stdout] test artefacts::registry::tests::test_load_artefacts_loads_known_records ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_orphaned_flag_with_reason_suppresses_error ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_claim_absent_question_emits_finding ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_supersedes_non_superseded_emits_status_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_supersedes_superseded_no_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_supersedes_unknown_decision_emits_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_unknown_provenance_emits_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_external_source_non_url_emits_error ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_external_source_valid_url_no_error ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_claim_resolved_no_finding ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_indexed_but_missing_source_emits_index_gap_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_only_unknown_nodes_emits_orphaned_error ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_non_gap_decision_emits_no_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_proposed_gap_emits_unresolved_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_question_statuses_parses_status_column ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_research_cited_by_decision_is_not_orphan ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_research_empty_nodes_emits_missing_nodes_error ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_research_no_sources_emits_missing_sources_error ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_research_not_cited_by_decision_emits_info_orphan ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_research_primary_with_no_sources_is_clean ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_research_unknown_node_emits_unknown_node_error ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_research_unknown_source_emits_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_review_unknown_node_emits_error ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_todo_unknown_node_emits_orphan_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_unreferenced_source_emits_orphan_warning ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_unverified_source_emits_info ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_validate_nodes_happy_path_no_findings ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_verified_source_correct_sha256_no_finding ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_verified_source_without_sha256_emits_error ... ok
[INFO] [stdout] test blueprint::lexer::tests::tokenize_arrow_braces_and_colon ... ok
[INFO] [stdout] test blueprint::lexer::tests::tokenize_hyphenated_tag ... ok
[INFO] [stdout] test blueprint::lexer::tests::tokenize_unterminated_string_is_error ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_verified_source_wrong_sha256_emits_mismatch_error ... ok
[INFO] [stdout] test blueprint::lexer::tests::tokenize_words_tag_and_eof ... ok
[INFO] [stdout] test brownfield::discovery::tests::confidence_tiers ... ok
[INFO] [stdout] test brownfield::discovery::tests::ignored_dirs_matched ... ok
[INFO] [stdout] test brownfield::discovery::tests::name_extracts_last_segment ... ok
[INFO] [stdout] test brownfield::discovery::tests::node_id_replaces_separators ... ok
[INFO] [stdout] test brownfield::discovery::tests::share_parent_detects_siblings ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_discover_creates_candidate_for_directory_with_enough_source_files ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_discover_skips_directory_with_too_few_source_files ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_discover_non_source_files_do_not_count_toward_threshold ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_infer_edges_bidirectional_for_siblings ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_infer_edges_no_edge_for_non_siblings ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_infer_edges_single_candidate_no_edges ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_infer_edges_three_siblings_form_complete_graph ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_is_source_file_accepts_known_extensions ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_discover_ignores_target_directory ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_discover_sibling_directories_get_bidirectional_edges ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_is_source_file_rejects_unknown_extensions ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_name_from_path_converts_hyphens_to_spaces ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_name_from_path_single_segment_no_separator ... ok
[INFO] [stdout] test brownfield::heuristics::tests::candidate_new_strips_leading_dot_slash ... ok
[INFO] [stdout] test brownfield::heuristics::tests::candidate_with_id_overrides_path_derived ... ok
[INFO] [stdout] test brownfield::heuristics::tests::classify_boundary_cases ... ok
[INFO] [stdout] test brownfield::heuristics::tests::coupling_score_high_confidence ... ok
[INFO] [stdout] test brownfield::discovery::tests::test_is_source_file_rejects_no_extension ... ok
[INFO] [stdout] test brownfield::heuristics::tests::candidate_new_derives_id_from_directory ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_empty_nodes_emits_missing_nodes_error ... ok
[INFO] [stdout] test brownfield::heuristics::tests::path_derived_id_replaces_separators ... ok
[INFO] [stdout] test brownfield::heuristics::tests::test_path_derived_id_bare_dot_returns_root ... ok
[INFO] [stdout] test brownfield::heuristics::tests::test_path_derived_id_empty_string_returns_root ... ok
[INFO] [stdout] test brownfield::interview::tests::test_abandon_session_removes_file ... ok
[INFO] [stdout] test brownfield::heuristics::tests::coupling_score_low_confidence ... ok
[INFO] [stdout] test brownfield::interview::tests::test_complete_session_writes_genesis ... ok
[INFO] [stdout] test brownfield::heuristics::tests::coupling_score_medium_confidence ... ok
[INFO] [stdout] test brownfield::interview::tests::test_record_answer_advances_cursor ... ok
[INFO] [stdout] test brownfield::onboard::tests::classifies_source_dirs_as_node ... ok
[INFO] [stdout] test brownfield::onboard::tests::groups_by_parent_directory ... ok
[INFO] [stdout] test brownfield::onboard::tests::root_level_files_cluster_under_dot ... ok
[INFO] [stdout] test brownfield::onboard::tests::human_output_shows_both_sections ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_capitalize_already_uppercase_unchanged ... ok
[INFO] [stdout] test brownfield::interview::tests::test_resume_session_reads_existing ... ok
[INFO] [stdout] test brownfield::interview::tests::test_resume_session_returns_none_when_missing ... ok
[INFO] [stdout] test brownfield::onboard::tests::json_output_parses_as_valid_json ... ok
[INFO] [stdout] test brownfield::interview::tests::test_start_session_creates_file ... ok
[INFO] [stdout] test brownfield::interview::tests::test_record_answer_completes_at_end ... ok
[INFO] [stdout] test brownfield::onboard::tests::classifies_generated_dirs_as_ignore ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_analyze_deduplicates_same_path ... ok
[INFO] [stdout] test brownfield::onboard::tests::nested_ignore_pattern_matches_ancestor ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_analyze_filters_out_non_orphan_code_findings ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_capitalize_empty_string ... ok
[INFO] [stdout] test brownfield::onboard::tests::empty_findings_produce_empty_report ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_capitalize_lowercase_first_char ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_classify_case_insensitive_for_ignore_patterns ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_classify_nested_ignore_segment_truncates_to_pattern ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_classify_root_dir_node_id_is_not_bare_dot ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_render_human_empty_report_message ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_parent_dir_single_segment_returns_dot ... ok
[INFO] [stdout] test brownfield::refine::tests::test_delta_empty_extraction_is_empty ... ok
[INFO] [stdout] test brownfield::refine::tests::test_delta_candidate_with_api_segment_is_container ... ok
[INFO] [stdout] test brownfield::refine::tests::test_flatten_nodes_empty_list_returns_empty ... ok
[INFO] [stdout] test brownfield::refine::tests::test_delta_rename_folds_into_removal ... ok
[INFO] [stdout] test brownfield::refine::tests::test_flatten_nodes_multiple_paths_uses_only_first ... ok
[INFO] [stdout] test brownfield::refine::tests::test_flatten_nodes_node_with_path_included ... ok
[INFO] [stdout] test brownfield::refine::tests::test_flatten_nodes_node_without_path_skipped ... ok
[INFO] [stdout] test brownfield::refine::tests::test_delta_candidate_produces_canonical_added_section ... ok
[INFO] [stdout] test brownfield::refine::tests::test_unique_change_id_returns_base_when_no_collision ... ok
[INFO] [stdout] test brownfield::refine::tests::test_unique_change_id_appends_1_when_base_exists ... ok
[INFO] [stdout] test brownfield::refine::tests::test_flatten_nodes_includes_children_recursively ... ok
[INFO] [stdout] test brownfield::refine::tests::test_delta_candidate_with_edge_produces_canonical_edge ... ok
[INFO] [stdout] test brownfield::refine::tests::test_unique_change_id_skips_to_2_when_base_and_1_both_exist ... ok
[INFO] [stdout] test brownfield::refine::tests::test_delta_removal_produces_canonical_section ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_render_human_header_shows_cluster_and_file_counts ... ok
[INFO] [stdout] test artefacts::registry::validate::tests::test_decision_claim_unresolved_emits_finding ... ok
[INFO] [stdout] test brownfield::onboard::tests::test_parent_dir_nested_path ... ok
[INFO] [stdout] test brownfield::suggest::tests::test_suggest_edges_confidence_uses_minimum_of_pair ... ok
[INFO] [stdout] test brownfield::suggest::tests::test_suggest_edges_empty_extraction ... ok
[INFO] [stdout] test brownfield::suggest::tests::test_suggest_edges_multiple_shared_tags_one_entry_per_direction ... ok
[INFO] [stdout] test brownfield::suggest::tests::test_suggest_edges_produces_bidirectional_entries ... ok
[INFO] [stdout] test brownfield::suggest::tests::test_suggest_edges_no_shared_tags_is_empty ... ok
[INFO] [stdout] test brownfield::suggest::tests::test_suggest_edges_provenance_fields_are_set ... ok
[INFO] [stdout] test brownfield::summarise::tests::test_build_map_facts_omits_empty_fields ... ok
[INFO] [stdout] test brownfield::summarise::tests::test_build_request_populates_target_and_draft_type ... ok
[INFO] [stdout] test brownfield::suggest::tests::test_suggest_edges_single_candidate_is_empty ... ok
[INFO] [stdout] test brownfield::templates::tests::test_apply_template_replaces_placeholders ... ok
[INFO] [stdout] test brownfield::templates::tests::test_find_matching_template_by_tag ... ok
[INFO] [stdout] test brownfield::templates::tests::test_find_matching_template_by_path ... ok
[INFO] [stdout] test brownfield::templates::tests::test_render_stub_fallback_when_no_templates ... ok
[INFO] [stdout] test brownfield::templates::tests::test_render_stub_idempotent_when_operation_present ... ok
[INFO] [stdout] test brownfield::templates::tests::test_render_stub_injects_operation_for_template_without_frontmatter ... ok
[INFO] [stdout] test brownfield::tests::test_blueprint_delta_api_path_uses_container_kind ... ok
[INFO] [stdout] test brownfield::summarise::tests::test_enrich_candidate_extracts_metadata_fields ... ok
[INFO] [stdout] test brownfield::summarise::tests::test_enrich_candidate_uses_backend_draft_text ... ok
[INFO] [stdout] test brownfield::summarise::tests::test_enrich_candidate_falls_back_on_backend_error ... ok
[INFO] [stdout] test brownfield::summarise::tests::test_collect_code_samples_skips_non_source_files ... ok
[INFO] [stdout] test brownfield::templates::tests::test_render_stub_injects_operation_into_existing_frontmatter ... ok
[INFO] [stdout] test brownfield::summarise::tests::test_collect_code_samples_bounds_file_count ... ok
[INFO] [stdout] test brownfield::suggest::tests::test_suggest_edges_skips_when_reverse_edge_exists ... ok
[INFO] [stdout] test brownfield::templates::tests::test_render_stub_injects_operation_into_crlf_frontmatter ... ok
[INFO] [stdout] test brownfield::templates::tests::test_no_match_returns_none ... ok
[INFO] [stdout] test brownfield::suggest::tests::test_suggest_edges_skips_existing_edges ... ok
[INFO] [stdout] test brownfield::summarise::tests::test_collect_code_samples_truncates_large_files ... ok
[INFO] [stdout] test brownfield::templates::tests::test_first_matching_template_wins ... ok
[INFO] [stdout] test brownfield::tests::test_blueprint_delta_edge_in_canonical_edges_section ... ok
[INFO] [stdout] test brownfield::tests::test_blueprint_delta_empty_extraction_is_empty ... ok
[INFO] [stdout] test brownfield::tests::test_blueprint_delta_multiword_name_collapses_to_bareword ... ok
[INFO] [stdout] test brownfield::tests::test_node_kind_apigateway_is_module_not_container ... ok
[INFO] [stdout] test brownfield::tests::test_blueprint_delta_single_candidate_no_edges ... ok
[INFO] [stdout] test brownfield::tests::test_node_kind_api_alone_is_container ... ok
[INFO] [stdout] test brownfield::tests::test_node_kind_regular_path_is_module ... ok
[INFO] [stdout] test brownfield::tests::test_stub_contract_body_contains_description ... ok
[INFO] [stdout] test brownfield::tests::test_node_kind_backslash_path_api_is_container ... ok
[INFO] [stdout] test brownfield::tests::test_stub_contract_body_has_h1_name ... ok
[INFO] [stdout] test brownfield::tests::test_stub_contract_frontmatter_contains_node_id ... ok
[INFO] [stdout] test brownfield::tests::test_stub_contract_ends_with_newline ... ok
[INFO] [stdout] test changes::apply::tests::test_apply_archive_empty_delta_preserves_blueprint_verbatim ... ok
[INFO] [stdout] test changes::apply::tests::test_apply_archive_nonempty_delta_preserves_comments ... ok
[INFO] [stdout] test changes::apply::tests::test_apply_blueprint_delta_modify_preserves_siblings ... ok
[INFO] [stdout] test changes::apply::tests::test_apply_blueprint_delta_remove_edge_preserves_section_comment ... ok
[INFO] [stdout] test changes::apply::tests::test_blueprint_delta_is_empty ... ok
[INFO] [stdout] test changes::apply::tests::test_apply_blueprint_delta_two_edges_one_line_falls_back_correctly ... ok
[INFO] [stdout] test changes::apply::tests::test_apply_blueprint_delta_modify_preserves_trivia_at_depth_three ... ok
[INFO] [stdout] test changes::apply::tests::test_mutation_paths_uses_blueprint_path_verbatim_not_root_joined ... ok
[INFO] [stdout] test changes::apply::tests::test_apply_blueprint_delta_two_nodes_one_line_falls_back_correctly ... ok
[INFO] [stdout] test changes::apply::tests::test_node_kind_name_all_variants ... ok
[INFO] [stdout] test changes::apply::tests::test_remove_node_no_match_is_noop ... ok
[INFO] [stdout] test changes::apply::tests::test_remove_node_removes_nested_child ... ok
[INFO] [stdout] test changes::apply::tests::test_remove_node_removes_top_level ... ok
[INFO] [stdout] test changes::apply::tests::test_rename_node_id_no_match_is_noop ... ok
[INFO] [stdout] test changes::apply::tests::test_rename_node_id_renames_nested_child ... ok
[INFO] [stdout] test changes::apply::tests::test_rename_node_id_renames_top_level_node ... ok
[INFO] [stdout] test changes::apply::tests::test_replace_exact_id_exact_match ... ok
[INFO] [stdout] test changes::apply::tests::test_replace_exact_id_no_match ... ok
[INFO] [stdout] test changes::apply::tests::test_replace_exact_id_no_substring_replacement ... ok
[INFO] [stdout] test changes::apply::tests::test_same_edge_different_description_is_not_equal ... ok
[INFO] [stdout] test changes::apply::tests::test_same_edge_different_from_is_not_equal ... ok
[INFO] [stdout] test changes::apply::tests::test_same_edge_equal ... ok
[INFO] [stdout] test changes::apply::tests::test_serialize_field_values_multiple_produces_bracketed_list ... ok
[INFO] [stdout] test changes::apply::tests::test_serialize_node_basic_structure ... ok
[INFO] [stdout] test changes::apply::tests::test_serialize_node_indent_applied_at_nonzero_level ... ok
[INFO] [stdout] test changes::apply::tests::test_serialize_node_owns_files_false_does_not_emit_flag ... ok
[INFO] [stdout] test changes::apply::tests::test_serialize_node_owns_files_true_emits_flag ... ok
[INFO] [stdout] test changes::apply::tests::test_serialize_node_with_path_emits_path_line ... ok
[INFO] [stdout] test changes::apply::tests::test_replace_node_not_found_returns_err ... ok
[INFO] [stdout] test changes::apply::tests::test_replace_node_replaces_nested_child ... ok
[INFO] [stdout] test changes::apply::tests::test_replace_node_replaces_top_level ... ok
[INFO] [stdout] test changes::apply::tests::test_serialize_field_values_empty_produces_brackets ... ok
[INFO] [stdout] test changes::apply::tests::test_serialize_field_values_single_produces_quoted_string ... ok
[INFO] [stdout] test changes::apply::tests::test_strip_frontmatter_always_ends_with_newline ... ok
[INFO] [stdout] test changes::apply::tests::test_strip_frontmatter_no_frontmatter_passes_through ... ok
[INFO] [stdout] test changes::artefact_ops::tests::test_parse_operation_unknown_is_none ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_list_line_empty_bullet_yields_empty ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_list_line_empty_string_yields_empty ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_list_line_strips_bullet_prefix ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_scalar_plain_value_unchanged ... ok
[INFO] [stdout] test changes::apply::tests::test_strip_frontmatter_operation_in_body_not_stripped ... ok
[INFO] [stdout] test changes::apply::tests::test_strip_frontmatter_removes_operation_field ... ok
[INFO] [stdout] test changes::apply::tests::test_strip_frontmatter_removes_renamed_from_field ... ok
[INFO] [stdout] test changes::artefact_ops::tests::test_parse_operation_all_variants ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_scalar_strips_all_quote_styles ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_list_line_no_prefix_kept_as_is ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_list_line_trims_surrounding_whitespace ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_scalar_strips_single_quotes ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_scalar_trims_whitespace ... ok
[INFO] [stdout] test changes::delta::tests::test_delta_sections_captures_section_lines ... ok
[INFO] [stdout] test changes::delta::tests::test_delta_sections_content_before_first_heading_is_ignored ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_scalar_strips_backticks ... ok
[INFO] [stdout] test changes::delta::tests::test_clean_scalar_strips_double_quotes ... ok
[INFO] [stdout] test brownfield::tests::test_node_kind_api_segment_is_container ... ok
[INFO] [stdout] test changes::delta::tests::test_delta_sections_empty_source ... ok
[INFO] [stdout] test changes::delta::tests::test_flatten_nodes_nested_children_included ... ok
[INFO] [stdout] test changes::delta::tests::test_flatten_nodes_no_children ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_delta_added_nodes_section ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_blueprint_delta_multiple_sections_round_trip ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_delta_malformed_rename_is_error ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_edge_renames_rejects_missing_rename_arrow ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_edge_renames_with_multiple_source_edges_fails ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_edge_section_rejects_node_operations ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_edge_renames_with_multiple_target_edges_fails ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_delta_empty_document ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_delta_added_edges_section ... ok
[INFO] [stdout] test changes::delta::tests::test_delta_sections_extracts_named_sections ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_delta_removed_nodes_section ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_delta_renamed_nodes_section ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_id_lines_none_gives_empty ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_delta_multiple_sections ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_delta_node_section_with_edges_is_error ... ok
[INFO] [stdout] test changes::delta::tests::test_flatten_nodes_empty ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_id_lines_plain_ids_without_bullets ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_id_lines_strips_bullets_and_filters_empty ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_rename_lines_happy_path ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_rename_lines_none_gives_empty ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_rename_lines_rejects_missing_arrow ... ok
[INFO] [stdout] test changes::rename::tests::test_frontmatter_references_no_match ... ok
[INFO] [stdout] test changes::rename::tests::test_artefact_content_refs_scalar_match ... ok
[INFO] [stdout] test changes::rename::tests::test_frontmatter_references_list_match ... ok
[INFO] [stdout] test changes::rename::tests::test_insert_operation_trailing_newline ... ok
[INFO] [stdout] test changes::rename::tests::test_insert_operation_without_frontmatter_does_not_insert ... ok
[INFO] [stdout] test changes::rename::tests::test_frontmatter_references_body_mention_not_counted ... ok
[INFO] [stdout] test changes::rename::tests::test_proposal_title_from_plain_h1 ... ok
[INFO] [stdout] test changes::rename::tests::test_insert_operation_with_renamed_from ... ok
[INFO] [stdout] test changes::rename::tests::test_frontmatter_references_scalar_match ... ok
[INFO] [stdout] test changes::rename::tests::test_proposal_title_empty_heading_is_skipped ... ok
[INFO] [stdout] test changes::rename::tests::test_proposal_title_prefers_first_matching_line ... ok
[INFO] [stdout] test changes::rename::tests::test_proposal_title_from_proposal_prefix ... ok
[INFO] [stdout] test changes::rename::tests::test_proposal_title_trims_whitespace ... ok
[INFO] [stdout] test changes::rename::tests::test_proposal_title_no_heading_returns_none ... ok
[INFO] [stdout] test changes::rename::tests::test_update_frontmatter_reference_trailing_newline ... ok
[INFO] [stdout] test changes::tests::test_active_changes_lines_empty_returns_empty_vec ... ok
[INFO] [stdout] test changes::rename::tests::test_update_frontmatter_reference_scalar_value ... ok
[INFO] [stdout] test changes::tests::test_active_changes_lines_format ... ok
[INFO] [stdout] test changes::tests::test_operation_summary_artefact_key_uses_lowercase_debug_variant ... ok
[INFO] [stdout] test changes::tests::test_operation_summary_empty_returns_no_operations ... ok
[INFO] [stdout] test changes::tests::test_operation_summary_multiple_categories_are_sorted_alphabetically ... ok
[INFO] [stdout] test changes::tests::test_operations_for_nodes_added_node_in_set ... ok
[INFO] [stdout] test changes::tests::test_operation_summary_single_category ... ok
[INFO] [stdout] test changes::tests::test_operations_for_nodes_edge_endpoint_in_set ... ok
[INFO] [stdout] test changes::tests::test_operations_for_nodes_removed_node_in_set ... ok
[INFO] [stdout] test changes::tests::test_operations_for_nodes_renamed_edge_is_included ... ok
[INFO] [stdout] test changes::tests::test_operations_for_nodes_renamed_node_matches_from_or_to ... ok
[INFO] [stdout] test changes::tests::test_parse_blueprint_delta_added_round_trip ... ok
[INFO] [stdout] test changes::tests::test_parse_blueprint_delta_modified_round_trip ... ok
[INFO] [stdout] test changes::rename::tests::test_update_frontmatter_reference_body_not_modified ... ok
[INFO] [stdout] test changes::tests::test_parse_blueprint_delta_renamed_round_trip ... ok
[INFO] [stdout] test changes::rename::tests::test_update_frontmatter_reference_list_value ... ok
[INFO] [stdout] test changes::rename::tests::test_update_frontmatter_reference_no_match_is_noop ... ok
[INFO] [stdout] test changes::tests::test_operations_for_nodes_no_match_returns_empty ... ok
[INFO] [stdout] test changes::validate::tests::test_added_edge_with_new_node_succeeds ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_node_section_rejects_edge_operations ... ok
[INFO] [stdout] test changes::tests::test_parse_blueprint_delta_removed_round_trip ... ok
[INFO] [stdout] test changes::validate::tests::test_added_edge_missing_endpoint_errors ... ok
[INFO] [stdout] test changes::validate::tests::test_added_node_already_in_graph ... ok
[INFO] [stdout] test changes::rename::tests::test_insert_operation_adds_after_opening_dashes ... ok
[INFO] [stdout] test changes::tests::test_validate_change_detects_conflicting_operations ... ok
[INFO] [stdout] test changes::validate::tests::test_added_node_duplicate_in_delta ... ok
[INFO] [stdout] test changes::validate::tests::test_artefact_duplicate_target_errors ... ok
[INFO] [stdout] test changes::validate::tests::test_artefact_refs_known_node_succeeds ... ok
[INFO] [stdout] test changes::validate::tests::test_artefact_refs_unknown_node_errors ... ok
[INFO] [stdout] test changes::validate::tests::test_existing_findings_are_propagated ... ok
[INFO] [stdout] test changes::validate::tests::test_modified_node_nonexistent ... ok
[INFO] [stdout] test changes::validate::tests::test_conflicting_operations_on_same_node ... ok
[INFO] [stdout] test changes::validate::tests::test_artefact_refs_nodes_list_unknown_errors ... ok
[INFO] [stdout] test changes::validate::tests::test_artefact_refs_removed_node_still_resolves ... ok
[INFO] [stdout] test changes::validate::tests::test_removed_edge_existing_succeeds ... ok
[INFO] [stdout] test changes::validate::tests::test_removed_edge_nonexistent_errors ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_rename_lines_missing_arrow_is_error ... ok
[INFO] [stdout] test changes::validate::tests::test_removed_node_nonexistent ... ok
[INFO] [stdout] test changes::validate::tests::test_renamed_artefact_missing_renamed_from_errors ... ok
[INFO] [stdout] test changes::validate::tests::test_renamed_node_from_nonexistent ... ok
[INFO] [stdout] test changes::validate::tests::test_renamed_node_to_existing_id ... ok
[INFO] [stdout] test changes::validate::tests::test_valid_change_has_no_errors ... ok
[INFO] [stdout] test cli::accept::tests::test_format_findings_blocked_note_appended ... ok
[INFO] [stdout] test changes::delta::tests::test_parse_rename_lines_backtick_quoted_ids ... ok
[INFO] [stdout] test cli::accept::tests::test_format_findings_detail_in_parentheses ... ok
[INFO] [stdout] test changes::validate::tests::test_renamed_node_to_concurrently_added_id ... ok
[INFO] [stdout] test cli::accept::tests::test_format_findings_no_blocked_note_when_false ... ok
[INFO] [stdout] test cli::accept::tests::test_format_findings_single_passed_step ... ok
[INFO] [stdout] test cli::accept::tests::test_format_json_produces_valid_json ... ok
[INFO] [stdout] test cli::accept::tests::test_truncate_stderr_ascii_truncates_at_exact_limit ... ok
[INFO] [stdout] test cli::accept::tests::test_truncate_stderr_multibyte_chars_do_not_panic ... ok
[INFO] [stdout] test cli::commands::decision::tests::test_decision_stub_frontmatter_is_well_formed ... ok
[INFO] [stdout] test cli::accept::tests::test_state_str_all_variants ... ok
[INFO] [stdout] test cli::commands::decision::tests::test_flag_values_splits_and_repeats ... ok
[INFO] [stdout] test cli::commands::decision::tests::test_decision_stub_omits_empty_optional_fields ... ok
[INFO] [stdout] test cli::commands::decision::tests::test_flag_values_skips_flag_lookalike_value ... ok
[INFO] [stdout] test cli::accept::tests::test_truncate_stderr_exactly_at_limit_not_truncated ... ok
[INFO] [stdout] test cli::commands::gap::tests::first_words_truncates_to_n ... ok
[INFO] [stdout] test cli::commands::decision::tests::test_is_kebab_slug_rejects_malformed ... ok
[INFO] [stdout] test cli::commands::gap::tests::slugify_empty_input_falls_back ... ok
[INFO] [stdout] test cli::accept::tests::test_format_json_failed_wins_over_blocked ... ok
[INFO] [stdout] test cli::accept::tests::test_format_json_blocked_status ... ok
[INFO] [stdout] test cli::accept::tests::test_format_json_passed_status ... ok
[INFO] [stdout] test cli::accept::tests::test_truncate_stderr_short_string_returned_unchanged ... ok
[INFO] [stdout] test cli::commands::gap::tests::slugify_lowercases_and_hyphenates ... ok
[INFO] [stdout] test cli::commands::import::tests::copy_dir_all_copies_empty_directory ... ok
[INFO] [stdout] test cli::commands::hook::tests::test_parse_hook_kind_all_valid_strings ... ok
[INFO] [stdout] test cli::commands::hook::tests::test_parse_hook_kind_unknown_returns_none ... ok
[INFO] [stdout] test cli::commands::gap::tests::run_gap_command_unknown_node_returns_finding_error ... ok
[INFO] [stdout] test cli::commands::import::tests::copy_dir_all_overwrites_existing_file_in_target ... ok
[INFO] [stdout] test cli::commands::gap::tests::run_gap_command_refuses_empty_question ... ok
[INFO] [stdout] test cli::commands::import::tests::copy_dir_all_creates_target_and_copies_files ... ok
[INFO] [stdout] test cli::commands::tests::test_requires_valid_map_all_listed_commands_return_true ... ok
[INFO] [stdout] test cli::commands::tests::test_requires_valid_map_neighbourhood_is_missing ... ok
[INFO] [stdout] test cli::commands::tests::test_requires_valid_map_non_query_commands_return_false ... ok
[INFO] [stdout] test cli::commands::tests::test_shared_exit_code_lint_with_error_severity_returns_one ... ok
[INFO] [stdout] test cli::commands::tests::test_legacy_blueprint_warning_blueprint_only_no_warning ... ok
[INFO] [stdout] test cli::commands::tests::test_legacy_blueprint_warning_both_files_warns ... ok
[INFO] [stdout] test cli::commands::decision::tests::test_run_decision_new_rejects_bad_slug ... ok
[INFO] [stdout] test cli::commands::tests::test_shared_exit_code_lint_with_warnings_only_returns_zero ... ok
[INFO] [stdout] test cli::commands::tests::test_shared_exit_code_non_lint_always_zero ... ok
[INFO] [stdout] test cli::commands::tests::test_shared_exit_code_uppercase_error_severity_not_counted ... ok
[INFO] [stdout] test cli::commands::tests::test_shared_flags_known_flag_sets_correct_flag ... ok
[INFO] [stdout] test cli::commands::tests::test_shared_flags_unknown_arg_produces_empty_set ... ok
[INFO] [stdout] test cli::commands::todo::tests::test_run_todo_new_rejects_bad_slug ... ok
[INFO] [stdout] test cli::commands::todo::tests::test_run_todo_new_requires_exactly_one_node ... ok
[INFO] [stdout] test cli::commands::tests::test_shared_flags_multiple_flags_all_set ... ok
[INFO] [stdout] test cli::commands::todo::tests::test_todo_stub_frontmatter_is_well_formed ... ok
[INFO] [stdout] test cli::commands::project::tests::test_reinit_on_existing_project_does_not_claim_fresh_scaffold ... ok
[INFO] [stdout] test cli::commands::workspace::tests::run_workspace_command_missing_workspace_file_reports_error ... ok
[INFO] [stdout] test cli::commands::workspace::tests::run_workspace_command_no_subcommand_is_usage_error ... ok
[INFO] [stdout] test cli::commands::workspace::tests::run_workspace_command_status_json_reports_missing_member ... ok
[INFO] [stdout] test cli::export::builder::tests::build_export_propagates_scanner_errors_with_ck001 ... ok
[INFO] [stdout] test cli::commands::decision::tests::test_run_decision_new_writes_file_and_refuses_overwrite ... ok
[INFO] [stdout] test cli::export::builder::tests::unix_epoch_formats_to_zero_date ... ok
[INFO] [stdout] test cli::export::json::tests::json_escape_handles_low_control_chars ... ok
[INFO] [stdout] test cli::export::json::tests::json_escape_handles_specials ... ok
[INFO] [stdout] test cli::export::markdown::tests::strip_em_dashes_passes_through_no_em ... ok
[INFO] [stdout] test cli::export::markdown::tests::strip_em_dashes_replaces_with_comma_space ... ok
[INFO] [stdout] test cli::commands::workspace::tests::run_workspace_command_status_single_member_root_dot ... ok
[INFO] [stdout] test cli::export::mermaid::tests::empty_envelope_produces_valid_header ... ok
[INFO] [stdout] test cli::commands::project::tests::test_reinit_backfills_only_missing_scaffolding ... ok
[INFO] [stdout] test cli::export::mermaid::tests::mermaid_id_sanitizes_dots_and_hyphens ... ok
[INFO] [stdout] test cli::export::runner::tests::parse_export_args_accepts_md_format ... ok
[INFO] [stdout] test cli::export::runner::tests::parse_export_args_rejects_invalid_format ... ok
[INFO] [stdout] test cli::export::runner::tests::parse_export_args_requires_output ... ok
[INFO] [stdout] test cli::export::tests::json_first_key_is_schema_version ... ok
[INFO] [stdout] test cli::export::tests::markdown_has_no_em_dashes ... ok
[INFO] [stdout] test cli::commands::project::tests::test_init_starter_blueprint_wires_todos_pointer ... ok
[INFO] [stdout] test cli::commands::project::tests::test_init_project_emits_cairn_skills_and_loop_guide ... ok
[INFO] [stdout] test cli::commands::todo::tests::test_run_todo_new_writes_file_and_refuses_overwrite ... ok
[INFO] [stdout] test cli::export::tests::markdown_has_required_sections_in_order ... ok
[INFO] [stdout] test cli::export::builder::tests::format_timestamp_for_known_value ... ok
[INFO] [stdout] test cli::format::json::tests::test_decisions_json_serializes_populated_revisited ... ok
[INFO] [stdout] test cli::format::json::tests::test_decisions_json_serializes_status_and_node_refs ... ok
[INFO] [stdout] test cli::format::json::tests::test_finding_json_escapes_message_and_code ... ok
[INFO] [stdout] test cli::format::json::tests::test_research_json_serializes_nodes_and_sources ... ok
[INFO] [stdout] test cli::format::json::tests::test_sources_json_serializes_verification_and_type ... ok
[INFO] [stdout] test cli::format::json::tests::test_node_json_includes_id_children_and_files ... ok
[INFO] [stdout] test cli::format::json::tests::test_string_array_json_empty ... ok
[INFO] [stdout] test cli::format::json::tests::test_string_array_json_multiple ... ok
[INFO] [stdout] test cli::format::json::tests::test_string_array_json_single ... ok
[INFO] [stdout] test cli::format::json::tests::test_todos_json_empty_list ... ok
[INFO] [stdout] test cli::format::json::tests::test_string_array_json_value_with_quote_is_escaped ... ok
[INFO] [stdout] test cli::format::render::tests::test_decision_line_format ... ok
[INFO] [stdout] test cli::format::json::tests::test_todos_json_includes_status_and_satisfies ... ok
[INFO] [stdout] test cli::format::render::tests::test_render_findings_empty_json ... ok
[INFO] [stdout] test cli::format::render::tests::test_decision_status_roundtrip ... ok
[INFO] [stdout] test cli::format::render::tests::test_render_findings_non_empty_human ... ok
[INFO] [stdout] test cli::format::render::tests::test_render_findings_non_empty_json ... ok
[INFO] [stdout] test cli::format::render::tests::test_render_node_human_format ... ok
[INFO] [stdout] test cli::format::render::tests::test_research_line_format ... ok
[INFO] [stdout] test cli::format::render::tests::test_review_line_format ... ok
[INFO] [stdout] test cli::format::render::tests::test_render_node_json_format ... ok
[INFO] [stdout] test cli::format::render::tests::test_review_type_display_strings ... ok
[INFO] [stdout] test cli::format::render::tests::test_source_line_format ... ok
[INFO] [stdout] test cli::format::render::tests::test_source_verification_display_strings ... ok
[INFO] [stdout] test cli::format::render::tests::test_todo_line_format ... ok
[INFO] [stdout] test cli::format::render::tests::test_todo_status_roundtrip ... ok
[INFO] [stdout] test cli::format::util::tests::test_decision_status_roundtrip ... ok
[INFO] [stdout] test cli::format::util::tests::test_err_result_has_given_exit_code_and_stderr_message ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_all_specials_in_one_value ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_backslash_is_escaped_first_so_replacements_do_not_double_escape ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_backslash ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_carriage_return ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_backspace ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_empty_string ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_form_feed ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_newline ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_no_special_chars ... ok
[INFO] [stdout] test cli::format::util::tests::test_flag_value_empty_args_returns_none ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_tab ... ok
[INFO] [stdout] test cli::format::util::tests::test_flag_value_flag_at_last_position_returns_none_not_panic ... ok
[INFO] [stdout] test changes::delta::tests::test_delta_sections_empty_section_present_as_empty_string ... ok
[INFO] [stdout] test cli::format::util::tests::test_flag_value_found ... ok
[INFO] [stdout] test cli::format::util::tests::test_flag_value_not_present_returns_none ... ok
[INFO] [stdout] test brownfield::tests::test_node_kind_service_segment_is_container ... ok
[INFO] [stdout] test cli::format::json::tests::test_reviews_json_serializes_review_type_and_node ... ok
[INFO] [stdout] test cli::format::util::tests::test_lines_empty_returns_none ... ok
[INFO] [stdout] test cli::format::util::tests::test_flag_value_returns_first_occurrence_when_repeated ... ok
[INFO] [stdout] test cli::commands::workspace::tests::run_workspace_command_frontier_qualifies_nodes ... ok
[INFO] [stdout] test cli::format::util::tests::test_lines_single_value ... ok
[INFO] [stdout] test cli::format::util::tests::test_node_arg_empty_slice_returns_error ... ok
[INFO] [stdout] test cli::format::util::tests::test_node_arg_missing_returns_cli_missing_node_finding ... ok
[INFO] [stdout] test cli::format::util::tests::test_node_arg_returns_second_element ... ok
[INFO] [stdout] test cli::format::util::tests::test_ok_result_has_exit_code_zero_and_stdout_message ... ok
[INFO] [stdout] test cli::format::util::tests::test_parse_decision_status_filter_all_variants ... ok
[INFO] [stdout] test cli::format::util::tests::test_parse_decision_status_filter_unknown_returns_none ... ok
[INFO] [stdout] test cli::format::util::tests::test_todo_status_roundtrip ... ok
[INFO] [stdout] test cli::format::util::tests::test_parse_todo_status_filter_unknown_returns_none ... ok
[INFO] [stdout] test cli::render::artefacts::tests::render_decisions_grep_json_mode ... ok
[INFO] [stdout] test cli::format::util::tests::test_parse_todo_status_filter_all_variants ... ok
[INFO] [stdout] test cli::render::artefacts::tests::render_decisions_grep_matches_body_keyword ... ok
[INFO] [stdout] test cli::render::artefacts::tests::render_todos_filters_by_status ... ok
[INFO] [stdout] test cli::format::util::tests::test_esc_double_quote ... ok
[INFO] [stdout] test cli::render::artefacts::tests::render_decisions_grep_respects_status_filter ... ok
[INFO] [stdout] test cli::render::artefacts::tests::render_todos_human_lists_matching_todos ... ok
[INFO] [stdout] test cli::render::artefacts::tests::render_todos_json_mode ... ok
[INFO] [stdout] test cli::render::artefacts::tests::render_decisions_grep_searches_without_node_arg ... ok
[INFO] [stdout] test cli::render::artefacts::tests::render_todos_unknown_node_returns_err ... ok
[INFO] [stdout] test cli::render::changes_view::tests::test_render_show_missing_id_errors ... ok
[INFO] [stdout] test cli::render::changes_view::tests::test_render_show_unknown_change_errors ... ok
[INFO] [stdout] test cli::render::changes_view::tests::test_render_changes_lists_active_change ... ok
[INFO] [stdout] test cli::render::changes_view::tests::test_render_changes_reports_discover_error ... ok
[INFO] [stdout] test cli::render::changes_view::tests::test_render_show_reports_discover_error ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_escape_label_neutralises_quote_and_pipe ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_full_depth_shows_leaves_and_real_edges ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_default_depth_collapses_container_children_with_drilldown ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_intra_container_edge_is_dropped_at_rollup ... ok
[INFO] [stdout] test cli::render::changes_view::tests::test_render_show_renders_proposal_and_design ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_leaf_edge_rolls_up_to_container_edge_with_label ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_mermaid_emits_fenced_rolled_graph ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_mermaid_scope_renders_subtree_nodes ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_mermaid_scope_unknown_node_emits_valid_placeholder ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_parse_mermaid_flag ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_parse_scope_value ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_scope_renders_only_subtree_at_full_detail ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_scope_unknown_node_reports_no_match ... ok
[INFO] [stdout] test cli::render::context_view::tests::test_parse_depth_all_and_default ... ok
[INFO] [stdout] test cli::render::health::tests::format_health_human_clean ... ok
[INFO] [stdout] test cli::render::health::tests::format_health_human_defaults_missing_summary ... ok
[INFO] [stdout] test cli::render::health::tests::format_health_human_includes_scan_counts ... ok
[INFO] [stdout] test cli::render::health::tests::format_health_human_omits_zero_scan_counts ... ok
[INFO] [stdout] test cli::render::health::tests::format_health_human_unclean ... ok
[INFO] [stdout] test cli::render::node::tests::render_files_human_includes_target_claimed_files ... ok
[INFO] [stdout] test cli::render::node::tests::render_files_human_lists_node_files_when_no_target_report ... ok
[INFO] [stdout] test changes::validate::tests::test_artefact_refs_added_node_in_same_change_succeeds ... ok
[INFO] [stdout] test cli::export::mermaid::tests::edge_produces_arrow_line_with_sanitized_ids ... ok
[INFO] [stdout] test cli::format::util::tests::test_lines_multiple_values_joined_by_newline ... ok
[INFO] [stdout] test cli::render::changes_view::tests::test_render_changes_empty_uses_copy_lookup ... ok
[INFO] [stdout] test cli::render::project::tests::render_context_defaults_when_no_system ... ok
[INFO] [stdout] test cli::render::node::tests::render_files_json_includes_files_and_targets ... ok
[INFO] [stdout] test cli::render::node::tests::render_files_multi_target_uses_targets_wrapper ... ok
[INFO] [stdout] test cli::render::project::tests::render_context_node_line_omits_path_and_synced_state ... ok
[INFO] [stdout] test cli::render::project::tests::render_context_shows_system_name_and_counts ... ok
[INFO] [stdout] test cli::render::project::tests::render_status_human_empty_todos_renders_none ... ok
[INFO] [stdout] test cli::render::project::tests::render_status_human_lists_open_and_in_progress_todos ... ok
[INFO] [stdout] test cli::render::project::tests::render_status_json_includes_next_recommended_for_native_todo ... ok
[INFO] [stdout] test cli::render::project::tests::render_status_human_prefers_native_todo_in_next_recommended ... ok
[INFO] [stdout] test cli::render::project::tests::render_backlog_unknown_node_errs ... ok
[INFO] [stdout] test cli::render::project::tests::render_context_lists_labeled_dependencies ... ok
[INFO] [stdout] test cli::render::project::tests::render_context_includes_backlog_section ... ok
[INFO] [stdout] test cli::render::project::tests::render_backlog_json_emits_beads_array ... ok
[INFO] [stdout] test cli::render::project::tests::render_backlog_lists_node_linked_beads ... ok
[INFO] [stdout] test cli::render::project::tests::render_status_json_next_recommended_null_when_clean ... ok
[INFO] [stdout] test cli::render::project::tests::render_status_json_omits_done_todos ... ok
[INFO] [stdout] test cli::render::remediate::tests::format_remediate_human_empty_actions ... ok
[INFO] [stdout] test cli::render::remediate::tests::format_remediate_human_lists_actions ... ok
[INFO] [stdout] test changes::delta::tests::test_uncomment_lines_filters_blank_lines ... ok
[INFO] [stdout] test cli::render::remediate::tests::format_remediate_human_omits_optional_fields ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_excludes_non_accepted_decision ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_json_includes_gates_and_staleness ... ok
[INFO] [stdout] test cli::render::project::tests::render_backlog_empty_node_uses_copy ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_missing_id_reports_not_found ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_named_blocked_bead_flags_not_ready ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_native_todo_unlinked_node_shows_hint ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_no_arg_all_blocked_says_none_ready ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_named_bead_includes_gates ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_no_arg_empty_backlog_says_clean ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_named_closed_bead_flags_not_ready ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_prefers_open_native_todo_over_beads ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_surfaces_linked_decision_and_contract ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_decision_summary_truncates_long_line ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_open_native_todos_filters_and_sorts ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_render_next_clean_falls_back_to_beads_without_todos ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_no_arg_picks_top_ready ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_decision_summary_strips_heading_marker ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_brief_unlinked_bead_shows_hint ... ok
[INFO] [stdout] test cli::render::remediate::tests::test_render_next_clean_prefers_native_todo_over_beads ... ok
[INFO] [stdout] test changes::rename::tests::test_artefact_content_refs_list_match ... ok
[INFO] [stdout] test changes::rename::tests::test_artefact_content_refs_no_match ... ok
[INFO] [stdout] test cli::export::tests::schema_version_is_one ... ok
[INFO] [stdout] test cli::render::project::tests::render_status_json_includes_open_todos ... ok
[INFO] [stdout] test cli::tests::test_cli_change_commands_and_error_paths ... ok
[INFO] [stdout] test cli::render::changes_view::tests::test_render_show_renders_findings ... ok
[INFO] [stdout] test cli::commands::todo::tests::test_run_todo_new_creates_meta_dir_on_fresh_project ... ok
[INFO] [stdout] test cli::tests::test_edit_distance ... ok
[INFO] [stdout] test cli::tests::test_help_documents_exit_codes ... ok
[INFO] [stdout] test cli::tests::test_cli_ui_command_surfaces_option_errors ... ok
[INFO] [stdout] test cli::tests::test_help_flag_returns_code_zero_with_command_names ... ok
[INFO] [stdout] test cli::tests::test_help_flag_with_other_args ... ok
[INFO] [stdout] test cli::tests::test_no_args_shows_help ... ok
[INFO] [stdout] test cli::tests::test_help_documents_strict_flag ... ok
[INFO] [stdout] test cli::commands::gap::tests::run_gap_command_writes_exact_frontmatter_and_suffixes_on_collision ... ok
[INFO] [stdout] test cli::tests::test_check_json_output_is_valid_json ... ok
[INFO] [stdout] test cli::tests::test_unknown_command_suggests_close_match ... ok
[INFO] [stdout] test copy::tests::test_lookup_cli_no_blueprint ... ok
[INFO] [stdout] test copy::tests::test_lookup_empty_states ... ok
[INFO] [stdout] test copy::tests::test_lookup_existing_key ... ok
[INFO] [stdout] test copy::tests::test_lookup_finding_code_table ... ok
[INFO] [stdout] test copy::tests::test_lookup_missing_key_fallback ... ok
[INFO] [stdout] test copy::tests::test_lookup_nested_key ... ok
[INFO] [stdout] test error::tests::test_blocked_verification_code_is_cc001 ... ok
[INFO] [stdout] test error::tests::test_lsp_error_code_is_cl001 ... ok
[INFO] [stdout] test error::tests::test_untriaged_suggested_edges_code_is_cc002 ... ok
[INFO] [stdout] test cli::tests::test_cli_summarise_disabled_by_default ... ok
[INFO] [stdout] test hooks::architecture::tests::test_gate_fires_on_module_add_without_decision ... ok
[INFO] [stdout] test hooks::architecture::tests::test_gate_fires_on_module_remove_without_decision ... ok
[INFO] [stdout] test hooks::architecture::tests::test_gate_fires_on_reassign_across_containers ... ok
[INFO] [stdout] test hooks::architecture::tests::test_gate_ignores_path_rename_within_container ... ok
[INFO] [stdout] test hooks::architecture::tests::test_gate_ignores_reorder_and_casing ... ok
[INFO] [stdout] test hooks::architecture::tests::test_gate_passes_on_module_add_with_decision ... ok
[INFO] [stdout] test hooks::architecture::tests::test_gate_passes_with_escape_hatch ... ok
[INFO] [stdout] test hooks::render::tests::test_decision_name_block_is_lowercase_block ... ok
[INFO] [stdout] test hooks::render::tests::test_decision_name_pass_is_lowercase_pass ... ok
[INFO] [stdout] test hooks::render::tests::test_esc_backslash_escaped_first ... ok
[INFO] [stdout] test hooks::render::tests::test_esc_double_quote ... ok
[INFO] [stdout] test hooks::render::tests::test_esc_newline ... ok
[INFO] [stdout] test hooks::render::tests::test_hook_name_all_variants ... ok
[INFO] [stdout] test hooks::render::tests::test_optional_json_none_produces_null ... ok
[INFO] [stdout] test hooks::render::tests::test_optional_json_some_produces_quoted_string ... ok
[INFO] [stdout] test hooks::render::tests::test_optional_json_some_with_quote_is_escaped ... ok
[INFO] [stdout] test hooks::render::tests::test_render_human_no_findings_shows_none ... ok
[INFO] [stdout] test hooks::render::tests::test_render_human_with_findings_lists_them ... ok
[INFO] [stdout] test hooks::render::tests::test_render_json_block_exit_code_is_one ... ok
[INFO] [stdout] test hooks::render::tests::test_render_json_finding_node_null_when_absent ... ok
[INFO] [stdout] test hooks::render::tests::test_render_json_finding_node_present_when_set ... ok
[INFO] [stdout] test hooks::render::tests::test_render_json_output_paths_serialized ... ok
[INFO] [stdout] test hooks::render::tests::test_render_json_structure ... ok
[INFO] [stdout] test hooks::tests::test_clean_id_plain_id_unchanged ... ok
[INFO] [stdout] test hooks::tests::test_clean_id_strips_backticks ... ok
[INFO] [stdout] test hooks::tests::test_clean_id_strips_double_quotes ... ok
[INFO] [stdout] test hooks::tests::test_clean_id_strips_trailing_comma ... ok
[INFO] [stdout] test hooks::tests::test_clean_id_trims_whitespace ... ok
[INFO] [stdout] test cli::tests::test_cli_archive_json_envelope ... ok
[INFO] [stdout] test hooks::tests::test_field_value_absent_field_returns_none ... ok
[INFO] [stdout] test hooks::tests::test_ids_from_text_empty_id_field_not_included ... ok
[INFO] [stdout] test hooks::tests::test_ids_from_text_extracts_dotted_id_from_bullet ... ok
[INFO] [stdout] test hooks::tests::test_field_value_extracts_quoted_value ... ok
[INFO] [stdout] test hooks::tests::test_ids_from_text_extracts_id_field ... ok
[INFO] [stdout] test hooks::tests::test_ids_from_text_no_dotted_id_returns_empty ... ok
[INFO] [stdout] test cli::tests::test_check_json_with_target_node ... ok
[INFO] [stdout] test hooks::tests::test_is_id_char_accepts_valid_chars ... ok
[INFO] [stdout] test cli::tests::test_cli_import_openspec_migrates_phases ... ok
[INFO] [stdout] test hooks::tests::test_parse_edge_no_arrow_returns_none ... ok
[INFO] [stdout] test hooks::tests::test_parse_edge_with_spaces ... ok
[INFO] [stdout] test hooks::tests::test_parse_edge_with_description_ignores_description ... ok
[INFO] [stdout] test hooks::tests::test_parse_edge_without_spaces ... ok
[INFO] [stdout] test hooks::tests::test_structural_findings_keeps_only_errors ... ok
[INFO] [stdout] test hooks::tests::test_is_id_char_rejects_invalid_chars ... ok
[INFO] [stdout] test hooks::tests::test_tension_findings_keeps_warning_and_info_not_error ... ok
[INFO] [stdout] test lsp::diagnostics::tests::test_findings_by_uri_groups_by_path ... ok
[INFO] [stdout] test lsp::diagnostics::tests::test_severity_info_maps_to_information ... ok
[INFO] [stdout] test lsp::diagnostics::tests::test_path_to_uri_uses_file_scheme ... ok
[INFO] [stdout] test lsp::server::tests::test_resolve_root_prefers_opts_override ... ok
[INFO] [stdout] test lsp::server::tests::test_server_capabilities_declares_full_sync ... ok
[INFO] [stdout] test lsp::server::tests::test_uri_to_path_decodes_percent_encoding ... ok
[INFO] [stdout] test lsp::server::tests::test_run_performs_initialize_handshake ... ok
[INFO] [stdout] test lsp::server::tests::test_uri_to_path_strips_windows_drive_letter_slash ... ok
[INFO] [stdout] test lsp::tests::test_from_args_interval_sets_interval ... ok
[INFO] [stdout] test lsp::tests::test_from_args_interval_too_small_returns_err ... ok
[INFO] [stdout] test lsp::tests::test_from_args_root_sets_root ... ok
[INFO] [stdout] test lsp::tests::test_lsp_opts_default_uses_five_second_interval ... ok
[INFO] [stdout] test lsp::diagnostics::tests::test_severity_error_maps_to_error ... ok
[INFO] [stdout] test lsp::tests::test_from_args_unknown_flag_returns_err ... ok
[INFO] [stdout] test map::build::tests::test_build_child_node_has_parent_set ... ok
[INFO] [stdout] test map::build::tests::test_build_duplicate_node_id_emits_integrity_error ... ok
[INFO] [stdout] test map::build::tests::test_build_edge_with_missing_from_emits_invalid_endpoint ... ok
[INFO] [stdout] test map::build::tests::test_build_edge_with_missing_to_emits_invalid_endpoint ... ok
[INFO] [stdout] test map::build::tests::test_build_external_findings_are_preserved ... ok
[INFO] [stdout] test map::build::tests::test_build_name_index_populated ... ok
[INFO] [stdout] test map::build::tests::test_build_node_fields_propagated_correctly ... ok
[INFO] [stdout] test map::build::tests::test_build_node_with_nonexistent_path_is_ghost ... ok
[INFO] [stdout] test map::build::tests::test_build_node_with_no_paths_is_synced ... ok
[INFO] [stdout] test lsp::diagnostics::tests::test_finding_to_diagnostic_maps_severity_and_code ... ok
[INFO] [stdout] test map::build::tests::test_build_parent_children_field_lists_child_ids ... ok
[INFO] [stdout] test map::build::tests::test_build_single_node_appears_in_graph ... ok
[INFO] [stdout] test map::build::tests::test_build_underscore_in_id_emits_invalid_id ... ok
[INFO] [stdout] test map::build::tests::test_build_path_tie_emits_integrity_error ... ok
[INFO] [stdout] test map::build::tests::test_build_uppercase_id_emits_invalid_id ... ok
[INFO] [stdout] test map::build::tests::test_build_valid_edge_populates_outbound_and_inbound ... ok
[INFO] [stdout] test map::build::tests::test_build_valid_id_produces_no_integrity_finding ... ok
[INFO] [stdout] test map::contract_coverage::tests::covered_leaf_no_warning ... ok
[INFO] [stdout] test map::contract_coverage::tests::parent_node_exempt ... ok
[INFO] [stdout] test map::contract_coverage::tests::ghost_leaf_exempt ... ok
[INFO] [stdout] test map::contract_coverage::tests::tagged_node_exempt ... ok
[INFO] [stdout] test map::graph::tests::test_finding_display_format ... ok
[INFO] [stdout] test map::graph::tests::test_has_errors_empty_findings_returns_false ... ok
[INFO] [stdout] test map::graph::tests::test_has_errors_warning_only_returns_false ... ok
[INFO] [stdout] test map::graph::tests::test_has_errors_error_finding_returns_true ... ok
[INFO] [stdout] test map::graph::tests::test_resolve_ambiguous_name_falls_through_to_error ... ok
[INFO] [stdout] test map::graph::tests::test_resolve_exact_id_returns_node ... ok
[INFO] [stdout] test map::contract_coverage::tests::uncovered_synced_leaf_emits_warning ... ok
[INFO] [stdout] test map::graph::tests::test_resolve_by_unique_name_returns_node ... ok
[INFO] [stdout] test map::graph::tests::test_resolve_unknown_id_error_is_error_severity ... ok
[INFO] [stdout] test map::graph::tests::test_resolve_unknown_id_returns_not_found_finding ... ok
[INFO] [stdout] test map::contract_coverage::tests::fileless_leaf_exempt ... ok
[INFO] [stdout] test map::graph::tests::test_resolve_unknown_with_no_partial_match_has_no_suggestion ... ok
[INFO] [stdout] test map::graph::tests::test_resolve_unknown_with_partial_match_includes_suggestion ... ok
[INFO] [stdout] test map::graph::tests::test_severity_name_error ... ok
[INFO] [stdout] test cli::tests::test_unknown_command_lists_available_when_distant ... ok
[INFO] [stdout] test cli::tests::test_cli_drafts_and_draft_show_json ... ok
[INFO] [stdout] test map::graph::tests::test_severity_name_info ... ok
[INFO] [stdout] test map::integrity::tests::test_cycle_findings_empty_graph_returns_no_findings ... ok
[INFO] [stdout] test map::integrity::tests::test_cycle_findings_message_includes_path ... ok
[INFO] [stdout] test map::integrity::tests::test_cycle_findings_node_field_is_set ... ok
[INFO] [stdout] test map::integrity::tests::test_cycle_findings_three_node_cycle_returns_cairn_order_cycle ... ok
[INFO] [stdout] test map::integrity::tests::test_cycle_findings_two_node_cycle_returns_cairn_order_cycle ... ok
[INFO] [stdout] test map::integrity::tests::test_topological_order_all_nodes_present_in_output ... ok
[INFO] [stdout] test map::integrity::tests::test_topological_order_cycle_returns_err_with_findings ... ok
[INFO] [stdout] test map::integrity::tests::test_topological_order_empty_graph_returns_empty_vec ... ok
[INFO] [stdout] test map::integrity::tests::test_topological_order_isolated_nodes_all_present ... ok
[INFO] [stdout] test map::integrity::tests::test_topological_order_linear_chain_build_order ... ok
[INFO] [stdout] test map::integrity::tests::test_topological_order_self_loop_returns_err ... ok
[INFO] [stdout] test map::query::tests::frontier_all_synced_graph_returns_empty_both ... ok
[INFO] [stdout] test map::query::tests::frontier_cyclic_graph_propagates_structural_error_like_order ... ok
[INFO] [stdout] test map::graph::tests::test_severity_name_warning ... ok
[INFO] [stdout] test map::query::tests::frontier_ghost_with_unsynced_dep_is_blocked_naming_dependency ... ok
[INFO] [stdout] test map::integrity::tests::test_cycle_findings_detects_self_loop ... ok
[INFO] [stdout] test map::integrity::tests::test_cycle_findings_acyclic_diamond_returns_no_findings ... ok
[INFO] [stdout] test map::integrity::tests::test_cycle_findings_acyclic_linear_chain_returns_no_findings ... ok
[INFO] [stdout] test map::query::tests::islands_split_two_dependency_components ... ok
[INFO] [stdout] test map::query::tests::islands_two_ownership_trees_stay_separate ... ok
[INFO] [stdout] test map::query::tests::neighbourhood_with_options_diverges_against_default ... ok
[INFO] [stdout] test map::query::tests::test_dependents_direct_returns_immediate_callers_only ... ok
[INFO] [stdout] test map::query::tests::test_dependents_leaf_node_has_no_dependents ... ok
[INFO] [stdout] test cli::tests::test_unknown_command_preserves_existing_behaviour ... ok
[INFO] [stdout] test map::query::tests::test_dependents_transitive_chain ... ok
[INFO] [stdout] test map::query::tests::test_depends_direct_returns_immediate_neighbours_only ... ok
[INFO] [stdout] test map::query::tests::test_depends_no_outbound_edges_returns_empty ... ok
[INFO] [stdout] test map::query::tests::frontier_ghost_with_synced_deps_is_ready_and_tiered ... ok
[INFO] [stdout] test map::query::tests::test_dependents_transitive_cyclic_graph_terminates_and_excludes_start ... ok
[INFO] [stdout] test map::query::tests::test_depends_transitive_self_loop_excluded_from_result ... ok
[INFO] [stdout] test map::query::tests::test_depends_transitive_diamond_deduplicates ... ok
[INFO] [stdout] test map::query::tests::test_depends_unknown_node_returns_error ... ok
[INFO] [stdout] test map::query::tests::test_get_returns_node_for_known_id ... ok
[INFO] [stdout] test map::query::tests::test_files_returns_empty_list_for_node_with_no_claims ... ok
[INFO] [stdout] test map::query::tests::test_get_unknown_id_returns_query_finding ... ok
[INFO] [stdout] test map::query::tests::test_graph_query_includes_dependency_edges ... ok
[INFO] [stdout] test map::query::tests::test_graph_query_edges_sorted_deterministically ... ok
[INFO] [stdout] test map::query::tests::test_lint_includes_existing_graph_findings ... ok
[INFO] [stdout] test map::query::tests::test_neighbourhood_includes_outbound_and_inbound ... ok
[INFO] [stdout] test map::query::tests::test_lint_detects_cycles_via_cycle_findings ... ok
[INFO] [stdout] test map::query::tests::test_order_cycle_returns_error ... ok
[INFO] [stdout] test map::query::tests::test_neighbourhood_node_id_returned_on_response ... ok
[INFO] [stdout] test map::query::tests::test_neighbourhood_isolated_node_has_empty_edge_lists ... ok
[INFO] [stdout] test map::query::tests::test_depends_transitive_chain ... ok
[INFO] [stdout] test map::query::tests::test_depends_transitive_cyclic_graph_terminates_and_excludes_start ... ok
[INFO] [stdout] test map::query::tests::test_order_linear_chain_returns_topological_order ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::cfg_test_in_string_literal_does_not_truncate_production ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::code_in_separate_tests_file_is_excluded ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::code_only_in_match_arm_is_not_emission ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::commented_out_emission_is_not_emission ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::declared_rule_exempt ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::enforced_rule_missing_code_warns ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::absent_registry_no_finding ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::code_only_in_inline_test_module_is_excluded ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::enforced_rule_with_emitted_code_no_finding ... ok
[INFO] [stdout] test cli::tests::test_cli_archive_moves_completed_change ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::pending_rule_without_code_is_info ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::pending_rule_with_emitted_code_no_finding ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::same_spec_anchor_rules_do_not_dedup_collapse ... ok
[INFO] [stdout] test map::test_coverage::tests::test_coverage_missing_synced_emits_warning ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::error_finding_wrapper_counts_as_emission ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::struct_literal_code_field_counts_as_emission ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::suffix_identifier_call_is_not_emission ... ok
[INFO] [stdout] test mcp::tests::test_config_from_args_allow_mutating_tools_flag ... ok
[INFO] [stdout] test mcp::tests::test_config_from_args_changes_dir_sets_path ... ok
[INFO] [stdout] test mcp::tests::test_config_from_args_empty_returns_default ... ok
[INFO] [stdout] test map::test_coverage::tests::test_coverage_present_no_finding ... ok
[INFO] [stdout] test map::test_coverage::tests::test_coverage_non_rust_files_skipped ... ok
[INFO] [stdout] test mcp::tests::test_config_from_args_help_returns_err_with_usage ... ok
[INFO] [stdout] test mcp::tests::test_config_from_args_root_sets_root_path ... ok
[INFO] [stdout] test mcp::tests::test_config_from_args_unknown_option_returns_err ... ok
[INFO] [stdout] test map::test_coverage::tests::test_coverage_tagged_module_exempt ... ok
[INFO] [stdout] test mcp::tests::test_config_from_args_file_sets_blueprint_path ... ok
[INFO] [stdout] test cli::tests::test_cli_feedback_command ... ok
[INFO] [stdout] test mcp::tests::test_handle_line_invalid_json_returns_parse_error ... ok
[INFO] [stdout] test cli::tests::test_cli_init_and_version_commands ... ok
[INFO] [stdout] test cli::tests::test_onboard_json_output_is_valid_json ... ok
[INFO] [stdout] test mcp::tests::test_handle_line_unknown_method_returns_method_not_found ... ok
[INFO] [stdout] test mcp::tests::test_input_schema_hook_request_documents_kind_field ... ok
[INFO] [stdout] test mcp::tests::test_input_schema_returns_object_for_every_registered_schema ... ok
[INFO] [stdout] test mcp::tests::test_request_from_arguments_id_field_is_alias_for_node ... ok
[INFO] [stdout] test mcp::tests::test_request_from_arguments_mutating_requires_allow_flag ... ok
[INFO] [stdout] test mcp::tests::test_request_from_arguments_node_field_used_directly ... ok
[INFO] [stdout] test mcp::tests::test_request_from_arguments_node_wins_over_id_alias ... ok
[INFO] [stdout] test mcp::tests::test_request_from_arguments_status_alias_kind ... ok
[INFO] [stdout] test mcp::tests::test_resolve_path_absolute_is_returned_unchanged ... ok
[INFO] [stdout] test mcp::tests::test_resolve_path_relative_is_joined_with_root ... ok
[INFO] [stdout] test provenance::trace::tests::higher_version_rejected_via_in_memory_value ... ok
[INFO] [stdout] test provenance::trace::tests::prompts_field_is_empty_in_this_phase ... ok
[INFO] [stdout] test provenance::trace::tests::read_sidecar_io_error_for_missing_file ... ok
[INFO] [stdout] test provenance::trace::tests::read_sidecar_rejects_higher_version ... ok
[INFO] [stdout] test provenance::trace::tests::read_sidecar_round_trips_against_disk ... ok
[INFO] [stdout] test provenance::trace::tests::sidecar_carries_four_native_stages ... ok
[INFO] [stdout] test provenance::trace::tests::sidecar_carries_phase_field ... ok
[INFO] [stdout] test provenance::trace::tests::sidecar_round_trips_through_serde ... ok
[INFO] [stdout] test provenance::trace::tests::stage_record_token_fields_optional ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_accept_draft_missing_id_errors ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_accept_draft_not_found_errors ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_discard_already_accepted_draft_is_rejected ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_discard_already_discarded_draft_is_rejected ... ok
[INFO] [stdout] test cli::tests::test_contract_and_order_json_served_by_query_api ... ok
[INFO] [stdout] test mcp::tests::test_config_from_args_root_missing_value_returns_err ... ok
[INFO] [stdout] test mcp::tests::test_handle_line_empty_string_returns_parse_error ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_discard_draft_missing_id_errors ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_discard_draft_not_found_errors ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_discard_records_transition ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_edit_discarded_draft_is_rejected ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_edit_draft_missing_id_errors ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_discard_draft_transitions_to_discarded ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_edit_draft_writes_editable_file ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_edit_accepted_draft_is_rejected ... ok
[INFO] [stdout] test mcp::tests::test_handle_line_tools_list_returns_tools_array ... ok
[INFO] [stdout] test cli::tests::test_cli_draft_mutating_commands_json ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_show_draft_not_found_errors ... ok
[INFO] [stdout] test map::test_coverage::tests::test_coverage_ghost_node_exempt ... ok
[INFO] [stdout] test map::spec_rule_coverage::tests::url_in_string_preserves_code_on_same_line ... ok
[INFO] [stdout] test query_api::handlers::bundle::tests::bundle_composes_contract_decisions_and_dependencies ... ok
[INFO] [stdout] test query_api::handlers::bundle::tests::bundle_reports_missing_contract_for_uncontracted_node ... ok
[INFO] [stdout] test query_api::handlers::bundle::tests::bundle_returns_finding_error_for_unknown_node ... ok
[INFO] [stdout] test query_api::registry::tests::test_draft_accept_is_mutating ... ok
[INFO] [stdout] test query_api::registry::tests::test_draft_edit_is_mutating ... ok
[INFO] [stdout] test query_api::registry::tests::test_draft_show_is_readonly ... ok
[INFO] [stdout] test query_api::registry::tests::test_drafts_is_readonly ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_edit_records_transition ... ok
[INFO] [stdout] test query_api::registry::tests::test_registry_contains_draft_discard ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_list_drafts_empty_store ... ok
[INFO] [stdout] test query_api::registry::tests::test_registry_contains_draft_show ... ok
[INFO] [stdout] test query_api::registry::tests::test_registry_contains_draft_edit ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_list_drafts_returns_summaries ... ok
[INFO] [stdout] test query_api::registry::tests::test_registry_size ... ok
[INFO] [stdout] test query_api::registry::tests::test_registry_contains_drafts ... ok
[INFO] [stdout] test query_api::tests::test_envelope_json_wraps_response ... ok
[INFO] [stdout] test query_api::tests::test_execute_context_includes_backlog ... ok
[INFO] [stdout] test query_api::tests::test_execute_get_resolves_bead_when_not_a_node ... ok
[INFO] [stdout] test query_api::tests::test_execute_rejects_unknown_or_invalid_requests ... ok
[INFO] [stdout] test query_api::tests::test_execute_health_returns_structured_response ... ok
[INFO] [stdout] test query_api::tests::test_execute_returns_node_json_for_valid_request ... ok
[INFO] [stdout] test query_api::tests::test_error_json_includes_optional_fields ... ok
[INFO] [stdout] test query_api::tests::test_execute_remediate_returns_action_plan ... ok
[INFO] [stdout] test query_api::tests::test_execute_status_includes_next_recommended ... ok
[INFO] [stdout] test query_api::tests::test_registry_includes_health_tool ... ok
[INFO] [stdout] test query_api::tests::test_registry_includes_remediate_tool ... ok
[INFO] [stdout] test query_api::tests::test_registry_includes_watch_tool ... ok
[INFO] [stdout] test query_api::tests::test_execute_watch_returns_finding_added_events ... ok
[INFO] [stdout] test query_api::tests::test_registry_lists_known_tools ... ok
[INFO] [stdout] test query_api::tests::test_requires_valid_map_neighbourhood_missing_from_mcp_path ... ok
[INFO] [stdout] test query_api::tests::test_visible_tools_filter_mutating_entries ... ok
[INFO] [stdout] test query_api::util::tests::command_error_wraps_message ... ok
[INFO] [stdout] test query_api::util::tests::finding_error_maps_fields ... ok
[INFO] [stdout] test query_api::util::tests::findings_error_joins_multiple_finding_messages ... ok
[INFO] [stdout] test query_api::util::tests::findings_error_uses_first_finding_code_and_path ... ok
[INFO] [stdout] test query_api::util::tests::required_reports_missing_field ... ok
[INFO] [stdout] test query_api::util::tests::required_returns_value_when_present ... ok
[INFO] [stdout] test mcp::tests::test_handle_line_initialize_echoes_id_and_returns_capabilities ... ok
[INFO] [stdout] test mcp::tests::test_handle_line_id_null_when_absent_from_request ... ok
[INFO] [stdout] test reconcile::code::tests::normalize_backslash_to_forward_slash ... ok
[INFO] [stdout] test reconcile::code::tests::trim_dot_leaves_unchanged_when_no_leading_dot_slash ... ok
[INFO] [stdout] test reconcile::code::tests::normalize_forward_slashes_unchanged ... ok
[INFO] [stdout] test reconcile::code::tests::trim_dot_strips_leading_dot_slash ... ok
[INFO] [stdout] test reconcile::fingerprint::tests::empty_symbols_produces_sixteen_char_hash ... ok
[INFO] [stdout] test reconcile::fingerprint::tests::from_symbols_is_deterministic ... ok
[INFO] [stdout] test reconcile::fingerprint::tests::from_symbols_sorts_before_hashing ... ok
[INFO] [stdout] test reconcile::fingerprint::tests::from_symbols_matches_from_sorted_with_pre_sorted_input ... ok
[INFO] [stdout] test reconcile::fixture::tests::test_fixture_reconciler_id_format ... ok
[INFO] [stdout] test reconcile::fingerprint::tests::different_symbols_produce_different_hashes ... ok
[INFO] [stdout] test reconcile::fixture::tests::test_fixture_reconciler_produces_findings ... ok
[INFO] [stdout] test reconcile::symbol::tests::normalize_symbol_already_normalized_returns_input_owned ... ok
[INFO] [stdout] test query_api::tests::test_execute_stamps_schema_version_on_read_commands ... ok
[INFO] [stdout] test reconcile::symbol::tests::normalize_symbol_collapses_newlines_like_whitespace ... ok
[INFO] [stdout] test report::tests::test_issue_url_includes_feedback_label_and_encoded_title ... ok
[INFO] [stdout] test reconcile::symbol::tests::normalize_symbol_trims_leading_and_trailing_whitespace ... ok
[INFO] [stdout] test scanner::cache::tests::blueprint_source_roots_ignores_leading_dot_slash ... ok
[INFO] [stdout] test scanner::cache::tests::blueprint_source_roots_includes_nested_nodes ... ok
[INFO] [stdout] test scanner::cache::tests::blueprint_source_roots_prunes_subdirectories ... ok
[INFO] [stdout] test scanner::cache::tests::blueprint_source_roots_returns_directory_paths ... ok
[INFO] [stdout] test scanner::cache::tests::blueprint_source_roots_uses_parent_for_file_paths ... ok
[INFO] [stdout] test scanner::checks::interface_drift_tests::bogus_interface_entry_emits_drift_finding ... ok
[INFO] [stdout] test map::graph::tests::test_resolve_suggestions_capped_at_three ... ok
[INFO] [stdout] test scanner::checks::interface_drift_tests::matching_interface_entry_emits_no_finding ... ok
[INFO] [stdout] test scanner::checks::interface_drift_tests::symbol_not_listed_in_interface_is_never_a_finding ... ok
[INFO] [stdout] test scanner::checks::tests::visit_nodes_collects_all_nodes_in_tree ... ok
[INFO] [stdout] test scanner::checks::tests::visit_nodes_empty_input_invokes_callback_never ... ok
[INFO] [stdout] test scanner::config::tests::test_asymmetry_matches_exact_node_role_and_paths ... ok
[INFO] [stdout] test scanner::config::tests::test_asymmetry_rejects_extra_path ... ok
[INFO] [stdout] test scanner::config::tests::test_asymmetry_rejects_wrong_node ... ok
[INFO] [stdout] test scanner::config::tests::test_asymmetry_rejects_wrong_role ... ok
[INFO] [stdout] test scanner::config::tests::test_blueprint_file_is_protected ... ok
[INFO] [stdout] test scanner::config::tests::test_cairn_hidden_dir_is_protected ... ok
[INFO] [stdout] test scanner::config::tests::test_config_file_is_protected ... ok
[INFO] [stdout] test scanner::config::tests::test_directory_prefix_match ... ok
[INFO] [stdout] test scanner::config::tests::test_empty_pattern_is_skipped ... ok
[INFO] [stdout] test scanner::config::tests::test_exact_match ... ok
[INFO] [stdout] test scanner::config::tests::test_glob_does_not_match_wrong_extension ... ok
[INFO] [stdout] test scanner::config::tests::test_glob_extension_match ... ok
[INFO] [stdout] test scanner::config::tests::test_load_ignore_file_missing_returns_empty ... ok
[INFO] [stdout] test scanner::config::tests::test_load_ignore_file_strips_comments_and_blanks ... ok
[INFO] [stdout] test scanner::config::tests::test_meta_prefix_is_protected ... ok
[INFO] [stdout] test scanner::config::tests::test_meta_prefix_not_matched_for_metadata ... ok
[INFO] [stdout] test scanner::config::tests::test_no_match_returns_false ... ok
[INFO] [stdout] test scanner::config::tests::test_normal_paths_are_not_protected ... ok
[INFO] [stdout] test scanner::config::tests::test_parse_config_context_field ... ok
[INFO] [stdout] test scanner::config::tests::test_parse_config_ignore_list ... ok
[INFO] [stdout] test scanner::config::tests::test_parse_config_rules_map ... ok
[INFO] [stdout] test scanner::config::tests::test_parse_config_targets ... ok
[INFO] [stdout] test scanner::config::tests::test_partial_prefix_not_matched ... ok
[INFO] [stdout] test scanner::config::tests::test_suffix_match ... ok
[INFO] [stdout] test scanner::config::tests::test_trailing_slash_in_pattern_is_trimmed ... ok
[INFO] [stdout] test scanner::outputs::tests::append_log_counts_errors_only ... ok
[INFO] [stdout] test scanner::outputs::tests::append_log_creates_cairn_dir_and_appends_entry ... ok
[INFO] [stdout] test scanner::outputs::tests::write_map_creates_expected_sections ... ok
[INFO] [stdout] test scanner::outputs::tests::write_map_is_idempotent_when_content_unchanged ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_show_draft_missing_id_errors ... ok
[INFO] [stdout] test reconcile::symbol::tests::normalize_symbol_collapses_consecutive_whitespace ... ok
[INFO] [stdout] test scanner::snapshot::tests::test_build_snapshot_has_schema_version_one ... ok
[INFO] [stdout] test scanner::snapshot::tests::test_build_snapshot_maps_node_fields ... ok
[INFO] [stdout] test scanner::snapshot::tests::test_write_is_deterministic_and_idempotent ... ok
[INFO] [stdout] test scanner::state::tests::read_missing_snapshot_returns_empty_v2 ... ok
[INFO] [stdout] test scanner::state::tests::unsupported_version_returns_error ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_added_uncovered_node_emits_finding ... ok
[INFO] [stdout] test scanner::state::tests::v2_snapshot_round_trips_with_edges ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_covered_added_node_no_finding ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_edge_added_uncovered_emits_finding ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_edge_removed_uncovered_emits_finding ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_edge_skipped_when_previous_pre_v2 ... ok
[INFO] [stdout] test hooks::architecture::tests::test_decision_multi_node_covers_multiple_changes ... ok
[INFO] [stdout] test map::query::tests::islands_single_component_via_ownership_only ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_edit_draft_not_found_errors ... ok
[INFO] [stdout] test query_api::registry::tests::test_registry_contains_draft_accept ... ok
[INFO] [stdout] test query_api::util::tests::findings_error_empty_slice_uses_generic_code ... ok
[INFO] [stdout] test scanner::state::tests::v1_snapshot_migrates_to_v2_with_empty_edges ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_edge_covered_no_finding ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_no_finding_when_previous_is_empty ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_removed_node_uncovered_emits_finding ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_shape_and_edge_change_emits_single_finding ... ok
[INFO] [stdout] test scanner::tests::test_dedup_drops_exact_duplicate ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_superseded_decision_covers_added_node ... ok
[INFO] [stdout] test scanner::tests::test_dedup_keeps_different_targets ... ok
[INFO] [stdout] test scanner::tests::test_dedup_merges_same_issue_different_message ... ok
[INFO] [stdout] test scanner::tests::test_divergence_different_roles_no_finding ... ok
[INFO] [stdout] test scanner::tests::test_divergence_two_reports_different_hash_emits_ct001 ... ok
[INFO] [stdout] test scanner::tests::test_divergence_two_reports_same_hash_no_finding ... ok
[INFO] [stdout] test scanner::tests::test_dedup_keeps_different_paths ... ok
[INFO] [stdout] test scanner::tests::test_orphan_beads_no_export_no_findings ... ok
[INFO] [stdout] test scanner::tests::test_provenance_coverage_covered_leaf_no_warning ... ok
[INFO] [stdout] test scanner::tests::test_provenance_coverage_no_decisions_no_findings ... ok
[INFO] [stdout] test scanner::tests::test_orphan_beads_warns_on_unknown_node_label ... ok
[INFO] [stdout] test scanner::tests::test_provenance_coverage_parent_node_exempt_from_warning ... ok
[INFO] [stdout] test scanner::tests::test_provenance_coverage_uncovered_leaf_emits_warning ... ok
[INFO] [stdout] test scanner::tests::test_divergence_single_report_no_finding ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_path_only_no_finding ... ok
[INFO] [stdout] test scanner::tests::test_dedup_empty_is_noop ... ok
[INFO] [stdout] test signal::tests::install_sigint_handler_can_be_called_multiple_times ... ok
[INFO] [stdout] test scanner::tests::test_dedup_preserves_order_and_first_occurrence ... ok
[INFO] [stdout] test sse::tests::test_connect_errors_on_non_200_status ... ok
[INFO] [stdout] test sse::tests::test_parse_empty_stream ... ok
[INFO] [stdout] test sse::tests::test_parse_http_url_custom_port ... ok
[INFO] [stdout] test sse::tests::test_parse_http_url_host_and_path ... ok
[INFO] [stdout] test sse::tests::test_parse_http_url_no_path_defaults_to_slash ... ok
[INFO] [stdout] test query_api::change_queries::tests::test_show_draft_returns_full_draft ... ok
[INFO] [stdout] test sse::tests::test_parse_ignores_comments_and_retry ... ok
[INFO] [stdout] test sse::tests::test_parse_multiline_data ... ok
[INFO] [stdout] test sse::tests::test_connect_returns_events_from_mock_server ... ok
[INFO] [stdout] test mcp::tests::test_handle_line_tools_call_missing_name_returns_invalid_params ... ok
[INFO] [stdout] test sse::tests::test_parse_single_event ... ok
[INFO] [stdout] test sse::tests::test_parse_http_url_rejects_non_http ... ok
[INFO] [stdout] test state::backlog::tests::read_missing_export_is_empty ... ok
[INFO] [stdout] test state::backlog::tests::for_node_excludes_unlinked_and_isolates_orphan_labels ... ok
[INFO] [stdout] test state::backlog::tests::ready_filters_open_and_sorts_by_priority ... ok
[INFO] [stdout] test state::backlog::tests::find_returns_any_status_by_id ... ok
[INFO] [stdout] test state::backlog::tests::ready_ignores_parent_child_dependencies ... ok
[INFO] [stdout] test suggested_edges::tests::count_pending_counts_only_pending ... ok
[INFO] [stdout] test state::backlog::tests::to_json_emits_summary_fields_with_linked_node ... ok
[INFO] [stdout] test suggested_edges::tests::edge_provenance_round_trips ... ok
[INFO] [stdout] test suggested_edges::tests::queue_round_trips_through_serde ... ok
[INFO] [stdout] test suggested_edges::tests::read_queue_rejects_higher_version ... ok
[INFO] [stdout] test suggested_edges::tests::read_queue_returns_none_when_absent ... ok
[INFO] [stdout] test state::backlog::tests::ready_excludes_beads_blocked_by_open_beads ... ok
[INFO] [stdout] test state::backlog::tests::ready_includes_bead_whose_blocker_is_closed ... ok
[INFO] [stdout] test suggested_edges::tests::validate_strict_absent_queue_returns_ok ... ok
[INFO] [stdout] test state::backlog::tests::for_node_groups_by_linked_node_and_sorts ... ok
[INFO] [stdout] test suggested_edges::tests::validate_strict_malformed_file_returns_cc003 ... ok
[INFO] [stdout] test suggested_edges::tests::validate_strict_zero_pending_returns_ok ... ok
[INFO] [stdout] test suggested_edges::tests::write_to_change_creates_directory_and_file ... ok
[INFO] [stdout] test state::backlog::tests::linked_node_reads_cairn_node_label ... ok
[INFO] [stdout] test suggested_edges::tests::read_queue_round_trips_against_disk ... ok
[INFO] [stdout] test suggested_edges::tests::write_to_change_is_idempotent_on_overwrite ... ok
[INFO] [stdout] test state::backlog::tests::read_skips_malformed_and_parses_objects ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_already_accepted_draft_is_rejected ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_edited_missing_file_errors ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_invalid_frontmatter_errors ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_edited_reads_editable_file ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_missing_draft_errors ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_happy_path_replaces_contract ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_records_interface_hash ... ok
[INFO] [stdout] test summariser::backend::tests::disabled_backend_returns_disabled_error ... ok
[INFO] [stdout] test summariser::backend::tests::local_command_mode_exposes_timeout ... ok
[INFO] [stdout] test summariser::backend::tests::mode_default_is_disabled ... ok
[INFO] [stdout] test summariser::backend::tests::mode_round_trips_through_serde ... ok
[INFO] [stdout] test summariser::backend::tests::test_fake_backend_different_requests_returns_same_response ... ok
[INFO] [stdout] test summariser::backend::tests::test_fake_backend_err_returns_configured_error ... ok
[INFO] [stdout] test summariser::backend::tests::test_fake_backend_ok_returns_configured_response ... ok
[INFO] [stdout] test summariser::backend::tests::test_hosted_backend_returns_unsupported_error ... ok
[INFO] [stdout] test summariser::backend::tests::test_hosted_config_round_trips_through_serde ... ok
[INFO] [stdout] test summariser::backend::tests::test_hosted_config_with_defaults_parses ... ok
[INFO] [stdout] test suggested_edges::tests::triage_state_defaults_to_pending ... ok
[INFO] [stdout] test suggested_edges::tests::validate_strict_pending_entries_returns_cc002 ... ok
[INFO] [stdout] test reconcile::fingerprint::tests::hash_format_is_lower_hex ... ok
[INFO] [stdout] test query_api::registry::tests::test_draft_discard_is_mutating ... ok
[INFO] [stdout] test report::tests::test_issue_url_percent_encodes_special_characters ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_no_finding_when_no_decisions ... ok
[INFO] [stdout] test sse::tests::test_parse_multiple_events ... ok
[INFO] [stdout] test suggested_edges::tests::write_to_change_round_trips_content ... ok
[INFO] [stdout] test summariser::generate::tests::test_draft_header_deserialises_without_metadata_field ... ok
[INFO] [stdout] test summariser::config::tests::test_load_missing_file_returns_defaults ... ok
[INFO] [stdout] test summariser::config::tests::test_load_disabled_mode_from_file ... ok
[INFO] [stdout] test summariser::generate::tests::test_draft_header_metadata_round_trips_through_serde ... ok
[INFO] [stdout] test summariser::generate::tests::test_draft_header_omits_none_metadata_from_json ... ok
[INFO] [stdout] test summariser::generate::tests::test_generate_creates_pending_draft ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_discarded_draft_is_rejected ... ok
[INFO] [stdout] test summariser::backend::tests::test_local_command_backend_non_zero_exit_returns_error ... ok
[INFO] [stdout] test summariser::backend::tests::test_local_command_backend_echoes_valid_response ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_node_not_found_errors ... ok
[INFO] [stdout] test summariser::generate::tests::test_generate_returns_backend_error ... ok
[INFO] [stdout] test summariser::generate::tests::test_generate_none_metadata_stored_as_none ... ok
[INFO] [stdout] test summariser::backend::tests::test_local_command_backend_invalid_json_returns_parse_error ... ok
[INFO] [stdout] test summariser::generate::tests::test_generate_returns_store_conflict ... ok
[INFO] [stdout] test summariser::accept::tests::test_accept_wrong_node_errors ... ok
[INFO] [stdout] test summariser::generate::tests::test_generate_stores_metadata_from_response ... ok
[INFO] [stdout] test summariser::generate::tests::test_generate_draft_contains_node_id ... ok
[INFO] [stdout] test summariser::generate::tests::test_generate_preserves_code_samples_in_request ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_filters_interface_findings ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_includes_code_samples ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_no_contract_returns_none ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_drops_samples_when_prompt_too_large ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_node_not_found_errors ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_omits_empty_description_from_map_facts ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_request_id_and_target_preserved ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_omits_empty_tags_from_map_facts ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_skips_missing_code_files ... ok
[INFO] [stdout] test summariser::request::tests::request_omits_empty_defaults ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_uses_contract_body_from_set ... ok
[INFO] [stdout] test summariser::request::tests::request_rejects_unknown_fields ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_truncates_code_samples_per_file_limit ... ok
[INFO] [stdout] test summariser::request::tests::request_round_trips_through_serde ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_truncates_contract_when_prompt_too_large ... ok
[INFO] [stdout] test summariser::request::tests::request_serialises_with_design_doc_field_names ... ok
[INFO] [stdout] test summariser::request::tests::response_rejects_unknown_fields ... ok
[INFO] [stdout] test summariser::request::tests::response_legacy_summary_only_is_rejected ... ok
[INFO] [stdout] test summariser::store::tests::accepted_constructor_rejects_empty_hash ... ok
[INFO] [stdout] test summariser::store::tests::draft_status_returns_correct_variant ... ok
[INFO] [stdout] test summariser::store::tests::accepted_carries_non_empty_hash ... ok
[INFO] [stdout] test summariser::store::tests::deserialise_draft_without_transitions_field ... ok
[INFO] [stdout] test summariser::store::tests::draft_without_transitions_omits_field_in_json ... ok
[INFO] [stdout] test summariser::store::tests::pending_serialised_form_omits_hash_field ... ok
[INFO] [stdout] test summariser::store::tests::editable_extension_falls_back_to_txt_for_unknown ... ok
[INFO] [stdout] test summariser::store::tests::draft_with_transitions_serialises_them ... ok
[INFO] [stdout] test summariser::store::tests::pending_round_trips_through_serde ... ok
[INFO] [stdout] test summariser::request::tests::response_round_trips_through_serde ... ok
[INFO] [stdout] test summariser::request::tests::response_without_metadata_parses ... ok
[INFO] [stdout] test summariser::store::tests::store_read_missing_returns_not_found ... ok
[INFO] [stdout] test summariser::store::tests::store_list_returns_sorted_drafts ... ok
[INFO] [stdout] test summariser::store::tests::transition_accepted_to_any_is_invalid ... ok
[INFO] [stdout] test summariser::config::tests::test_load_local_command_mode ... ok
[INFO] [stdout] test summariser::store::tests::transition_discarded_to_any_is_invalid ... ok
[INFO] [stdout] test summariser::store::tests::transition_editable_to_discarded_is_valid ... ok
[INFO] [stdout] test summariser::store::tests::transition_pending_to_accepted_is_valid ... ok
[INFO] [stdout] test summariser::store::tests::transition_pending_to_discarded_is_valid ... ok
[INFO] [stdout] test summariser::store::tests::store_write_refuses_conflict ... ok
[INFO] [stdout] test summariser::store::tests::transition_pending_to_editable_is_valid ... ok
[INFO] [stdout] test summariser::store::tests::store_overwrite_replaces_existing ... ok
[INFO] [stdout] test summariser::store::tests::write_editable_uses_artefact_extension ... ok
[INFO] [stdout] test summariser::store::tests::store_write_then_read_round_trip ... ok
[INFO] [stdout] test summariser::request::tests::response_without_summary_parses ... ok
[INFO] [stdout] test tests::test_package_version_is_not_empty ... ok
[INFO] [stdout] test summariser::tests::test_phase_one_registry_safety_classes ... ok
[INFO] [stdout] test tests::test_version_label_includes_name_and_version ... ok
[INFO] [stdout] test ui::api::tests::test_fmn_absent_node_key_returns_false ... ok
[INFO] [stdout] test ui::api::tests::test_beads_response_json_filters_by_node ... ok
[INFO] [stdout] test tests::test_phase_one_registry_safety_classes ... ok
[INFO] [stdout] test ui::api::tests::test_fmn_exact_scalar_node_key_matches ... ok
[INFO] [stdout] test ui::api::tests::test_fmn_block_list_no_false_positive_for_prefix ... ok
[INFO] [stdout] test ui::api::tests::test_fmn_inline_list_exact_match ... ok
[INFO] [stdout] test ui::api::tests::test_title_from_body_uses_fallback_when_no_h1 ... ok
[INFO] [stdout] test ui::api::tests::test_title_from_body_extracts_h1 ... ok
[INFO] [stdout] test ui::serialise::tests::test_percent_decode_empty_string ... ok
[INFO] [stdout] test ui::serialise::tests::test_percent_decode_invalid_hex_pair_preserves_both_chars ... ok
[INFO] [stdout] test ui::serialise::tests::test_percent_decode_mixed_valid_and_plain ... ok
[INFO] [stdout] test ui::serialise::tests::test_percent_decode_no_encoding_unchanged ... ok
[INFO] [stdout] test ui::serialise::tests::test_percent_decode_plus_becomes_space ... ok
[INFO] [stdout] test ui::serialise::tests::test_percent_decode_truncated_percent_one_char_preserved ... ok
[INFO] [stdout] test ui::serialise::tests::test_percent_decode_truncated_percent_at_end_preserved ... ok
[INFO] [stdout] test ui::serialise::tests::test_percent_decode_valid_sequence_decoded ... ok
[INFO] [stdout] test ui::tests::test_request_path_supports_get_only ... ok
[INFO] [stdout] test tests::test_package_name_returns_cairn ... ok
[INFO] [stdout] test scanner::checks::interface_drift_tests::empty_interface_block_emits_nothing ... ok
[INFO] [stdout] test scanner::tests::test_blueprint_change_edge_unchanged_no_finding ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_populates_map_facts ... ok
[INFO] [stdout] test verification::tests::test_verification_state_serde_roundtrip ... ok
[INFO] [stdout] test watch::tests::test_diff_added ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_reads_contract_fallback_when_not_in_set ... ok
[INFO] [stdout] test ui::api::tests::test_fmn_prefix_node_key_does_not_match_child ... ok
[INFO] [stdout] test ui::api::tests::test_fmn_prefix_nodes_inline_list_does_not_false_positive ... ok
[INFO] [stdout] test ui::api::tests::test_title_from_body_empty_h1_uses_fallback ... ok
[INFO] [stdout] test summariser::prompt::tests::test_build_request_populates_context_and_rules ... ok
[INFO] [stdout] test summariser::store::tests::transition_editable_to_accepted_is_valid ... ok
[INFO] [stdout] test watch::tests::test_unix_to_datetime_known_date ... ok
[INFO] [stdout] test watch::tests::test_diff_mixed ... ok
[INFO] [stdout] test watch::tests::test_diff_resolved ... ok
[INFO] [stdout] test watch::tests::test_diff_empty_both ... ok
[INFO] [stdout] test ui::api::tests::test_fmn_block_list_is_matched ... ok
[INFO] [stdout] test watch::tests::watch_opts_interval ... ok
[INFO] [stdout] test watch::tests::test_diff_same_key_different_message_emits_resolved_and_added ... ok
[INFO] [stdout] test watch::tests::test_diff_same_key_different_severity ... ok
[INFO] [stdout] test watch::tests::test_diff_unchanged ... ok
[INFO] [stdout] test watch::tests::test_unix_to_datetime_epoch ... ok
[INFO] [stdout] test watch::tests::watch_opts_rejects_missing_interval_value ... ok
[INFO] [stdout] test watch::tests::watch_opts_rejects_unknown_flags ... ok
[INFO] [stdout] test watch::tests::watch_opts_rejects_invalid_interval ... ok
[INFO] [stdout] test watch::tests::watch_opts_rejects_zero_interval ... ok
[INFO] [stdout] test watch::tests::watch_opts_defaults ... ok
[INFO] [stdout] test watch::tests::watch_opts_interval_and_once ... ok
[INFO] [stdout] test watch::tests::watch_opts_once ... ok
[INFO] [stdout] test workspace::tests::lint_missing_member_emits_member_missing_finding ... ok
[INFO] [stdout] test workspace::tests::load_parses_single_member ... ok
[INFO] [stdout] test workspace::tests::status_missing_member_root_reports_error_other_member_still_counted ... ok
[INFO] [stdout] test workspace::tests::frontier_qualifies_entries_with_project_prefix ... ok
[INFO] [stdout] test workspace::tests::status_two_members_sums_totals ... ok
[INFO] [stdout] test ui::tests::test_ui_symbols_endpoint_returns_extracted_symbols ... ok
[INFO] [stdout] test ui::tests::test_ui_returns_not_found_for_unknown_routes ... ok
[INFO] [stdout] test ui::tests::test_ui_rejects_unsupported_methods ... ok
[INFO] [stdout] test cli::tests::test_cli_core_commands_support_human_and_json_output ... ok
[INFO] [stdout] test ui::tests::test_ui_route_dispatch_and_content_types ... ok
[INFO] [stdout] test cli::tests::test_check_output_for_empty_states ... FAILED
[INFO] [stdout] test summariser::backend::tests::test_local_command_backend_timeout_returns_timeout_error ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- cli::tests::test_check_output_for_empty_states stdout ----
[INFO] [stdout] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Snapshot Summary ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[INFO] [stdout] Snapshot file: src/cli/snapshots/cairn__cli__tests__check_no_blueprint.snap
[INFO] [stdout] Snapshot: check_no_blueprint
[INFO] [stdout] Source: src/cli/mod.rs:1136
[INFO] [stdout] ────────────────────────────────────────────────────────────────────────────────
[INFO] [stdout] Expression: no_bp.stdout
[INFO] [stdout] ────────────────────────────────────────────────────────────────────────────────
[INFO] [stdout] +new results
[INFO] [stdout] ────────────┬───────────────────────────────────────────────────────────────────
[INFO] [stdout]           1 │+No cairn.blueprint found. Inspection has nothing to look at.
[INFO] [stdout]           2 │+Run `cairn init` to scaffold a blueprint, then re-run `cairn check`.
[INFO] [stdout] ────────────┴───────────────────────────────────────────────────────────────────
[INFO] [stdout] 
[INFO] [stdout] thread 'cli::tests::test_check_output_for_empty_states' (2504) panicked at src/cli/mod.rs:1136:9:
[INFO] [stdout] called `Result::unwrap()` on an `Err` value: Os { code: 30, kind: ReadOnlyFilesystem, message: "Read-only file system" }
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x647d68148b21 - std[73adb7dc35730857]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x647d68148b21 - std[73adb7dc35730857]::backtrace_rs::backtrace::trace_unsynchronized::<std[73adb7dc35730857]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x647d68148b21 - std[73adb7dc35730857]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x647d68148b21 - <<std[73adb7dc35730857]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[6883ba1bc0fe4ed1]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x647d68161c4a - <core[6883ba1bc0fe4ed1]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x647d68161c4a - core[6883ba1bc0fe4ed1]::fmt::write
[INFO] [stdout]    6:     0x647d6814decc - std[73adb7dc35730857]::io::default_write_fmt::<alloc[55a36b64bcbf2c0d]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/io/mod.rs:626:11
[INFO] [stdout]    7:     0x647d6814decc - <alloc[55a36b64bcbf2c0d]::vec::Vec<u8> as std[73adb7dc35730857]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/io/mod.rs:1730:13
[INFO] [stdout]    8:     0x647d68120b36 - <std[73adb7dc35730857]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x647d68120b36 - std[73adb7dc35730857]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x647d6813d969 - std[73adb7dc35730857]::panicking::default_hook
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x647d680540f0 - <alloc[55a36b64bcbf2c0d]::boxed::Box<dyn for<'a, 'b> core[6883ba1bc0fe4ed1]::ops::function::Fn<(&'a std[73adb7dc35730857]::panic::PanicHookInfo<'b>,), Output = ()> + core[6883ba1bc0fe4ed1]::marker::Send + core[6883ba1bc0fe4ed1]::marker::Sync> as core[6883ba1bc0fe4ed1]::ops::function::Fn<(&std[73adb7dc35730857]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/alloc/src/boxed.rs:2333:9
[INFO] [stdout]   12:     0x647d680540f0 - test[980ffaebd391d06d]::test_main_inner::<test[980ffaebd391d06d]::test_main_static::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:155:21
[INFO] [stdout]   13:     0x647d6813dc92 - <alloc[55a36b64bcbf2c0d]::boxed::Box<dyn for<'a, 'b> core[6883ba1bc0fe4ed1]::ops::function::Fn<(&'a std[73adb7dc35730857]::panic::PanicHookInfo<'b>,), Output = ()> + core[6883ba1bc0fe4ed1]::marker::Send + core[6883ba1bc0fe4ed1]::marker::Sync> as core[6883ba1bc0fe4ed1]::ops::function::Fn<(&std[73adb7dc35730857]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/alloc/src/boxed.rs:2333:9
[INFO] [stdout]   14:     0x647d6813dc92 - std[73adb7dc35730857]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:823:13
[INFO] [stdout]   15:     0x647d68120be2 - std[73adb7dc35730857]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:688:13
[INFO] [stdout]   16:     0x647d68117ec9 - std[73adb7dc35730857]::sys::backtrace::__rust_end_short_backtrace::<std[73adb7dc35730857]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x647d68121b5d - __rustc[a7b7b02e776dd976]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:679:5
[INFO] [stdout]   18:     0x647d6816244c - core[6883ba1bc0fe4ed1]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x647d681621c2 - core[6883ba1bc0fe4ed1]::result::unwrap_failed
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/result.rs:1870:5
[INFO] [stdout]   20:     0x647d67a45847 - <core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::boxed::Box<dyn core[6883ba1bc0fe4ed1]::error::Error>>>::unwrap
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/result.rs:1231:23
[INFO] [stdout]   21:     0x647d67a45847 - cairn[8b4c47529ac7d493]::cli::tests::test_check_output_for_empty_states
[INFO] [stdout]                                at /opt/rustwide/workdir/src/cli/mod.rs:1136:9
[INFO] [stdout]   22:     0x647d67a317b7 - cairn[8b4c47529ac7d493]::cli::tests::test_check_output_for_empty_states::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/cli/mod.rs:1132:48
[INFO] [stdout]   23:     0x647d679f4796 - <cairn[8b4c47529ac7d493]::cli::tests::test_check_output_for_empty_states::{closure#0} as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x647d6804742b - <fn() -> core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x647d6804742b - test[980ffaebd391d06d]::__rust_begin_short_backtrace::<core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>, fn() -> core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:724:18
[INFO] [stdout]   26:     0x647d68054a75 - test[980ffaebd391d06d]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:747:74
[INFO] [stdout]   27:     0x647d68054a75 - <core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   28:     0x647d68054a75 - std[73adb7dc35730857]::panicking::catch_unwind::do_call::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}>, core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:576:43
[INFO] [stdout]   29:     0x647d68054a75 - std[73adb7dc35730857]::panicking::catch_unwind::<core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>, core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:544:19
[INFO] [stdout]   30:     0x647d68054a75 - std[73adb7dc35730857]::panic::catch_unwind::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}>, core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x647d68054a75 - test[980ffaebd391d06d]::run_test_in_process
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:747:27
[INFO] [stdout]   32:     0x647d68054a75 - test[980ffaebd391d06d]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:668:43
[INFO] [stdout]   33:     0x647d6804f524 - test[980ffaebd391d06d]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:698:41
[INFO] [stdout]   34:     0x647d6804f524 - std[73adb7dc35730857]::sys::backtrace::__rust_begin_short_backtrace::<test[980ffaebd391d06d]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x647d68057bc2 - std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked::<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/thread/lifecycle.rs:70:13
[INFO] [stdout]   36:     0x647d68057bc2 - <core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   37:     0x647d68057bc2 - std[73adb7dc35730857]::panicking::catch_unwind::do_call::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:576:43
[INFO] [stdout]   38:     0x647d68057bc2 - std[73adb7dc35730857]::panicking::catch_unwind::<(), core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:544:19
[INFO] [stdout]   39:     0x647d68057bc2 - std[73adb7dc35730857]::panic::catch_unwind::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x647d68057bc2 - std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked::<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/thread/lifecycle.rs:68:26
[INFO] [stdout]   41:     0x647d68057bc2 - <std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1} as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x647d6814729f - <alloc[55a36b64bcbf2c0d]::boxed::Box<dyn core[6883ba1bc0fe4ed1]::ops::function::FnOnce<(), Output = ()> + core[6883ba1bc0fe4ed1]::marker::Send> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/alloc/src/boxed.rs:2319:9
[INFO] [stdout]   43:     0x647d6814729f - <std[73adb7dc35730857]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/thread/unix.rs:123:17
[INFO] [stdout]   44:     0x74ddf2c0daa4 - <unknown>
[INFO] [stdout]   45:     0x74ddf2c9aa64 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     cli::tests::test_check_output_for_empty_states
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 1068 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.51s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--lib`
[INFO] running `Command { std: "docker" "inspect" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f", kill_on_drop: false }`
[INFO] [stdout] d78624506fd0c20281d402bc472c4208a99c4209a8800e5b7ac68576a6f6522f
