[INFO] cloning repository https://github.com/bn-l/devlogger [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/bn-l/devlogger" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbn-l%2Fdevlogger", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbn-l%2Fdevlogger'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 2ffdd943f810dc8b2a5e88e1d5195e11c4c29eff [INFO] testing bn-l/devlogger against 1.97.0-beta.6 for beta-1.98-1 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbn-l%2Fdevlogger" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/bn-l/devlogger [INFO] finished tweaking git repo https://github.com/bn-l/devlogger [INFO] tweaked toml for git repo https://github.com/bn-l/devlogger written to /workspace/builds/worker-0-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/bn-l/devlogger on toolchain 1.97.0-beta.6 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/bn-l/devlogger 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.97.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded rmcp-macros v1.4.0 [INFO] [stderr] Downloaded rmcp v1.4.0 [INFO] [stderr] Downloaded process-wrap v9.1.0 [INFO] [stderr] Downloaded nix v0.31.2 [INFO] [stderr] Downloaded tokio v1.52.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/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] 3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3 [INFO] running `Command { std: "docker" "start" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3", 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" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3", 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" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.185 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling futures-channel v0.3.32 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling log v0.4.29 [INFO] [stderr] Compiling slab v0.4.12 [INFO] [stderr] Compiling nix v0.31.2 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling matchers v0.2.0 [INFO] [stderr] Compiling owo-colors v4.3.0 [INFO] [stderr] Compiling object v0.37.3 [INFO] [stderr] Compiling nu-ansi-term v0.50.3 [INFO] [stderr] Compiling smallvec v1.15.1 [INFO] [stderr] Compiling gimli v0.32.3 [INFO] [stderr] Compiling bitflags v2.11.1 [INFO] [stderr] Compiling color-spantrace v0.3.0 [INFO] [stderr] Compiling eyre v0.6.12 [INFO] [stderr] Compiling hashbrown v0.17.0 [INFO] [stderr] Compiling memchr v2.8.0 [INFO] [stderr] Compiling miniz_oxide v0.8.9 [INFO] [stderr] Compiling tracing-log v0.2.0 [INFO] [stderr] Compiling indenter v0.3.4 [INFO] [stderr] Compiling rmcp v1.4.0 [INFO] [stderr] Compiling rustc-demangle v0.1.27 [INFO] [stderr] Compiling clap_lex v1.1.0 [INFO] [stderr] Compiling dyn-clone v1.0.20 [INFO] [stderr] Compiling pastey v0.2.1 [INFO] [stderr] Compiling indexmap v2.14.0 [INFO] [stderr] Compiling clap_builder v4.6.0 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling mio v1.2.0 [INFO] [stderr] Compiling fs2 v0.4.3 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling serde_derive_internals v0.29.1 [INFO] [stderr] Compiling addr2line v0.25.1 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling futures-macro v0.3.32 [INFO] [stderr] Compiling tokio-macros v2.7.0 [INFO] [stderr] Compiling ref-cast-impl v1.0.25 [INFO] [stderr] Compiling schemars_derive v1.2.1 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling clap_derive v4.6.1 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling ref-cast v1.0.25 [INFO] [stderr] Compiling backtrace v0.3.76 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling tokio v1.52.0 [INFO] [stderr] Compiling clap v4.6.1 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling rmcp-macros v1.4.0 [INFO] [stderr] Compiling tracing-serde v0.2.0 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling futures-executor v0.3.32 [INFO] [stderr] Compiling tracing-subscriber v0.3.23 [INFO] [stderr] Compiling futures v0.3.32 [INFO] [stderr] Compiling schemars v1.2.1 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Compiling process-wrap v9.1.0 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling tracing-error v0.2.1 [INFO] [stderr] Compiling color-eyre v0.6.5 [INFO] [stderr] Compiling devlogger v1.3.2 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 56.28s [INFO] running `Command { std: "docker" "inspect" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3", 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" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling nix v0.31.2 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling process-wrap v9.1.0 [INFO] [stderr] Compiling rmcp v1.4.0 [INFO] [stderr] Compiling tempfile v3.27.0 [INFO] [stderr] Compiling devlogger v1.3.2 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 30.54s [INFO] running `Command { std: "docker" "inspect" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3", 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" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.28s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/devlogger-9868cb0d232d1561) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/devlogger-705e5bba0c646ed6) [INFO] [stderr] Running unittests src/bin/devlogger-mcp.rs (/opt/rustwide/target/debug/deps/devlogger_mcp-fb33b1510e2ee937) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running tests/cli_tests.rs (/opt/rustwide/target/debug/deps/cli_tests-b3c3ff13d02cba15) [INFO] [stdout] [INFO] [stdout] running 37 tests [INFO] [stdout] test cli_tests::global_file_flag::file_flag_defaults_to_none ... ok [INFO] [stdout] test cli_tests::global_file_flag::short_flag_after_subcommand ... ok [INFO] [stdout] test cli_tests::global_file_flag::long_flag_is_also_global ... ok [INFO] [stdout] test cli_tests::global_file_flag::long_flag_before_subcommand ... ok [INFO] [stdout] test cli_tests::global_file_flag::short_flag_after_subcommand_with_positional ... ok [INFO] [stdout] test cli_tests::global_file_flag::short_flag_before_subcommand ... ok [INFO] [stdout] test cli_tests::help_and_version::help_flag_exits_with_help_error ... ok [INFO] [stdout] test cli_tests::help_and_version::unknown_subcommand_is_error ... ok [INFO] [stdout] test cli_tests::help_and_version::version_flag_exits_with_version_error ... ok [INFO] [stdout] test cli_tests::list_parse::list_with_section_arg ... ok [INFO] [stdout] test cli_tests::list_parse::list_with_two_args_is_error ... ok [INFO] [stdout] test cli_tests::help_and_version::no_subcommand_is_error ... ok [INFO] [stdout] test cli_tests::move_parse::move_with_two_args_is_error ... ok [INFO] [stdout] test cli_tests::move_parse::move_with_three_args_is_from_id_to ... ok [INFO] [stdout] test cli_tests::move_parse::move_with_zero_args_is_error ... ok [INFO] [stdout] test cli_tests::new_parse::new_with_one_arg_is_error ... ok [INFO] [stdout] test cli_tests::move_parse::move_with_one_arg_is_error ... ok [INFO] [stdout] test cli_tests::read_parse::read_with_section_arg ... ok [INFO] [stdout] test cli_tests::move_parse::move_with_four_args_is_error ... ok [INFO] [stdout] test cli_tests::new_parse::new_with_two_args_is_section_and_entry ... ok [INFO] [stdout] test cli_tests::new_parse::new_with_zero_args_is_error ... ok [INFO] [stdout] test cli_tests::read_parse::read_with_no_args_is_error ... ok [INFO] [stdout] test cli_tests::new_parse::new_preserves_entry_whitespace_inside_quotes ... ok [INFO] [stdout] test cli_tests::read_parse::read_with_section_and_count ... ok [INFO] [stdout] test cli_tests::read_parse::read_with_three_args_is_error ... ok [INFO] [stdout] test cli_tests::sections_parse::sections_accepts_global_file_flag ... ok [INFO] [stdout] test cli_tests::list_parse::list_without_args_parses_as_list_all ... ok [INFO] [stdout] test cli_tests::new_parse::new_with_three_args_is_error ... ok [INFO] [stdout] test cli_tests::sections_parse::sections_rejects_positional_arg ... ok [INFO] [stdout] test cli_tests::update_parse::update_accepts_date_as_id ... ok [INFO] [stdout] test cli_tests::sections_parse::sections_parses_without_args ... ok [INFO] [stdout] test cli_tests::update_parse::update_with_one_arg_is_error ... ok [INFO] [stdout] test cli_tests::update_parse::update_with_three_args_is_section_id_entry ... ok [INFO] [stdout] test cli_tests::update_parse::update_with_four_args_is_error ... ok [INFO] [stdout] test cli_tests::update_parse::update_with_zero_args_is_error ... ok [INFO] [stdout] test cli_tests::update_parse::update_with_two_args_is_error ... ok [INFO] [stdout] test cli_tests::move_parse::move_accepts_date_as_id ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 37 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s [INFO] [stdout] [INFO] [stderr] Running tests/integration.rs (/opt/rustwide/target/debug/deps/integration-19bea8f6ab9db928) [INFO] [stdout] [INFO] [stdout] running 133 tests [INFO] [stdout] test integration::concurrency::section_gets_its_own_lockfile ... ok [INFO] [stdout] test integration::duplicate_numbers::list_still_works_on_file_with_duplicate_numbers ... ok [INFO] [stdout] test integration::duplicate_numbers::update_by_exact_date_targets_correct_entry_even_with_duplicate_numbers ... ok [INFO] [stdout] test integration::concurrency::ten_parallel_new_on_a_different_section_also_safe ... ok [INFO] [stdout] test integration::concurrency::parallel_writers_to_different_sections_do_not_corrupt_each_other ... ok [INFO] [stdout] test integration::edge_cases::long_entry_text_at_limit_is_accepted ... ok [INFO] [stdout] test integration::edge_cases::read_whole_file_dumps_bytes_verbatim_including_prose ... ok [INFO] [stdout] test integration::edge_cases::empty_entry_text_is_accepted ... ok [INFO] [stdout] test integration::edge_cases::list_on_file_with_only_prose_returns_empty_output ... ok [INFO] [stdout] test integration::edge_cases::no_trailing_newline_preserved_on_update ... ok [INFO] [stdout] test integration::edge_cases::f_flag_accepts_relative_path ... ok [INFO] [stdout] test integration::edge_cases::read_n_on_prose_only_file_returns_empty ... ok [INFO] [stdout] test integration::edge_cases::read_n_skips_prose_and_returns_only_entry_lines ... ok [INFO] [stdout] test integration::edge_cases::update_to_identical_text_is_a_noop_in_content_but_succeeds ... ok [INFO] [stdout] test integration::concurrency::twenty_parallel_new_produces_twenty_unique_numbered_entries ... ok [INFO] [stdout] test integration::entry_text::new_accepts_unicode_entry ... ok [INFO] [stdout] test integration::edge_cases::whitespace_only_entry_text_is_accepted_and_preserved ... ok [INFO] [stdout] test integration::entry_text::new_accepts_entry_exactly_at_length_limit ... ok [INFO] [stdout] test integration::edge_cases::updating_last_entry_works_correctly ... ok [INFO] [stdout] test integration::edge_cases::updating_first_entry_works_correctly ... ok [INFO] [stdout] test integration::entry_text::new_accepts_tab_in_entry ... ok [INFO] [stdout] test integration::concurrency::concurrent_updates_do_not_lose_writes ... ok [INFO] [stdout] test integration::duplicate_numbers::update_by_ambiguous_number_does_not_mutate_file ... ok [INFO] [stdout] test integration::entry_text::new_rejects_entry_with_crlf ... ok [INFO] [stdout] test integration::entry_text::update_rejects_entry_exceeding_length_limit ... ok [INFO] [stdout] test integration::entry_text::new_rejects_entry_with_carriage_return ... ok [INFO] [stdout] test integration::duplicate_numbers::update_by_ambiguous_number_errors_with_guidance ... ok [INFO] [stdout] test integration::error_messages::numeric_section_name_error_mentions_the_bad_char ... ok [INFO] [stdout] test integration::error_messages::leading_hyphen_section_name_error ... ok [INFO] [stdout] test integration::entry_text::new_rejects_arbitrary_control_char ... ok [INFO] [stdout] test integration::file_layout::devlog_folder_is_named_uppercase_devlog ... ok [INFO] [stdout] test integration::file_layout::file_ends_with_newline ... ok [INFO] [stdout] test integration::entry_text::update_rejects_entry_with_carriage_return ... ok [INFO] [stdout] test integration::file_layout::section_file_matches_section_name_convention ... ok [INFO] [stdout] test integration::file_layout::section_devlog_nests_section_subdirectory ... ok [INFO] [stdout] test integration::help_output::binary_runs_correctly_after_help_invocations ... ok [INFO] [stdout] test integration::help_output::help_works_in_empty_directory ... ok [INFO] [stdout] test integration::help_output::help_exits_zero_and_lists_all_subcommands ... ok [INFO] [stdout] test integration::help_output::no_args_shows_error_and_nonzero_exit ... ok [INFO] [stdout] test integration::edge_cases::update_errors_when_no_entries_exist_even_if_file_present ... ok [INFO] [stdout] test integration::file_layout::creates_parents_when_devlog_dir_missing ... ok [INFO] [stdout] test integration::file_layout::no_temp_file_left_behind_after_update ... ok [INFO] [stdout] test integration::line_endings::crlf_file_preserved_after_update ... ok [INFO] [stdout] test integration::help_output::subcommand_help_describes_subcommand ... ok [INFO] [stdout] test integration::help_output::version_exits_zero_and_has_nonempty_output ... ok [INFO] [stdout] test integration::help_output::short_help_flag_works_too ... ok [INFO] [stdout] test integration::line_endings::crlf_file_preserved_after_new ... ok [INFO] [stdout] test integration::line_endings::fresh_file_uses_lf_by_default ... ok [INFO] [stdout] test integration::line_endings::crlf_preserved_across_prose_in_update ... ok [INFO] [stdout] test integration::line_endings::lf_file_stays_lf_after_new ... ok [INFO] [stdout] test integration::line_endings::lf_file_stays_lf_after_update ... ok [INFO] [stdout] test integration::line_endings::list_reads_crlf_file_correctly ... ok [INFO] [stdout] test integration::list_flow::list_all_rows_fit_in_80_columns_including_prefix ... ok [INFO] [stdout] test integration::list_flow::list_elided_count_is_accurate ... ok [INFO] [stdout] test integration::list_flow::list_does_not_truncate_short_entries ... ok [INFO] [stdout] test integration::duplicate_numbers::update_by_date_prefix_errors_when_multiple_entries_match ... ok [INFO] [stdout] test integration::list_flow::list_output_shape_matches_canonical_entry_line ... ok [INFO] [stdout] test integration::list_flow::list_shows_entries_in_order ... ok [INFO] [stdout] test integration::list_flow::list_sections_are_independent ... ok [INFO] [stdout] test integration::entry_text::new_rejects_entry_with_newline ... ok [INFO] [stdout] test integration::list_flow::list_truncates_long_entries_to_80_chars_with_suffix ... ok [INFO] [stdout] test integration::list_flow::list_truncates_by_display_width_for_wide_glyphs ... ok [INFO] [stdout] test integration::list_flow::list_with_no_args_on_empty_project_prints_nothing ... ok [INFO] [stdout] test integration::move_flow::move_by_exact_date_resolves_target ... ok [INFO] [stdout] test integration::move_flow::move_preserves_prose_in_both_files ... ok [INFO] [stdout] test integration::list_flow::list_all_prefixes_each_line_with_section_name ... ok [INFO] [stdout] test integration::move_flow::move_appends_newer_entry_to_end_of_dest ... ok [INFO] [stdout] test integration::move_flow::move_renumbers_source_after_removal ... ok [INFO] [stdout] test integration::move_flow::move_slots_entry_in_middle_by_date ... ok [INFO] [stdout] test integration::entry_text::new_rejects_entry_exceeding_length_limit ... ok [INFO] [stdout] test integration::move_flow::move_to_new_section_creates_it ... ok [INFO] [stdout] test integration::error_messages::parse_error_is_single_line_with_path_and_line_number ... ok [INFO] [stdout] test integration::new_flow::each_entry_on_its_own_line ... ok [INFO] [stdout] test integration::error_messages::consecutive_hyphens_section_name_error ... ok [INFO] [stdout] test integration::new_flow::entry_text_with_colons_survives_round_trip ... ok [INFO] [stdout] test integration::new_flow::entry_text_with_pipes_survives_round_trip ... ok [INFO] [stdout] test integration::new_flow::first_new_creates_devlog_directory_and_file ... ok [INFO] [stdout] test integration::new_flow::first_entry_numbered_one ... ok [INFO] [stdout] test integration::new_flow::new_appends_rather_than_overwriting ... ok [INFO] [stdout] test integration::new_flow::new_without_dash_f_uses_cwd ... ok [INFO] [stdout] test integration::new_flow::section_new_creates_section_subdir ... ok [INFO] [stdout] test integration::new_flow::section_numbering_is_independent ... ok [INFO] [stdout] test integration::error_messages::parse_error_does_not_dump_file_contents_via_cli ... ok [INFO] [stdout] test integration::entry_text::update_rejects_entry_with_newline ... ok [INFO] [stdout] test integration::numbering::first_entry_in_empty_file_gets_number_one ... ok [INFO] [stdout] test integration::numbering::next_new_continues_past_hand_edited_gap ... ok [INFO] [stdout] test integration::new_flow::sequential_numbering ... ok [INFO] [stdout] test integration::numbering::new_after_large_existing_number_continues_correctly ... ok [INFO] [stdout] test integration::numbering::update_preserves_number_even_for_hand_edited_non_sequential_file ... ok [INFO] [stdout] test integration::numbering::numbering_is_per_section ... ok [INFO] [stdout] test integration::read_flow::read_last_n_returns_tail ... ok [INFO] [stdout] test integration::numbering::update_does_not_shift_subsequent_numbers ... ok [INFO] [stdout] test integration::read_flow::read_last_two ... ok [INFO] [stdout] test integration::read_flow::read_full_file ... ok [INFO] [stdout] test integration::read_flow::read_section_full ... ok [INFO] [stdout] test integration::read_flow::read_n_larger_than_count_returns_all ... ok [INFO] [stdout] test integration::read_flow::read_without_section_is_error ... ok [INFO] [stdout] test integration::read_flow::read_section_last_n ... ok [INFO] [stdout] test integration::read_flow::read_zero_returns_empty ... ok [INFO] [stdout] test integration::section_flow::hyphenated_section_names_work ... ok [INFO] [stdout] test integration::section_flow::section_creates_expected_path ... ok [INFO] [stdout] test integration::section_flow::multiple_sections_are_isolated ... ok [INFO] [stdout] test integration::move_flow::move_rejects_invalid_dest_section ... ok [INFO] [stdout] test integration::sections_flow::sections_lists_multiple_real_sections ... ok [INFO] [stdout] test integration::sections_flow::sections_on_empty_project_prints_nothing ... ok [INFO] [stdout] test integration::error_messages::parse_error_on_read_also_surfaces ... ok [INFO] [stdout] test integration::sections_flow::sections_prints_created_sections_alphabetically ... ok [INFO] [stdout] test integration::sections_flow::sections_reflects_added_sections_across_invocations ... ok [INFO] [stdout] test integration::update_flow::update_by_date_prefix_when_unique ... ok [INFO] [stdout] test integration::update_flow::update_by_number_replaces_text ... ok [INFO] [stdout] test integration::update_flow::update_by_exact_date ... ok [INFO] [stdout] test integration::new_flow::new_fails_on_invalid_section_name ... ok [INFO] [stdout] test integration::error_messages::uppercase_section_name_error ... ok [INFO] [stdout] test integration::list_flow::list_missing_section_errors ... ok [INFO] [stdout] test integration::update_flow::update_preserves_other_entries ... ok [INFO] [stdout] test integration::update_flow::update_preserves_entry_number_and_date ... ok [INFO] [stdout] test integration::update_flow::update_preserves_prose_between_entries ... ok [INFO] [stdout] test integration::update_flow::update_section_entry ... ok [INFO] [stdout] test integration::move_flow::move_same_section_errors ... ok [INFO] [stdout] test integration::move_flow::move_missing_source_errors ... ok [INFO] [stdout] test integration::error_messages::trailing_hyphen_section_name_error ... ok [INFO] [stdout] test integration::new_flow::new_reports_exhaustion_instead_of_overflowing_u32_max ... ok [INFO] [stdout] test integration::list_flow::list_section_on_missing_file_errors ... ok [INFO] [stdout] test integration::update_flow::update_missing_file_errors ... ok [INFO] [stdout] test integration::list_flow::list_rejects_invalid_section_name ... ok [INFO] [stdout] test integration::error_messages::read_fails_on_invalid_n_format ... ok [INFO] [stdout] test integration::move_flow::move_unknown_id_errors ... ok [INFO] [stdout] test integration::update_flow::update_nonexistent_number_errors ... ok [INFO] [stdout] test integration::read_flow::read_missing_file_errors ... ok [INFO] [stdout] test integration::sections_flow::sections_ignores_stray_directories ... ok [INFO] [stdout] test integration::update_flow::update_invalid_id_errors ... ok [INFO] [stdout] test integration::update_flow::update_rejects_invalid_section_name ... ok [INFO] [stdout] test integration::section_flow::section_name_validation_errors_on_every_command ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 133 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.60s [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Running tests/mcp.rs (/opt/rustwide/target/debug/deps/mcp-d8326aa231a791c6) [INFO] [stdout] running 171 tests [INFO] [stdout] test mcp::args_schema::arg_descriptions_travel_from_doc_comments_to_schema ... ok [INFO] [stdout] test mcp::args_schema::move_args_schema_requires_from_section_id_and_to_section ... ok [INFO] [stdout] test mcp::args_schema::new_args_schema_has_required_section_and_text ... ok [INFO] [stdout] test mcp::args_schema::list_args_schema_has_no_required_fields ... ok [INFO] [stdout] test mcp::args_schema::update_args_schema_requires_section_id_and_text ... ok [INFO] [stdout] test mcp::args_schema::read_args_schema_requires_only_section ... ok [INFO] [stdout] test mcp::args_schema::sections_args_schema_has_no_required_fields ... ok [INFO] [stdout] test mcp::convert_roundtrip::entry_json_has_number_date_text_and_line ... ok [INFO] [stdout] test mcp::convert_roundtrip::entry_json_serializes_to_expected_json_shape ... ok [INFO] [stdout] test mcp::convert_roundtrip::entries_to_json_preserves_input_order ... ok [INFO] [stdout] test mcp::convert_roundtrip::section_entries_json_serializes_as_object_with_section_and_entries ... ok [INFO] [stdout] test mcp::convert_roundtrip::owned_entry_into_entry_json_works ... ok [INFO] [stderr] 2026-07-09T18:33:08.326555Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.326664Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.327478Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::base_dir::default_base_accessor_returns_configured_path ... ok [INFO] [stdout] test mcp::base_dir::new_writes_to_default_base_when_override_omitted ... ok [INFO] [stderr] 2026-07-09T18:33:08.414809Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::base_dir::sections_honours_override_base_dir ... ok [INFO] [stderr] 2026-07-09T18:33:08.421702Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.422223Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::base_dir::new_honours_base_dir_override ... ok [INFO] [stdout] test mcp::base_dir::empty_string_base_dir_falls_back_to_default ... ok [INFO] [stderr] 2026-07-09T18:33:08.425332Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.427498Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.427621Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.428050Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::base_dir::list_reads_from_override_base_dir ... ok [INFO] [stdout] test mcp::concurrency::parallel_mixed_sections_do_not_interfere ... ok [INFO] [stdout] test mcp::concurrency::parallel_new_calls_produce_unique_contiguous_numbers ... ok [INFO] [stderr] 2026-07-09T18:33:08.434296Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.435240Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.435652Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.438450Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.441988Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.463791Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_errors::invalid_base_dir_override_read_is_tool_error ... ok [INFO] [stdout] test mcp::e2e_all_tools_errors::list_invalid_section_name_is_tool_error_over_wire ... ok [INFO] [stdout] test mcp::e2e_all_tools_errors::list_missing_section_is_tool_error_over_wire ... ok [INFO] [stderr] 2026-07-09T18:33:08.840788Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.845789Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.848697Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_errors::new_with_control_character_in_text_is_tool_error_over_wire ... ok [INFO] [stderr] 2026-07-09T18:33:08.927310Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.928763Z WARN rmcp::service: response error id=1 error=ErrorData { code: ErrorCode(-32602), message: "failed to deserialize parameters: missing field `text`", data: None } [INFO] [stdout] test mcp::e2e_all_tools_errors::missing_required_argument_surfaces_as_protocol_error ... ok [INFO] [stdout] test mcp::e2e_all_tools_errors::move_invalid_dest_section_is_tool_error_over_wire ... ok [INFO] [stdout] test mcp::e2e_all_tools_errors::new_with_empty_section_is_tool_error_over_wire ... ok [INFO] [stdout] test mcp::e2e_all_tools_errors::new_with_newline_in_text_is_tool_error_over_wire ... ok [INFO] [stdout] test mcp::e2e_all_tools_errors::move_to_same_section_is_tool_error_over_wire ... ok [INFO] [stdout] test mcp::e2e_all_tools_errors::new_with_uppercase_section_is_tool_error_over_wire ... ok [INFO] [stderr] 2026-07-09T18:33:08.939569Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.939594Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.941783Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.941776Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.942160Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_errors::read_missing_section_is_tool_error_over_wire ... ok [INFO] [stderr] 2026-07-09T18:33:08.950095Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_errors::update_missing_section_is_tool_error_over_wire ... ok [INFO] [stderr] 2026-07-09T18:33:08.953618Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_errors::new_with_oversized_text_is_tool_error_over_wire ... ok [INFO] [stderr] 2026-07-09T18:33:08.956077Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.956795Z WARN rmcp::service: response error id=1 error=ErrorData { code: ErrorCode(-32602), message: "tool not found", data: None } [INFO] [stdout] test mcp::e2e_all_tools_errors::move_missing_source_section_is_tool_error_over_wire ... ok [INFO] [stdout] test mcp::e2e_all_tools_errors::unknown_tool_name_surfaces_as_protocol_error ... ok [INFO] [stderr] 2026-07-09T18:33:08.962458Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.963238Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:08.965285Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_errors::new_with_digits_in_section_is_tool_error_over_wire ... ok [INFO] [stderr] 2026-07-09T18:33:08.974707Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_errors::update_rejects_multiline_replacement_over_wire ... ok [INFO] [stdout] test mcp::e2e_all_tools_errors::update_unknown_id_is_tool_error_over_wire ... ok [INFO] [stderr] 2026-07-09T18:33:09.355478Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_errors::update_with_oversized_text_is_tool_error_over_wire ... ok [INFO] [stderr] 2026-07-09T18:33:09.360625Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:09.431053Z WARN rmcp::service: response error id=1 error=ErrorData { code: ErrorCode(-32602), message: "failed to deserialize parameters: invalid type: integer `42`, expected a string", data: None } [INFO] [stdout] test mcp::e2e_all_tools_errors::wrong_argument_type_is_rejected_at_protocol_layer ... ok [INFO] [stdout] test mcp::e2e_all_tools_happy::devlog_new_over_wire_writes_and_returns_confirmation ... ok [INFO] [stdout] test mcp::e2e_binary_cli::help_flag_prints_usage_and_exits_zero ... ok [INFO] [stdout] test mcp::e2e_all_tools_happy::devlog_new_via_wire_with_explicit_base_dir_argument ... ok [INFO] [stdout] test mcp::e2e_binary_cli::version_flag_prints_crate_version ... ok [INFO] [stdout] test mcp::e2e_binary_cli::unknown_flag_exits_nonzero ... ok [INFO] [stdout] test mcp::e2e_all_tools_happy::devlog_list_without_section_over_wire_groups_by_section ... ok [INFO] [stdout] test mcp::e2e_all_tools_happy::devlog_list_with_section_over_wire_returns_ordered_entries ... ok [INFO] [stderr] 2026-07-09T18:33:09.463819Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:09.463907Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_happy::devlog_read_full_over_wire_returns_exact_file_bytes ... ok [INFO] [stdout] test mcp::e2e_all_tools_happy::devlog_move_over_wire_relocates_entry_and_preserves_date ... ok [INFO] [stderr] 2026-07-09T18:33:09.467887Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:09.469136Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:09.471492Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:09.471501Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_all_tools_happy::devlog_sections_over_wire_round_trips_alphabetical ... ok [INFO] [stdout] test mcp::e2e_binary_cli::short_help_flag_works ... ok [INFO] [stdout] test mcp::e2e_base_dir::list_override_reads_from_override_directory ... ok [INFO] [stdout] test mcp::e2e_all_tools_happy::devlog_read_last_n_over_wire_returns_entry_lines_only ... ok [INFO] [stderr] 2026-07-09T18:33:09.479836Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_base_dir::empty_string_base_dir_falls_back_to_default_over_wire ... ok [INFO] [stdout] test mcp::e2e_all_tools_happy::devlog_update_over_wire_preserves_number_and_date ... ok [INFO] [stdout] test mcp::e2e_base_dir::new_override_routes_write_to_override_directory ... ok [INFO] [stderr] 2026-07-09T18:33:09.490267Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:09.490797Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_base_dir::read_and_update_honour_override_base_dir ... ok [INFO] [stdout] test mcp::e2e_binary_cli::dir_flag_is_respected_by_server ... ok [INFO] [stderr] 2026-07-09T18:33:09.874538Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_base_dir::sections_override_reflects_override_layout ... ok [INFO] [stderr] 2026-07-09T18:33:09.878155Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:09.882201Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_handshake::initialize_completes_and_reports_crate_identity ... ok [INFO] [stderr] 2026-07-09T18:33:09.974250Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_handshake::initialize_completes_within_ten_seconds ... ok [INFO] [stdout] test mcp::e2e_handshake::server_instructions_are_non_empty_and_mention_every_tool ... ok [INFO] [stderr] 2026-07-09T18:33:09.983857Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:09.986837Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_inprocess_duplex::inprocess_handshake_and_tools_list_match_subprocess ... ok [INFO] [stdout] test mcp::e2e_inprocess_duplex::inprocess_tool_error_surfaces_as_wire_error ... ok [INFO] [stdout] test mcp::e2e_handshake::tools_list_exposes_the_full_devlog_surface ... ok [INFO] [stderr] 2026-07-09T18:33:09.994887Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:09.996350Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_inprocess_duplex::inprocess_full_tool_round_trip ... ok [INFO] [stderr] 2026-07-09T18:33:10.000356Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_large_payload::long_section_name_writes_and_reads_back ... ok [INFO] [stderr] 2026-07-09T18:33:10.005988Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:10.010090Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_concurrency::concurrent_mixed_tool_calls_do_not_cross_contaminate ... ok [INFO] [stderr] 2026-07-09T18:33:10.016149Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_concurrency::many_concurrent_new_calls_share_one_stdio_pipe ... ok [INFO] [stderr] 2026-07-09T18:33:10.027274Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_large_payload::multibyte_unicode_text_round_trips_intact ... ok [INFO] [stdout] test mcp::e2e_large_payload::single_max_length_entry_text_round_trips_intact ... ok [INFO] [stdout] test mcp::e2e_lifecycle::client_cancel_terminates_the_server_cleanly ... ok [INFO] [stdout] test mcp::e2e_lifecycle::initialize_and_list_tools_is_fast ... ok [INFO] [stderr] 2026-07-09T18:33:10.484724Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:10.491537Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_inprocess_duplex::inprocess_two_clients_with_separate_base_dirs_do_not_cross_contaminate ... ok [INFO] [stdout] test mcp::e2e_lifecycle::stdin_close_after_tool_call_exits_cleanly ... ok [INFO] [stderr] 2026-07-09T18:33:10.510759Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_lifecycle::server_survives_error_call_followed_by_valid_call ... ok [INFO] [stderr] 2026-07-09T18:33:10.514605Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:10.516585Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:10.518803Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_logging::log_file_does_not_contain_entry_text ... ok [INFO] [stderr] 2026-07-09T18:33:10.531939Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_logging::log_file_contains_tool_completion_records ... ok [INFO] [stdout] test mcp::e2e_logging::log_file_is_created_at_devlogger_log_dir ... ok [INFO] [stderr] 2026-07-09T18:33:10.544093Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stderr] 2026-07-09T18:33:10.546677Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_lifecycle::server_handles_rapid_sequential_calls_without_stalling ... ok [INFO] [stderr] 2026-07-09T18:33:10.597967Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_logging::concurrent_tool_calls_produce_intact_log_lines ... ok [INFO] [stdout] test mcp::e2e_lifecycle::session_survives_sustained_tool_call_volume ... ok [INFO] [stdout] test mcp::e2e_logging::server_does_not_crash_when_home_is_unset ... ok [INFO] [stdout] test mcp::e2e_logging::stdout_stays_clean_when_log_dir_is_unwritable ... ok [INFO] [stdout] test mcp::e2e_logging::server_does_not_crash_when_log_dir_is_unwritable ... ok [INFO] [stdout] test mcp::e2e_stdout_cleanliness::server_exits_cleanly_when_stdin_closes ... ok [INFO] [stdout] test mcp::e2e_large_payload::many_entries_round_trip_over_wire ... ok [INFO] [stdout] test mcp::e2e_timing::workaround_has_not_outlived_its_welcome ... ok [INFO] [stdout] test mcp::errors::consecutive_hyphens_section_is_tool_error ... ok [INFO] [stdout] test mcp::errors::digits_in_section_name_rejected ... ok [INFO] [stdout] test mcp::errors::empty_section_name_is_tool_error_not_protocol ... ok [INFO] [stdout] test mcp::errors::entry_text_with_cr_rejected ... ok [INFO] [stdout] test mcp::errors::entry_text_with_null_rejected ... ok [INFO] [stdout] test mcp::errors::leading_hyphen_section_is_tool_error ... ok [INFO] [stdout] test mcp::errors::list_missing_section_is_tool_error_not_protocol ... ok [INFO] [stdout] test mcp::errors::read_missing_file_is_tool_error_not_protocol ... ok [INFO] [stdout] test mcp::errors::tab_in_entry_text_is_allowed ... ok [INFO] [stdout] test mcp::errors::trailing_hyphen_section_is_tool_error ... ok [INFO] [stdout] test mcp::errors::underscore_in_section_name_rejected ... ok [INFO] [stdout] test mcp::errors::update_missing_file_is_tool_error_not_protocol ... ok [INFO] [stdout] test mcp::registration::default_base_is_exposed_on_the_server ... ok [INFO] [stdout] test mcp::registration::server_info_advertises_tools_capability ... ok [INFO] [stdout] test mcp::registration::server_info_has_instructions_mentioning_each_tool ... ok [INFO] [stdout] test mcp::registration::server_info_reports_crate_name_and_version ... ok [INFO] [stdout] test mcp::result_shape::list_all_sections_structured_is_grouped ... ok [INFO] [stdout] test mcp::result_shape::list_single_section_structured_is_object_with_entries ... ok [INFO] [stdout] test mcp::e2e_schemas::devlog_list_schema_has_no_required_fields ... ok [INFO] [stdout] test mcp::result_shape::new_result_has_both_text_and_structured ... ok [INFO] [stdout] test mcp::result_shape::read_structured_wraps_contents_in_object ... ok [INFO] [stdout] test mcp::result_shape::sections_structured_is_array_of_strings ... ok [INFO] [stdout] test mcp::result_shape::tool_errors_flip_is_error_and_still_carry_content ... ok [INFO] [stderr] 2026-07-09T18:33:11.001059Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::result_shape::structured_content_is_never_a_bare_array ... ok [INFO] [stdout] test mcp::result_shape::update_result_carries_full_entry_fields ... ok [INFO] [stdout] test mcp::tool_list::list_missing_section_is_tool_error ... ok [INFO] [stdout] test mcp::tool_list::list_rejects_invalid_section_name ... ok [INFO] [stdout] test mcp::tool_list::list_with_section_text_matches_entries ... ok [INFO] [stdout] test mcp::tool_list::list_without_section_and_no_sections_returns_empty_array ... ok [INFO] [stdout] test mcp::tool_list::list_single_section_returns_entries_in_order ... ok [INFO] [stdout] test mcp::tool_list::list_without_section_text_uses_bracket_prefix ... ok [INFO] [stdout] test mcp::tool_list::list_without_section_groups_by_section_alphabetically ... ok [INFO] [stdout] test mcp::tool_move::move_entry_appends_to_dest_when_newer_than_all_existing ... ok [INFO] [stdout] test mcp::tool_move::move_entry_by_exact_date_resolves_correctly ... ok [INFO] [stdout] test mcp::tool_move::move_entry_inserts_in_middle_renumbering_trailing_entries ... ok [INFO] [stdout] test mcp::e2e_schemas::devlog_move_schema_requires_from_section_id_to_section ... ok [INFO] [stdout] test mcp::tool_move::move_entry_prepends_to_dest_when_older_than_all_existing ... ok [INFO] [stdout] test mcp::tool_move::move_missing_source_section_is_tool_error ... ok [INFO] [stdout] test mcp::tool_move::move_entry_renumbers_source_without_holes ... ok [INFO] [stdout] test mcp::tool_move::move_entry_to_new_section_creates_it ... ok [INFO] [stdout] test mcp::e2e_schemas::devlog_new_schema_required_section_and_text ... ok [INFO] [stdout] test mcp::tool_move::move_rejects_invalid_section_name_as_tool_error ... ok [INFO] [stdout] test mcp::e2e_schemas::devlog_read_schema_requires_only_section ... ok [INFO] [stdout] test mcp::tool_move::move_preserves_prose_in_both_sections ... ok [INFO] [stdout] test mcp::tool_move::move_preserves_original_date_on_moved_entry ... ok [INFO] [stdout] test mcp::tool_move::move_to_same_section_is_tool_error ... ok [INFO] [stdout] test mcp::e2e_lifecycle::two_independent_server_processes_do_not_share_state ... ok [INFO] [stdout] test mcp::tool_move::move_unknown_id_is_tool_error ... ok [INFO] [stdout] test mcp::tool_new::new_entry_creates_file_and_returns_success_message ... ok [INFO] [stdout] test mcp::tool_new::new_entry_rejects_invalid_section_as_tool_error ... ok [INFO] [stdout] test mcp::tool_new::new_entry_rejects_multiline_text_as_tool_error ... ok [INFO] [stdout] test mcp::tool_new::new_entry_increments_number_on_successive_calls ... ok [INFO] [stdout] test mcp::tool_new::new_entry_writes_the_entry_to_disk ... ok [INFO] [stdout] test mcp::tool_new::new_entry_structured_content_has_number_date_and_message_only ... ok [INFO] [stdout] test mcp::tool_new::new_entry_creates_independent_sections ... ok [INFO] [stdout] test mcp::tool_read::read_invalid_section_name_is_tool_error ... ok [INFO] [stdout] test mcp::tool_read::read_missing_section_is_tool_error ... ok [INFO] [stdout] test mcp::tool_sections::sections_empty_base_returns_empty_array ... ok [INFO] [stdout] test mcp::tool_read::read_entire_file_returns_full_contents ... ok [INFO] [stdout] test mcp::tool_read::read_n_larger_than_total_returns_all_entries ... ok [INFO] [stdout] test mcp::e2e_schemas::devlog_sections_schema_has_only_optional_base_dir ... ok [INFO] [stdout] test mcp::tool_sections::sections_ignores_invalidly_named_directories ... ok [INFO] [stdout] test mcp::tool_read::read_last_n_returns_only_entry_lines ... ok [INFO] [stdout] test mcp::tool_sections::sections_ignores_section_dirs_without_a_devlog_file ... ok [INFO] [stdout] test mcp::tool_update::update_missing_section_is_tool_error ... ok [INFO] [stdout] test mcp::tool_sections::sections_text_is_one_name_per_line ... ok [INFO] [stdout] test mcp::tool_update::update_by_exact_date_targets_the_matching_entry ... ok [INFO] [stdout] test mcp::tool_update::update_by_number_replaces_text_and_preserves_id_and_date ... ok [INFO] [stdout] test mcp::tool_update::update_by_date_prefix_when_unique ... ok [INFO] [stdout] test mcp::tool_update::update_rejects_multiline_replacement ... ok [INFO] [stdout] test mcp::tool_sections::sections_returns_sorted_unique_names ... ok [INFO] [stdout] test mcp::tool_update::update_preserves_number_and_date_exactly ... ok [INFO] [stdout] test mcp::tool_update::update_unknown_id_is_tool_error ... ok [INFO] [stdout] test mcp::tool_update::update_unknown_number_is_tool_error ... ok [INFO] [stdout] test mcp::e2e_schemas::every_schema_declares_type_object ... ok [INFO] [stdout] test mcp::e2e_schemas::devlog_update_schema_requires_section_id_text ... ok [INFO] [stdout] test mcp::e2e_schemas::every_tool_has_non_empty_description ... ok [INFO] [stdout] test mcp::e2e_stdout_cleanliness::default_startup_has_no_banner_on_stderr ... ok [INFO] [stdout] test mcp::e2e_stdout_cleanliness::every_line_on_stdout_is_a_valid_jsonrpc_frame_even_with_rust_log_trace ... ok [INFO] [stdout] test mcp::e2e_stdout_cleanliness::startup_log_goes_to_stderr_not_stdout_when_enabled ... ok [INFO] [stdout] test mcp::e2e_timing::initialize_and_tools_list_complete_in_milliseconds ... ok [INFO] [stdout] test mcp::e2e_timing::every_tool_call_completes_in_milliseconds ... ok [INFO] [stderr] 2026-07-09T18:33:11.507572Z WARN devlogger::mcp::claude_code_race_workaround: applying claude-code initialize-race workaround — delete src/mcp/claude_code_race_workaround.rs when upstream is fixed delay_ms=500 review_by="2026-07-20" upstream="anthropics/claude-code#50095, #43299, #40207" [INFO] [stdout] test mcp::e2e_handshake::repeated_initialize_cycles_leave_no_leftover_state ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 171 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.72s [INFO] [stdout] [INFO] [stderr] Running tests/unit_tests.rs (/opt/rustwide/target/debug/deps/unit_tests-ddc7e022246c7b92) [INFO] [stdout] [INFO] [stdout] running 100 tests [INFO] [stdout] test unit_tests::dst_round_trip::unambiguous_date_still_parses_as_before ... ok [INFO] [stdout] test unit_tests::dst_round_trip::ambiguous_dst_fallback_date_parses_cleanly ... ok [INFO] [stdout] test unit_tests::entry_formatter::round_trip_entry_to_line_and_back ... ok [INFO] [stdout] test unit_tests::entry_formatter::round_trip_with_max_u32_number ... ok [INFO] [stdout] test unit_tests::entry_formatter::round_trip_with_pipes_and_colons_in_text ... ok [INFO] [stdout] test unit_tests::entry_formatter::round_trip_with_tab_in_text ... ok [INFO] [stdout] test unit_tests::entry_formatter::round_trip_with_empty_text ... ok [INFO] [stdout] test unit_tests::entry_formatter::to_line_matches_canonical_format ... ok [INFO] [stdout] test unit_tests::entry_formatter::to_line_preserves_entry_text_verbatim ... ok [INFO] [stdout] test unit_tests::entry_formatter::round_trip_with_unicode_text ... ok [INFO] [stdout] test unit_tests::entry_formatter::to_line_preserves_large_numbers ... ok [INFO] [stdout] test unit_tests::entry_formatter::to_line_preserves_leading_zeroes_in_date ... ok [INFO] [stdout] test unit_tests::entry_parser::empty_file_yields_no_entries ... ok [INFO] [stdout] test unit_tests::entry_parser::entry_text_may_contain_colons_and_pipes ... ok [INFO] [stdout] test unit_tests::entry_parser::line_without_space_after_dash_is_not_an_entry ... ok [INFO] [stdout] test unit_tests::entry_parser::ignores_non_entry_lines ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_bad_date ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_bad_number ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_does_not_dump_file_contents ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_does_not_include_the_raw_line ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_includes_file_path ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_counts_non_entry_lines ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_negative_number ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_on_dash_space_only ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_on_decimal_number ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_on_number_overflow ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_partial_date ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_reports_correct_line_number ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_file_path_is_preserved_through_error_chain ... ok [INFO] [stdout] test unit_tests::entry_parser::parses_entry_with_empty_text ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_missing_colon_space ... ok [INFO] [stdout] test unit_tests::entry_parser::parses_file_with_mixed_terminators ... ok [INFO] [stdout] test unit_tests::entry_text_validation::accepts_punctuation_and_symbols ... ok [INFO] [stdout] test unit_tests::entry_parser::parses_entry_with_trailing_whitespace_in_text ... ok [INFO] [stdout] test unit_tests::entry_parser::parses_file_with_crlf_terminators ... ok [INFO] [stdout] test unit_tests::entry_text_validation::accepts_unicode ... ok [INFO] [stdout] test unit_tests::entry_text_validation::rejects_carriage_return ... ok [INFO] [stdout] test unit_tests::entry_parser::parses_large_numbers ... ok [INFO] [stdout] test unit_tests::entry_parser::parse_error_missing_pipe ... ok [INFO] [stdout] test unit_tests::entry_parser::parses_single_entry ... ok [INFO] [stdout] test unit_tests::entry_parser::parses_multiple_entries_in_order ... ok [INFO] [stdout] test unit_tests::entry_text_validation::accepts_empty_text ... ok [INFO] [stdout] test unit_tests::entry_text_validation::accepts_text_just_under_limit ... ok [INFO] [stdout] test unit_tests::entry_text_validation::rejects_control_characters ... ok [INFO] [stdout] test unit_tests::entry_text_validation::rejects_newline_at_end ... ok [INFO] [stdout] test unit_tests::entry_text_validation::rejects_crlf ... ok [INFO] [stdout] test unit_tests::entry_text_validation::rejects_newline_lf ... ok [INFO] [stdout] test unit_tests::entry_text_validation::accepts_plain_ascii ... ok [INFO] [stdout] test unit_tests::entry_parser::plain_dash_line_ignored_as_prose ... ok [INFO] [stdout] test unit_tests::entry_text_validation::accepts_tab ... ok [INFO] [stdout] test unit_tests::entry_text_validation::rejects_newline_at_start ... ok [INFO] [stdout] test unit_tests::entry_truncation::cjk_line_truncated_to_at_most_80_display_cols ... ok [INFO] [stdout] test unit_tests::entry_truncation::digit_count_in_suffix_grows_with_elided_size ... ok [INFO] [stdout] test unit_tests::entry_text_validation::rejects_null_byte ... ok [INFO] [stdout] test unit_tests::entry_truncation::entry_to_line_truncated_wraps_to_line ... ok [INFO] [stdout] test unit_tests::entry_text_validation::rejects_text_one_column_over_limit ... ok [INFO] [stdout] test unit_tests::entry_text_validation::accepts_text_at_exact_limit ... ok [INFO] [stdout] test unit_tests::entry_truncation::emoji_line_truncated_cleanly_to_display_width ... ok [INFO] [stdout] test unit_tests::entry_truncation::entry_short_text_is_not_truncated ... ok [INFO] [stdout] test unit_tests::entry_truncation::line_one_over_max_is_truncated_with_suffix ... ok [INFO] [stdout] test unit_tests::entry_truncation::mixed_ascii_and_wide_respects_column_budget ... ok [INFO] [stdout] test unit_tests::entry_text_validation::wide_glyphs_count_as_two_columns_for_length_limit ... ok [INFO] [stdout] test unit_tests::entry_truncation::short_line_passes_through_unchanged ... ok [INFO] [stdout] test unit_tests::entry_truncation::very_long_line_reports_correct_elided_count_in_chars ... ok [INFO] [stdout] test unit_tests::entry_truncation::line_exactly_at_max_passes_through_unchanged ... ok [INFO] [stdout] test unit_tests::line_ending_detection::empty_string_defaults_to_lf ... ok [INFO] [stdout] test unit_tests::line_ending_detection::no_terminator_defaults_to_lf ... ok [INFO] [stdout] test unit_tests::line_ending_detection::first_terminator_wins_when_mixed_lf_first ... ok [INFO] [stdout] test unit_tests::line_ending_detection::lone_cr_is_not_crlf ... ok [INFO] [stdout] test unit_tests::line_ending_detection::pure_lf_file_detected_as_lf ... ok [INFO] [stdout] test unit_tests::line_ending_detection::single_trailing_crlf_detected_as_crlf ... ok [INFO] [stdout] test unit_tests::line_ending_detection::single_trailing_lf_detected_as_lf ... ok [INFO] [stdout] test unit_tests::section_validation::accepts_hyphenated_word ... ok [INFO] [stdout] test unit_tests::line_ending_detection::first_terminator_wins_when_mixed_crlf_first ... ok [INFO] [stdout] test unit_tests::line_ending_detection::pure_crlf_file_detected_as_crlf ... ok [INFO] [stdout] test unit_tests::section_validation::accepts_multi_hyphenated_word ... ok [INFO] [stdout] test unit_tests::section_validation::accepts_simple_word ... ok [INFO] [stdout] test unit_tests::section_validation::accepts_single_letter ... ok [INFO] [stdout] test unit_tests::section_validation::error_quotes_the_bad_name ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_bare_digit_five ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_any_uppercase ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_digits_in_name ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_consecutive_hyphens ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_leading_hyphen ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_non_ascii_letters ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_empty ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_path_separators ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_only_hyphen ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_trailing_hyphen ... ok [INFO] [stdout] test unit_tests::store_paths::load_entries_returns_empty_for_missing_file ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_triple_hyphen ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_whitespace ... ok [INFO] [stdout] test unit_tests::store_paths::load_entries_reads_well_formed_file ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_uppercase ... ok [INFO] [stdout] test unit_tests::section_validation::rejects_underscore ... ok [INFO] [stdout] test unit_tests::store_locking::lock_path_is_sidecar_in_same_dir_for_section ... ok [INFO] [stdout] test unit_tests::store_paths::section_path_nests_section_name_twice ... ok [INFO] [stdout] test unit_tests::store_paths::section_path_uses_section_name_verbatim ... ok [INFO] [stdout] test unit_tests::store_locking::acquire_lock_creates_lockfile_and_parent_dir ... ok [INFO] [stdout] test unit_tests::store_locking::second_acquire_blocks_until_first_released ... ok [INFO] [stderr] Doc-tests devlogger [INFO] [stdout] [INFO] [stdout] test result: ok. 100 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3", kill_on_drop: false }` [INFO] [stdout] 3e4b9420e1547d1b4ff7c918b8922c524a984cd868c63595603d712f598d50c3