[INFO] fetching crate cookcli-core 0.38.1...
[INFO] testing cookcli-core-0.38.1 against 1.100.0-beta.1+cargoflags=--release for beta-release-1.100-2
[INFO] extracting crate cookcli-core 0.38.1 into /workspace/builds/worker-2-tc2/source
[INFO] started tweaking crates.io crate cookcli-core 0.38.1
[INFO] finished tweaking crates.io crate cookcli-core 0.38.1
[INFO] tweaked toml for crates.io crate cookcli-core 0.38.1 written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate cookcli-core 0.38.1 on toolchain 1.100.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate cookcli-core 0.38.1 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.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-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f
[INFO] running `Command { std: "docker" "start" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f", 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" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f", 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" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling thiserror v2.0.21
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling syn v2.0.118
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling vte_generate_state_changes v0.1.2
[INFO] [stderr]    Compiling yansi v1.0.1
[INFO] [stderr]    Compiling arrayvec v0.5.2
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling finl_unicode v1.4.0
[INFO] [stderr]    Compiling codesnake v0.2.1
[INFO] [stderr]    Compiling memo-map v0.3.3
[INFO] [stderr]    Compiling smawk v0.3.3
[INFO] [stderr]    Compiling unicode-linebreak v0.1.5
[INFO] [stderr]    Compiling winnow v1.0.4
[INFO] [stderr]    Compiling anstyle-yansi v2.0.4
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling toml_writer v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling humantime v2.4.0
[INFO] [stderr]    Compiling chrono v0.4.45
[INFO] [stderr]    Compiling vte v0.10.1
[INFO] [stderr]    Compiling directories v6.0.0
[INFO] [stderr]    Compiling regex-automata v0.4.18
[INFO] [stderr]    Compiling strip-ansi-escapes v0.1.1
[INFO] [stderr]    Compiling tabular v0.2.0
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling bitflags v2.13.0
[INFO] [stderr]    Compiling camino v1.2.6
[INFO] [stderr]    Compiling toml_parser v1.1.3+spec-1.1.0
[INFO] [stderr]    Compiling toml_edit v0.25.15+spec-1.1.0
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling thiserror-impl v2.0.21
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling terminal_size v0.4.4
[INFO] [stderr]    Compiling textwrap v0.16.2
[INFO] [stderr]    Compiling regex v1.13.1
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling enum-map-derive v0.17.0
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling cooklang v0.19.0
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling enum-map v2.7.3
[INFO] [stderr]    Compiling minijinja v2.21.0
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling yaml-datastore v0.1.0
[INFO] [stderr]    Compiling cooklang-find v0.6.1
[INFO] [stderr]    Compiling cooklang-find v0.10.0
[INFO] [stderr]    Compiling cooklang-format v0.38.1
[INFO] [stderr]    Compiling cooklang-reports v0.6.0
[INFO] [stderr]    Compiling cookcli-core v0.38.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 1m 27s
[INFO] running `Command { std: "docker" "inspect" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f", 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" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling terminal_size v0.4.4
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling textwrap v0.16.2
[INFO] [stderr]    Compiling cooklang-format v0.38.1
[INFO] [stderr]    Compiling cookcli-core v0.38.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 23.63s
[INFO] running `Command { std: "docker" "inspect" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f", 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" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.12s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/build/cookcli-core/ee084db02a28fc35/out/cookcli_core-ee084db02a28fc35)
[INFO] [stdout] 
[INFO] [stdout] running 403 tests
[INFO] [stdout] test context::tests::a_non_utf8_config_dir_env_is_an_error ... ok
[INFO] [stdout] test context::tests::an_empty_config_dir_env_falls_back_to_the_platform_directory ... ok
[INFO] [stdout] test context::tests::config_dir_env_leaves_nothing_of_the_platform_directory ... ok
[INFO] [stdout] test context::tests::config_dir_env_replaces_the_platform_directory ... ok
[INFO] [stdout] test context::tests::absent_everywhere_is_unset ... ok
[INFO] [stdout] test context::tests::global_config_path_joins_the_app_name ... ok
[INFO] [stdout] test context::tests::a_config_dir_env_aisle_is_discoverable ... ok
[INFO] [stdout] test context::tests::with_aisle_overrides ... ok
[INFO] [stdout] test context::tests::with_pantry_overrides ... ok
[INFO] [stdout] test diagnostic::tests::at_file_attaches_location ... ok
[INFO] [stdout] test diagnostic::tests::at_file_preserves_an_existing_span ... ok
[INFO] [stdout] test context::tests::discover_finds_local_config ... ok
[INFO] [stdout] test context::tests::global_config_is_used_when_there_is_no_local_one ... ok
[INFO] [stdout] test diagnostic::tests::hint_constructor_sets_severity ... ok
[INFO] [stdout] test diagnostic::tests::omitted_fields_deserialize_back_to_none ... ok
[INFO] [stdout] test diagnostic::tests::hints_roundtrip_and_are_omitted_when_empty ... ok
[INFO] [stdout] test diagnostic::tests::one_line_keeps_every_part_of_a_multi_line_message ... ok
[INFO] [stdout] test diagnostic::tests::parse_failure_falls_back_to_naming_the_configuration ... ok
[INFO] [stdout] test diagnostic::tests::parse_failure_keeps_every_error_and_drops_the_rest ... ok
[INFO] [stdout] test context::tests::new_touches_nothing ... ok
[INFO] [stdout] test diagnostic::tests::serializes_without_null_location ... ok
[INFO] [stdout] test diagnostic::tests::serializes_a_full_location_with_a_named_span ... ok
[INFO] [stdout] test context::tests::local_config_wins_over_global ... ok
[INFO] [stdout] test diagnostic::tests::span_converts_from_a_range ... ok
[INFO] [stdout] test diagnostic::tests::warning_constructor_sets_severity ... ok
[INFO] [stdout] test doctor::tests::a_configuration_that_cannot_be_read_is_reported ... ok
[INFO] [stdout] test doctor::tests::a_listing_failure_names_the_file_rather_than_the_root ... ok
[INFO] [stdout] test doctor::tests::a_clean_collection_has_no_diagnostics_at_all ... ok
[INFO] [stdout] test doctor::tests::a_collection_full_of_errors_still_validates_successfully ... ok
[INFO] [stdout] test doctor::tests::a_collection_with_no_references_has_none_broken ... ok
[INFO] [stdout] test doctor::tests::a_collection_whose_references_all_resolve_reports_none ... ok
[INFO] [stdout] test doctor::tests::a_configuration_warning_is_located_in_the_file_it_came_from ... ok
[INFO] [stdout] test doctor::tests::a_coverage_base_dir_overrides_the_context_base_path ... ok
[INFO] [stdout] test doctor::tests::a_clean_recipe_carries_neither_diagnostics_nor_a_rendered_report ... ok
[INFO] [stdout] test doctor::tests::a_path_under_the_root_is_stripped_and_one_outside_is_left_alone ... ok
[INFO] [stdout] test doctor::tests::a_numeric_range_is_not_a_warning ... ok
[INFO] [stdout] test doctor::tests::a_pantry_item_that_has_run_out_still_counts_as_known ... ok
[INFO] [stdout] test doctor::tests::a_pantry_that_cannot_be_parsed_at_all_is_reported_as_pantry_load_reports_it ... ok
[INFO] [stdout] test doctor::tests::a_failing_recipe_carries_both_diagnostics_and_a_rendered_report ... ok
[INFO] [stdout] test doctor::tests::a_pantry_knows_its_items_from_every_section ... ok
[INFO] [stdout] test doctor::tests::a_non_ascii_name_is_matched_ignoring_case_too ... ok
[INFO] [stdout] test doctor::tests::a_root_that_is_a_file_is_reported ... ok
[INFO] [stdout] test doctor::tests::a_file_that_cannot_be_read_is_one_error_and_does_not_end_the_walk ... ok
[INFO] [stdout] test doctor::tests::a_recipe_with_errors_contributes_no_references ... ok
[INFO] [stdout] test doctor::tests::a_recipe_that_cannot_be_parsed_is_counted_but_contributes_nothing ... ok
[INFO] [stdout] test doctor::tests::a_mixed_collection_still_reports_every_recipe ... ok
[INFO] [stdout] test doctor::tests::a_textual_timer_quantity_is_a_warning_in_either_shape ... ok
[INFO] [stdout] test doctor::tests::a_recipe_using_an_ingredient_twice_is_listed_once ... ok
[INFO] [stdout] test doctor::tests::a_root_that_is_not_a_valid_glob_pattern_is_reported ... ok
[INFO] [stdout] test doctor::tests::a_warning_in_the_aisle_configuration_comes_back_as_a_diagnostic ... ok
[INFO] [stdout] test doctor::tests::a_root_that_does_not_exist_is_reported_by_a_coverage_check ... ok
[INFO] [stdout] test doctor::tests::an_aisle_splits_the_collection_into_categorised_and_not ... ok
[INFO] [stdout] test doctor::tests::an_aisle_synonym_counts_as_knowing_the_ingredient ... ok
[INFO] [stdout] test doctor::tests::a_root_that_does_not_exist_is_reported ... ok
[INFO] [stdout] test doctor::tests::a_reference_repeated_is_reported_once_per_mention ... ok
[INFO] [stdout] test doctor::tests::a_reference_made_twice_is_listed_twice ... ok
[INFO] [stdout] test doctor::tests::a_warning_is_reported_as_a_warning_not_an_error ... ok
[INFO] [stdout] test doctor::tests::ingredient_quantities_follow_the_shared_parser ... ok
[INFO] [stdout] test doctor::tests::an_empty_collection_covers_nothing ... ok
[INFO] [stdout] test doctor::tests::every_recipe_under_the_root_is_scanned_including_nested_ones ... ok
[INFO] [stdout] test doctor::tests::a_warning_in_the_pantry_configuration_comes_back_as_a_diagnostic ... ok
[INFO] [stdout] test doctor::tests::numeric_timers_stay_valid_beside_a_textual_ingredient ... ok
[INFO] [stdout] test doctor::tests::an_ingredient_carries_every_recipe_that_writes_it ... ok
[INFO] [stdout] test doctor::tests::names_are_matched_ignoring_case_and_reported_as_the_recipe_writes_them ... ok
[INFO] [stdout] test doctor::tests::an_empty_directory_validates_to_an_empty_report ... ok
[INFO] [stdout] test doctor::tests::the_default_style_is_plain ... ok
[INFO] [stdout] test doctor::tests::each_spelling_keeps_its_own_recipes ... ok
[INFO] [stdout] test doctor::tests::the_shared_parser_still_accepts_a_textual_timer ... ok
[INFO] [stdout] test doctor::tests::only_references_that_resolve_to_nothing_are_reported ... ok
[INFO] [stdout] test doctor::tests::references_resolve_against_the_validated_root_from_anywhere_in_it ... ok
[INFO] [stdout] test doctor::tests::every_recipe_under_the_root_is_reported_including_nested_ones ... ok
[INFO] [stdout] test doctor::tests::the_rendered_warning_names_its_file_and_line ... ok
[INFO] [stdout] test doctor::tests::references_are_collected_as_they_are_written ... ok
[INFO] [stdout] test doctor::tests::references_to_other_recipes_are_not_ingredients ... ok
[INFO] [stdout] test doctor::tests::base_dir_overrides_the_context_base_path ... ok
[INFO] [stdout] test doctor::tests::the_two_views_partition_the_ingredients ... ok
[INFO] [stdout] test doctor::tests::the_reference_map_holds_only_recipes_that_reference_something ... ok
[INFO] [stdout] test doctor::tests::timer_edges_follow_the_shared_parser ... ok
[INFO] [stdout] test doctor::tests::the_span_covers_the_timer_value ... ok
[INFO] [stdout] test doctor::tests::the_report_records_the_root_it_was_validated_against ... ok
[INFO] [stdout] test doctor::tests::totals_count_diagnostics_and_the_recipes_carrying_them ... ok
[INFO] [stdout] test doctor::tests::style_decides_whether_the_rendered_report_is_coloured ... ok
[INFO] [stdout] test error::tests::config_display_covers_both_path_and_inline ... ok
[INFO] [stdout] test doctor::tests::ingredients_come_back_in_code_point_order_every_time ... ok
[INFO] [stdout] test error::tests::parse_keeps_the_rendered_report_out_of_display ... ok
[INFO] [stdout] test error::tests::io_display_names_the_path ... ok
[INFO] [stdout] test error::tests::every_display_is_a_single_line ... ok
[INFO] [stdout] test error::tests::render_keeps_the_rendered_report_out_of_display ... ok
[INFO] [stdout] test find::tests::a_dot_in_front_of_a_step_up_does_not_re_anchor_it ... ok
[INFO] [stdout] test find::tests::a_reference_climbing_above_the_root_resolves_to_nothing ... ok
[INFO] [stdout] test doctor::tests::two_spellings_of_one_ingredient_are_both_listed ... ok
[INFO] [stdout] test find::tests::a_directory_named_like_a_recipe_is_an_io_error ... ok
[INFO] [stdout] test doctor::tests::the_pantry_check_lists_recipes_as_well ... ok
[INFO] [stdout] test find::tests::a_reference_naming_something_outside_the_collection_resolves_to_nothing ... ok
[INFO] [stdout] test find::tests::a_reference_that_steps_up_does_so_from_the_writer ... ok
[INFO] [stdout] test doctor::tests::without_a_configuration_nothing_is_known ... ok
[INFO] [stdout] test find::tests::backslashes_in_a_reference_are_separators ... ok
[INFO] [stdout] test find::tests::only_a_missing_file_maps_to_recipe_not_found ... ok
[INFO] [stdout] test find::tests::a_leading_dot_slash_is_stripped_from_nested_paths ... ok
[INFO] [stdout] test find::tests::entry_errors_keep_their_io_kind_and_never_lose_their_message ... ok
[INFO] [stdout] test find::tests::plain_relative_paths_are_safe ... ok
[INFO] [stdout] test find::tests::paths_that_leave_the_directory_are_not_safe ... ok
[INFO] [stdout] test find::tests::the_result_is_normalised ... ok
[INFO] [stdout] test find::tests::a_missing_recipe_is_not_found ... ok
[INFO] [stdout] test doctor::tests::without_a_base_dir_the_context_base_path_is_validated ... ok
[INFO] [stdout] test find::tests::finds_a_recipe_by_name_path_and_extension ... ok
[INFO] [stdout] test find::tests::a_reference_that_does_not_step_up_is_read_from_the_root ... ok
[INFO] [stdout] test outcome::tests::has_errors_detects_error_severity ... ok
[INFO] [stdout] test format::shopping_list::tests::plain_style_is_ansi_with_the_escapes_removed ... ok
[INFO] [stdout] test format::shopping_list::tests::markdown_headings_and_quantities_follow_the_flags ... ok
[INFO] [stdout] test pantry::edit::tests::a_general_item_is_written_short_form_at_the_top ... ok
[INFO] [stdout] test pantry::edit::tests::a_section_header_is_not_an_item_of_general ... ok
[INFO] [stdout] test format::shopping_list::tests::the_human_table_groups_by_category_unless_plain ... ok
[INFO] [stdout] test outcome::tests::into_value_discards_diagnostics ... ok
[INFO] [stdout] test format::shopping_list::tests::plain_json_and_plain_yaml_describe_the_same_document ... ok
[INFO] [stdout] test doctor::tests::recipes_come_back_in_path_order_every_time ... ok
[INFO] [stdout] test outcome::tests::new_has_no_diagnostics ... ok
[INFO] [stdout] test pantry::edit::tests::a_new_section_is_created_for_a_new_item ... ok
[INFO] [stdout] test pantry::edit::tests::a_short_form_item_grows_attributes_when_one_is_set ... ok
[INFO] [stdout] test format::shopping_list::tests::json_is_categorised_unless_plain ... ok
[INFO] [stdout] test pantry::edit::tests::a_top_level_item_with_attributes_is_untouched_by_an_unrelated_edit ... ok
[INFO] [stdout] test format::shopping_list::tests::optional_items_are_marked_in_every_format ... ok
[INFO] [stdout] test pantry::edit::tests::an_update_keeps_attributes_it_does_not_know ... ok
[INFO] [stdout] test pantry::edit::tests::an_item_with_no_attributes_is_written_with_an_empty_quantity ... ok
[INFO] [stdout] test format::shopping_list::tests::yaml_is_categorised_unless_plain ... ok
[INFO] [stdout] test pantry::edit::tests::comments_and_blank_lines_survive_a_removal ... ok
[INFO] [stdout] test pantry::edit::tests::removing_the_last_item_removes_the_section ... ok
[INFO] [stdout] test pantry::edit::tests::an_update_refuses_a_value_it_cannot_interpret ... ok
[INFO] [stdout] test pantry::edit::tests::a_short_form_item_stays_short_when_only_the_quantity_changes ... ok
[INFO] [stdout] test pantry::tests::a_collection_that_cannot_be_walked_fails_the_plan ... ok
[INFO] [stdout] test pantry::tests::a_collection_that_cannot_be_walked_is_reported ... ok
[INFO] [stdout] test format::shopping_list::tests::quantities_that_do_not_convert_are_listed_side_by_side_in_one_order ... ok
[INFO] [stdout] test pantry::tests::a_dash_prefixed_ingredient_is_wanted_like_any_other ... ok
[INFO] [stdout] test pantry::tests::a_diagnostic_from_a_pantry_file_points_at_that_file ... ok
[INFO] [stdout] test pantry::tests::a_general_add_with_attributes_is_refused ... ok
[INFO] [stdout] test pantry::tests::a_name_that_is_not_a_bare_toml_key_has_to_be_quoted ... ok
[INFO] [stdout] test pantry::tests::a_general_item_cannot_be_given_an_attribute_it_has_no_room_for ... ok
[INFO] [stdout] test pantry::tests::a_pantry_file_that_cannot_be_read_is_an_io_error_naming_it ... ok
[INFO] [stdout] test pantry::tests::a_pantry_that_cannot_be_parsed_stops_a_change ... ok
[INFO] [stdout] test pantry::tests::a_section_filter_keeps_only_that_section_whatever_its_case ... ok
[INFO] [stdout] test pantry::tests::a_section_filter_matching_nothing_lists_nothing_rather_than_failing ... ok
[INFO] [stdout] test pantry::tests::a_window_wider_than_the_calendar_returns_everything_instead_of_panicking ... ok
[INFO] [stdout] test pantry::tests::a_reference_to_another_recipe_is_not_counted ... ok
[INFO] [stdout] test pantry::tests::a_recipe_matches_fully_when_every_ingredient_is_in_stock ... ok
[INFO] [stdout] test pantry::tests::a_recipe_that_lists_no_ingredients_matches_nothing ... ok
[INFO] [stdout] test pantry::tests::a_partly_stocked_recipe_is_reported_with_what_is_missing ... ok
[INFO] [stdout] test pantry::tests::a_threshold_in_other_units_falls_back_to_the_built_in_rules ... ok
[INFO] [stdout] test fs_atomic::tests::replaces_an_existing_file_wholesale ... ok
[INFO] [stdout] test fs_atomic::tests::writes_bytes_and_leaves_nothing_behind ... ok
[INFO] [stdout] test fs_atomic::tests::a_failure_after_the_temporary_file_exists_still_removes_it ... ok
[INFO] [stdout] test pantry::tests::a_bare_general_item_comes_back_with_an_empty_quantity ... ok
[INFO] [stdout] test pantry::tests::a_change_returns_the_pantry_it_wrote ... ok
[INFO] [stdout] test pantry::tests::a_general_item_quantity_can_be_updated ... ok
[INFO] [stdout] test pantry::tests::a_failed_write_leaves_the_pantry_untouched ... FAILED
[INFO] [stdout] test pantry::tests::a_write_keeps_a_non_string_attribute ... ok
[INFO] [stdout] test pantry::tests::a_section_written_as_an_array_comes_back_as_a_table ... ok
[INFO] [stdout] test pantry::tests::add_refuses_a_blank_section_or_name ... ok
[INFO] [stdout] test pantry::tests::add_refuses_an_item_the_section_already_holds ... ok
[INFO] [stdout] test pantry::tests::a_write_keeps_attributes_cooklang_does_not_model ... ok
[INFO] [stdout] test pantry::tests::a_write_follows_a_symlinked_pantry ... ok
[INFO] [stdout] test pantry::tests::a_write_keeps_non_ascii_names ... ok
[INFO] [stdout] test pantry::tests::a_write_keeps_comments_and_layout ... ok
[INFO] [stdout] test pantry::tests::all_does_not_mean_every_item ... ok
[INFO] [stdout] test pantry::tests::allow_missing_counts_a_recipe_before_it_is_fully_covered ... ok
[INFO] [stdout] test pantry::tests::an_empty_collection_plans_nothing ... ok
[INFO] [stdout] test pantry::tests::an_explicit_threshold_in_matching_units_decides_on_its_own ... ok
[INFO] [stdout] test pantry::tests::an_ingredient_also_used_optionally_is_still_wanted ... ok
[INFO] [stdout] test pantry::tests::an_unparseable_pantry_is_an_error_that_names_the_file_and_the_cause ... ok
[INFO] [stdout] test pantry::tests::an_unparseable_recipe_is_skipped_with_a_warning ... ok
[INFO] [stdout] test pantry::tests::a_write_keeps_the_pantry_file_permissions ... ok
[INFO] [stdout] test pantry::tests::a_write_keeps_section_and_item_order ... ok
[INFO] [stdout] test pantry::tests::dates_are_read_in_the_documented_order ... ok
[INFO] [stdout] test pantry::tests::depleted_reports_in_file_order_with_the_section_on_each_item ... ok
[INFO] [stdout] test pantry::tests::an_update_refuses_an_item_written_as_a_bare_number ... ok
[INFO] [stdout] test pantry::tests::depleted_reports_what_is_at_or_below_its_own_threshold ... ok
[INFO] [stdout] test pantry::tests::expiring_returns_the_window_soonest_first ... ok
[INFO] [stdout] test pantry::tests::is_low_reads_only_the_quantity_and_the_threshold ... ok
[INFO] [stdout] test pantry::tests::items_with_no_quantity_are_reported_only_with_all ... ok
[INFO] [stdout] test pantry::tests::items_without_a_readable_date_come_last_and_only_when_asked_for ... ok
[INFO] [stdout] test pantry::tests::listing_without_a_filter_returns_the_whole_pantry ... ok
[INFO] [stdout] test pantry::tests::load_carries_every_attribute_as_written ... ok
[INFO] [stdout] test pantry::tests::load_keeps_sections_and_items_in_file_order ... ok
[INFO] [stdout] test pantry::tests::load_reads_a_file_when_the_source_is_a_path ... ok
[INFO] [stdout] test pantry::tests::matches_are_ordered_by_name_rather_than_by_path ... ok
[INFO] [stdout] test pantry::tests::max_ingredients_stops_the_plan_short ... ok
[INFO] [stdout] test pantry::tests::menus_and_recipes_without_ingredients_are_left_out_of_the_plan ... ok
[INFO] [stdout] test pantry::tests::no_ingredients_at_all_covers_nothing ... ok
[INFO] [stdout] test pantry::tests::nothing_writes_to_an_inline_pantry ... ok
[INFO] [stdout] test pantry::tests::matches_come_back_in_the_same_order_every_time ... ok
[INFO] [stdout] test pantry::tests::optional_ingredients_are_not_wanted ... ok
[INFO] [stdout] test pantry::tests::remove_and_update_need_a_pantry_that_exists ... ok
[INFO] [stdout] test pantry::tests::planning_needs_no_pantry_configuration ... ok
[INFO] [stdout] test pantry::tests::remove_refuses_a_section_that_is_not_there ... ok
[INFO] [stdout] test pantry::tests::remove_refuses_an_item_that_is_not_there ... ok
[INFO] [stdout] test pantry::tests::a_write_leaves_no_temporary_file_behind ... ok
[INFO] [stdout] test pantry::tests::removing_from_a_pantry_path_that_does_not_exist_is_an_io_error ... ok
[INFO] [stdout] test pantry::tests::skipped_recipes_are_reported_in_path_order ... ok
[INFO] [stdout] test pantry::tests::stock_is_matched_ignoring_case ... ok
[INFO] [stdout] test pantry::tests::the_built_in_thresholds_are_per_unit ... ok
[INFO] [stdout] test pantry::tests::the_expiry_date_is_normalised_to_iso_whatever_the_file_wrote ... ok
[INFO] [stdout] test pantry::tests::the_plan_is_the_same_every_time ... ok
[INFO] [stdout] test pantry::tests::the_plan_leaves_out_optional_ingredients ... ok
[INFO] [stdout] test pantry::tests::the_plan_takes_the_most_wanted_ingredient_first ... ok
[INFO] [stdout] test pantry::tests::the_plan_treats_differently_cased_ingredients_as_different ... ok
[INFO] [stdout] test pantry::tests::the_threshold_is_inclusive_and_keeps_thinner_matches_out ... ok
[INFO] [stdout] test pantry::tests::ties_are_broken_alphabetically_rather_than_by_walk_order ... ok
[INFO] [stdout] test pantry::tests::units_match_compares_only_the_unit ... ok
[INFO] [stdout] test pantry::tests::a_write_that_fails_after_writing_its_temporary_file_still_removes_it ... ok
[INFO] [stdout] test pantry::tests::add_allows_the_same_name_in_a_different_section ... ok
[INFO] [stdout] test pantry::tests::add_creates_the_pantry_file_when_the_context_has_none ... ok
[INFO] [stdout] test pantry::tests::add_creates_a_section_the_file_does_not_have ... ok
[INFO] [stdout] test pantry::tests::update_refuses_a_request_that_sets_nothing_before_looking_for_a_pantry ... ok
[INFO] [stdout] test pantry::tests::update_refuses_a_request_that_sets_nothing ... ok
[INFO] [stdout] test pantry::tests::update_refuses_a_section_that_is_not_there ... ok
[INFO] [stdout] test pantry::tests::warnings_come_back_as_diagnostics_rather_than_failing_the_load ... ok
[INFO] [stdout] test pantry::tests::update_refuses_an_item_that_is_not_there ... ok
[INFO] [stdout] test pantry::tests::without_a_pantry_every_query_that_needs_one_says_so ... ok
[INFO] [stdout] test pantry::tests::zero_days_returns_only_what_has_expired_or_expires_today ... ok
[INFO] [stdout] test parser::tests::every_error_is_converted_with_error_severity ... ok
[INFO] [stdout] test parser::tests::location_is_built_from_whichever_parts_are_known ... ok
[INFO] [stdout] test parser::tests::hints_are_captured ... ok
[INFO] [stdout] test parser::tests::neither_scaling_by_one_nor_parse_unscaled_disturbs_authored_units ... ok
[INFO] [stdout] test parser::tests::non_finite_scale_is_rejected ... ok
[INFO] [stdout] test parser::tests::parse_errors_carry_diagnostics_and_rendered_output ... ok
[INFO] [stdout] test parser::tests::parse_recipe_at_attributes_diagnostics_to_the_file ... ok
[INFO] [stdout] test parser::tests::parses_a_clean_recipe_without_diagnostics ... ok
[INFO] [stdout] test parser::tests::render_report_honours_the_ansi_flag ... ok
[INFO] [stdout] test parser::tests::render_report_includes_the_display_path_and_source_context ... ok
[INFO] [stdout] test parser::tests::render_report_works_for_a_metadata_parse ... ok
[INFO] [stdout] test parser::tests::scaling_multiplies_quantities_by_exactly_the_factor ... ok
[INFO] [stdout] test parser::tests::spans_are_byte_offsets_into_the_source ... ok
[INFO] [stdout] test parser::tests::the_first_label_wins_when_a_diagnostic_has_several ... ok
[INFO] [stdout] test parser::tests::warnings_are_returned_not_swallowed ... ok
[INFO] [stdout] test parser::tests::zero_and_negative_scale_are_accepted ... ok
[INFO] [stdout] test recipe::tests::a_bare_name_resolves_to_the_cook_file ... ok
[INFO] [stdout] test recipe::tests::a_colon_in_a_filename_is_part_of_the_name ... ok
[INFO] [stdout] test recipe::tests::a_directory_named_like_a_recipe_is_an_io_error ... ok
[INFO] [stdout] test recipe::tests::a_metadata_title_wins_over_the_fallback_name ... ok
[INFO] [stdout] test recipe::tests::an_inline_factor_is_not_interpreted_as_scaling ... ok
[INFO] [stdout] test recipe::tests::an_unreadable_recipe_is_an_io_error_not_a_missing_one ... ok
[INFO] [stdout] test recipe::tests::content_is_scaled_by_the_request ... ok
[INFO] [stdout] test recipe::tests::a_path_and_a_buffer_of_the_same_bytes_agree_on_the_title ... ok
[INFO] [stdout] test recipe::tests::missing_recipe_is_recipe_not_found ... ok
[INFO] [stdout] test recipe::tests::non_finite_scale_is_rejected ... ok
[INFO] [stdout] test recipe::tests::parse_errors_name_the_path_not_the_title ... ok
[INFO] [stdout] test recipe::tests::reads_a_recipe_from_memory ... ok
[INFO] [stdout] test recipe::tests::reads_a_recipe_from_a_path ... ok
[INFO] [stdout] test recipe::tests::spaces_around_the_colon_are_not_part_of_the_name_or_factor ... ok
[INFO] [stdout] test recipe::tests::splits_a_name_from_its_scaling_factor ... ok
[INFO] [stdout] test recipe::tests::warnings_reach_the_caller ... ok
[INFO] [stdout] test recipe::tests::the_request_scale_is_applied ... ok
[INFO] [stdout] test report::tests::a_broken_template_is_a_render_error ... ok
[INFO] [stdout] test report::tests::a_failing_expression_is_a_render_error_too ... ok
[INFO] [stdout] test report::tests::a_non_finite_scale_is_rejected_before_anything_is_read ... ok
[INFO] [stdout] test report::tests::a_missing_path_source_is_not_found ... ok
[INFO] [stdout] test report::tests::a_path_source_is_resolved_by_name_under_the_base_path ... ok
[INFO] [stdout] test report::tests::a_pantry_reaches_the_template_from_a_path_and_from_inline_text ... ok
[INFO] [stdout] test report::tests::an_unparseable_recipe_is_also_a_render_error ... ok
[INFO] [stdout] test report::tests::an_aisle_reaches_the_template_from_a_path_and_from_inline_text ... ok
[INFO] [stdout] test report::tests::content_is_rendered_as_given_and_never_read_from_disk ... ok
[INFO] [stdout] test report::tests::metadata_is_available_to_the_template ... ok
[INFO] [stdout] test report::tests::no_aisle_or_pantry_leaves_the_template_functions_usable ... ok
[INFO] [stdout] test report::tests::renders_a_template_against_the_recipe ... ok
[INFO] [stdout] test report::tests::scale_reaches_the_template_and_the_quantities ... ok
[INFO] [stdout] test report::tests::the_base_path_defaults_to_the_context_and_is_overridable ... ok
[INFO] [stdout] test report::tests::the_request_base_path_steers_the_recipe_lookup ... ok
[INFO] [stdout] test report::tests::the_datastore_path_is_what_the_db_function_reads ... ok
[INFO] [stdout] test search::tests::a_file_that_cannot_be_read_is_an_io_error_not_a_search_error ... ok
[INFO] [stdout] test search::tests::a_file_with_no_valid_text_matches_nothing_and_fails_nothing ... ok
[INFO] [stdout] test pantry::tests::add_matches_the_section_name_exactly ... ok
[INFO] [stdout] test pantry::tests::add_matches_the_item_name_exactly ... ok
[INFO] [stdout] test search::tests::a_hit_is_named_by_its_title_when_it_has_one ... ok
[INFO] [stdout] test search::tests::a_path_that_does_not_start_with_the_root_is_left_alone ... ok
[INFO] [stdout] test search::tests::a_path_under_the_root_is_stripped_to_the_remainder ... ok
[INFO] [stdout] test search::tests::a_missing_search_root_yields_no_hits ... ok
[INFO] [stdout] test search::tests::a_hit_with_no_title_is_named_by_its_file_stem ... ok
[INFO] [stdout] test search::tests::a_search_root_that_is_not_a_valid_glob_pattern_is_reported ... ok
[INFO] [stdout] test search::tests::a_query_that_matches_nothing_returns_no_hits ... ok
[INFO] [stdout] test search::tests::a_single_term_query_is_unchanged ... ok
[INFO] [stdout] test search::tests::a_term_matching_only_the_file_name_satisfies_the_and ... ok
[INFO] [stdout] test search::tests::an_unreadable_file_is_still_an_io_error ... ok
[INFO] [stdout] test search::tests::adding_a_term_narrows_the_result_set ... ok
[INFO] [stdout] test search::tests::a_recipe_that_is_not_valid_utf8_is_still_searchable ... ok
[INFO] [stdout] test search::tests::finds_a_recipe_by_its_file_name ... ok
[INFO] [stdout] test search::tests::base_dir_overrides_the_context_base_path ... ok
[INFO] [stdout] test search::tests::finds_a_recipe_whose_content_matches_a_term ... ok
[INFO] [stdout] test search::tests::hits_are_relative_to_the_search_root ... ok
[INFO] [stdout] test search::tests::hits_carry_the_path_the_search_found_them_at ... ok
[INFO] [stdout] test search::tests::hits_come_back_best_first ... ok
[INFO] [stdout] test search::tests::text_around_an_invalid_byte_still_matches ... ok
[INFO] [stdout] test search::tests::multiple_terms_are_anded ... ok
[INFO] [stdout] test search::tests::terms_match_regardless_of_case ... ok
[INFO] [stdout] test shopping_list::store::tests::a_collection_with_no_list_reads_as_an_empty_one ... ok
[INFO] [stdout] test shopping_list::store::tests::a_checked_ingredient_is_remembered_lowercased ... ok
[INFO] [stdout] test search::tests::without_a_base_dir_the_context_base_path_is_searched ... ok
[INFO] [stdout] test shopping_list::store::tests::a_failed_compact_leaves_the_checked_log_alone ... ok
[INFO] [stdout] test shopping_list::store::tests::a_failed_list_write_leaves_no_temporary_file_behind ... ok
[INFO] [stdout] test pantry::tests::add_puts_a_new_item_at_the_end_of_an_existing_section ... ok
[INFO] [stdout] test pantry::tests::add_refuses_a_pantry_it_cannot_read_rather_than_replacing_it ... FAILED
[INFO] [stdout] test pantry::tests::add_trims_what_it_is_given ... ok
[INFO] [stdout] test pantry::tests::add_without_attributes_writes_an_empty_item ... ok
[INFO] [stdout] test pantry::tests::add_writes_every_attribute_it_is_given ... ok
[INFO] [stdout] test pantry::tests::an_array_section_is_rewritten_as_a_table_keeping_its_items ... ok
[INFO] [stdout] test shopping_list::store::tests::an_unparseable_list_is_an_error_naming_the_file ... ok
[INFO] [stdout] test shopping_list::store::tests::checks_accumulate_across_stores ... ok
[INFO] [stdout] test pantry::tests::remove_deletes_a_section_it_empties_and_leaves_the_others_in_order ... ok
[INFO] [stdout] test pantry::tests::an_unrelated_add_changes_only_the_line_it_adds ... ok
[INFO] [stdout] test pantry::tests::remove_takes_the_item_out_and_leaves_the_rest ... ok
[INFO] [stdout] test pantry::tests::update_changes_the_item_in_the_section_it_names ... ok
[INFO] [stdout] test pantry::tests::update_changes_only_the_attributes_it_is_given ... ok
[INFO] [stdout] test shopping_list::store::tests::compact_drops_checks_for_ingredients_that_are_gone ... ok
[INFO] [stdout] test shopping_list::store::tests::a_legacy_list_is_migrated_on_first_read ... ok
[INFO] [stdout] test pantry::tests::update_gives_a_bare_item_its_first_attribute ... ok
[INFO] [stdout] test shopping_list::store::tests::a_menu_reads_back_with_its_recipes_nested ... ok
[INFO] [stdout] test shopping_list::store::tests::a_multiplier_survives_the_round_trip ... ok
[INFO] [stdout] test shopping_list::store::tests::unchecking_wins_over_an_earlier_check ... ok
[INFO] [stdout] test shopping_list::tests::a_bare_extra_item_is_added_without_an_amount ... ok
[INFO] [stdout] test shopping_list::tests::a_broken_buffer_is_a_parse_error_naming_the_supplied_name ... ok
[INFO] [stdout] test shopping_list::tests::a_buffer_and_a_file_aggregate_together ... ok
[INFO] [stdout] test shopping_list::tests::a_chain_deeper_than_any_real_collection_stops_and_says_so ... ok
[INFO] [stdout] test shopping_list::tests::a_cycle_that_closes_three_recipes_down_is_still_refused ... ok
[INFO] [stdout] test shopping_list::tests::a_fractional_servings_target_rounds_the_same_way_all_the_way_down ... ok
[INFO] [stdout] test shopping_list::tests::a_leading_at_sign_on_an_extra_item_is_tolerated ... ok
[INFO] [stdout] test shopping_list::tests::a_malformed_aisle_configuration_warns_and_falls_back ... ok
[INFO] [stdout] test shopping_list::tests::a_missing_aisle_configuration_warns_and_leaves_everything_uncategorised ... ok
[INFO] [stdout] test shopping_list::tests::a_missing_recipe_is_not_found ... ok
[INFO] [stdout] test shopping_list::tests::a_missing_referenced_recipe_is_not_found ... ok
[INFO] [stdout] test shopping_list::tests::a_multiword_extra_item_keeps_every_word ... ok
[INFO] [stdout] test shopping_list::tests::a_quantity_on_a_reference_scales_the_referenced_recipe_to_it ... ok
[INFO] [stdout] test shopping_list::tests::a_recipe_referenced_by_two_others_is_counted_for_both ... ok
[INFO] [stdout] test shopping_list::tests::a_recipe_that_does_not_parse_is_a_parse_error_naming_its_file ... ok
[INFO] [stdout] test shopping_list::tests::a_reference_climbing_out_of_the_recipe_directory_is_skipped_and_reported ... ok
[INFO] [stdout] test shopping_list::tests::a_reference_cycle_raises_a_warning_naming_it ... ok
[INFO] [stdout] test shopping_list::tests::a_reference_from_a_buffer_to_an_unsaved_recipe_is_not_found ... ok
[INFO] [stdout] test shopping_list::tests::a_reference_that_does_not_step_up_is_read_from_the_recipe_directory ... ok
[INFO] [stdout] test shopping_list::tests::a_reference_that_steps_up_is_resolved_from_the_recipe_writing_it ... ok
[INFO] [stdout] test shopping_list::tests::a_scaled_reference_passes_the_factor_it_reached_further_down ... ok
[INFO] [stdout] test shopping_list::tests::a_self_referencing_recipe_is_counted_once ... ok
[INFO] [stdout] test shopping_list::tests::a_servings_target_against_a_fractional_base_is_a_reference_error ... ok
[INFO] [stdout] test shopping_list::tests::a_servings_target_on_a_recipe_without_servings_is_a_reference_error ... ok
[INFO] [stdout] test shopping_list::tests::a_warning_from_a_buffer_carries_no_file ... ok
[INFO] [stdout] test shopping_list::store::tests::a_scale_of_one_is_stored_without_a_multiplier ... ok
[INFO] [stdout] test shopping_list::tests::a_yield_target_in_another_unit_is_a_reference_error ... ok
[INFO] [stdout] test shopping_list::tests::aisle_synonyms_fold_onto_one_name ... ok
[INFO] [stdout] test shopping_list::tests::a_yield_target_passes_the_factor_it_reached_further_down ... ok
[INFO] [stdout] test shopping_list::tests::an_extra_item_can_carry_its_own_amount ... ok
[INFO] [stdout] test shopping_list::tests::an_empty_extra_item_is_an_error ... ok
[INFO] [stdout] test shopping_list::tests::an_extra_item_is_grouped_by_the_aisle_configuration ... ok
[INFO] [stdout] test shopping_list::tests::an_extra_item_merges_with_a_matching_recipe_ingredient ... ok
[INFO] [stdout] test shopping_list::tests::an_extra_item_the_pantry_already_holds_is_subtracted ... ok
[INFO] [stdout] test shopping_list::tests::an_in_memory_recipe_expands_references_from_disk ... ok
[INFO] [stdout] test shopping_list::tests::an_optional_reference_makes_everything_it_adds_optional ... ok
[INFO] [stdout] test shopping_list::tests::an_unreadable_aisle_file_is_an_io_error_naming_it ... ok
[INFO] [stdout] test shopping_list::tests::an_unreadable_pantry_file_is_an_io_error_naming_it ... ok
[INFO] [stdout] test shopping_list::tests::an_unscalable_reference_is_a_reference_error ... ok
[INFO] [stdout] test shopping_list::tests::both_views_hold_the_same_ingredients ... ok
[INFO] [stdout] test shopping_list::tests::duplicate_ingredients_are_merged_into_one_item ... ok
[INFO] [stdout] test shopping_list::tests::extract_ingredients_accumulates_across_calls ... ok
[INFO] [stdout] test shopping_list::tests::in_memory_recipe_text_reaches_the_list ... ok
[INFO] [stdout] test shopping_list::tests::ignore_references_leaves_the_reference_as_a_bare_item ... ok
[INFO] [stdout] test shopping_list::tests::in_memory_text_is_used_and_the_name_is_never_looked_up ... ok
[INFO] [stdout] test shopping_list::tests::included_optional_ingredients_are_marked ... ok
[INFO] [stdout] test shopping_list::tests::included_references_filter_the_top_level_only ... ok
[INFO] [stdout] test shopping_list::tests::included_references_are_matched_resolved_however_they_were_spelled ... ok
[INFO] [stdout] test shopping_list::tests::included_references_selects_which_references_to_follow ... ok
[INFO] [stdout] test shopping_list::tests::ingredients_are_categorised_by_the_aisle_configuration ... ok
[INFO] [stdout] test shopping_list::tests::inconvertible_quantities_render_in_the_same_order_either_way_round ... ok
[INFO] [stdout] test shopping_list::tests::items_keep_recipe_order ... ok
[INFO] [stdout] test shopping_list::tests::mutually_referencing_recipes_are_counted_once ... ok
[INFO] [stdout] test shopping_list::tests::no_pantry_source_means_nothing_is_subtracted ... ok
[INFO] [stdout] test shopping_list::tests::no_included_references_follows_all_of_them ... ok
[INFO] [stdout] test shopping_list::tests::no_recipes_gives_an_empty_list ... ok
[INFO] [stdout] test shopping_list::tests::optional_ingredients_are_left_out_by_default ... ok
[INFO] [stdout] test shopping_list::tests::optional_amounts_are_not_merged_into_required_ones ... ok
[INFO] [stdout] test shopping_list::tests::optional_items_are_categorised_after_required_ones ... ok
[INFO] [stdout] test shopping_list::tests::pantry_quantities_are_subtracted ... ok
[INFO] [stdout] test shopping_list::store::tests::an_added_recipe_comes_back_with_its_path_name_and_scale ... ok
[INFO] [stdout] test shopping_list::tests::references_are_expanded_into_their_ingredients ... ok
[INFO] [stdout] test shopping_list::tests::references_are_expanded_however_deep_the_chain_runs ... ok
[INFO] [stdout] test shopping_list::tests::same_unit_quantities_combine_and_others_stay_separate ... ok
[INFO] [stdout] test shopping_list::tests::the_request_scale_applies_to_an_in_memory_recipe ... ok
[INFO] [stdout] test shopping_list::tests::the_pantry_is_not_subtracted_twice ... ok
[INFO] [stdout] test shopping_list::tests::two_in_memory_recipes_aggregate_into_one_list ... ok
[INFO] [stdout] test shopping_list::tests::the_request_scale_is_applied_per_recipe ... ok
[INFO] [stdout] test source::tests::inline_reads_its_text ... ok
[INFO] [stdout] test source::tests::missing_path_is_an_io_error_naming_the_path ... ok
[INFO] [stdout] test shopping_list::tests::the_request_scale_reaches_every_recipe_down_the_chain ... ok
[INFO] [stdout] test source::tests::none_reads_as_none ... ok
[INFO] [stdout] test shopping_list::tests::warnings_are_attributed_to_the_recipe_that_raised_them ... ok
[INFO] [stdout] test source::tests::path_reads_from_disk ... ok
[INFO] [stdout] test shopping_list::store::tests::included_references_are_stored_as_children_and_read_back ... ok
[INFO] [stdout] test shopping_list::store::tests::compact_keeps_checks_for_ingredients_still_on_the_list ... ok
[INFO] [stdout] test shopping_list::store::tests::clear_empties_the_list_and_the_checked_log ... ok
[INFO] [stdout] test shopping_list::store::tests::remove_at_counts_the_entries_load_lists ... ok
[INFO] [stdout] test shopping_list::store::tests::adding_the_same_recipe_twice_stores_it_twice ... ok
[INFO] [stdout] test shopping_list::store::tests::adding_to_a_legacy_list_migrates_it_rather_than_replacing_it ... ok
[INFO] [stdout] test shopping_list::store::tests::an_existing_list_is_not_overwritten_by_a_legacy_one ... ok
[INFO] [stdout] test shopping_list::store::tests::migration_renames_the_legacy_file_so_it_is_not_read_again ... ok
[INFO] [stdout] test shopping_list::store::tests::removing_something_that_is_not_there_changes_nothing ... ok
[INFO] [stdout] test shopping_list::store::tests::remove_at_changes_nothing_when_the_entry_is_not_there_any_more ... ok
[INFO] [stdout] test shopping_list::store::tests::remove_at_takes_that_entry_and_not_the_first_with_its_path ... ok
[INFO] [stdout] test shopping_list::store::tests::remove_takes_the_named_entry_and_leaves_the_others_in_order ... ok
[INFO] [stdout] test shopping_list::store::tests::a_rewrite_never_shortens_the_file_in_place ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- pantry::tests::a_failed_write_leaves_the_pantry_untouched stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'pantry::tests::a_failed_write_leaves_the_pantry_untouched' (1928) panicked at src/pantry/tests.rs:2197:5:
[INFO] [stdout] this test needs a user that a read-only directory applies to; running as root makes it prove nothing
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e3d48b8cbc1 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x5e3d48ba631a - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    2:     0x5e3d48b9163c - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]    3:     0x5e3d48b65676 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x5e3d48b837c9 - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]    5:     0x5e3d487d0dd0 - test[aada8e7e76ba119b]::test_main_inner::{closure#0}
[INFO] [stdout]    6:     0x5e3d48b83982 - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]    7:     0x5e3d48b65754 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    8:     0x5e3d48b5da99 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    9:     0x5e3d48b666dd - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]   10:     0x5e3d48ba6afc - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]   11:     0x5e3d4869675c - <cookcli_core[2fbb2c06869be59a]::pantry::tests::a_failed_write_leaves_the_pantry_untouched::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   12:     0x5e3d487c421b - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]   13:     0x5e3d487d13f5 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]   14:     0x5e3d487cace4 - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]   15:     0x5e3d487d4482 - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   16:     0x5e3d48b8bb9f - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   17:     0x726fd820ddfa - <unknown>
[INFO] [stdout]   18:     0x726fd82a13d4 - clone
[INFO] [stdout]   19:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- pantry::tests::add_refuses_a_pantry_it_cannot_read_rather_than_replacing_it stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'pantry::tests::add_refuses_a_pantry_it_cannot_read_rather_than_replacing_it' (1960) panicked at src/pantry/tests.rs:2242:5:
[INFO] [stdout] this test needs a user that a 000 file applies to; running as root makes it prove nothing
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e3d48b8cbc1 - <<std[617be2ca0a6fd877]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a373ad73a504971]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x5e3d48ba631a - core[a373ad73a504971]::fmt::write
[INFO] [stdout]    2:     0x5e3d48b9163c - <alloc[2e1b2a31b91974c5]::vec::Vec<u8> as core[a373ad73a504971]::io::write::Write>::write_fmt
[INFO] [stdout]    3:     0x5e3d48b65676 - std[617be2ca0a6fd877]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x5e3d48b837c9 - std[617be2ca0a6fd877]::panicking::default_hook
[INFO] [stdout]    5:     0x5e3d487d0dd0 - test[aada8e7e76ba119b]::test_main_inner::{closure#0}
[INFO] [stdout]    6:     0x5e3d48b83982 - std[617be2ca0a6fd877]::panicking::panic_with_hook
[INFO] [stdout]    7:     0x5e3d48b65754 - std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    8:     0x5e3d48b5da99 - std[617be2ca0a6fd877]::sys::backtrace::__rust_end_short_backtrace::<std[617be2ca0a6fd877]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    9:     0x5e3d48b666dd - __rustc[ea4f61d10b84890b]::rust_begin_unwind
[INFO] [stdout]   10:     0x5e3d48ba6afc - core[a373ad73a504971]::panicking::panic_fmt
[INFO] [stdout]   11:     0x5e3d486a9fce - <cookcli_core[2fbb2c06869be59a]::pantry::tests::add_refuses_a_pantry_it_cannot_read_rather_than_replacing_it::{closure#0} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   12:     0x5e3d487c421b - test[aada8e7e76ba119b]::__rust_begin_short_backtrace::<core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>, fn() -> core[a373ad73a504971]::result::Result<(), alloc[2e1b2a31b91974c5]::string::String>>
[INFO] [stdout]   13:     0x5e3d487d13f5 - test[aada8e7e76ba119b]::run_test::{closure#0}
[INFO] [stdout]   14:     0x5e3d487cace4 - std[617be2ca0a6fd877]::sys::backtrace::__rust_begin_short_backtrace::<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>
[INFO] [stdout]   15:     0x5e3d487d4482 - <std[617be2ca0a6fd877]::thread::lifecycle::spawn_unchecked<test[aada8e7e76ba119b]::run_test::{closure#1}, ()>::{closure#1} as core[a373ad73a504971]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   16:     0x5e3d48b8bb9f - <std[617be2ca0a6fd877]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   17:     0x726fd820ddfa - <unknown>
[INFO] [stdout]   18:     0x726fd82a13d4 - clone
[INFO] [stdout]   19:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     pantry::tests::a_failed_write_leaves_the_pantry_untouched
[INFO] [stdout]     pantry::tests::add_refuses_a_pantry_it_cannot_read_rather_than_replacing_it
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 401 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.35s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--lib`
[INFO] running `Command { std: "docker" "inspect" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f", kill_on_drop: false }`
[INFO] [stdout] 3d6f1ebd61bf3c813e49f8a900f2790844ea6a5e83bcdec7b964b05e3c60d50f
