[INFO] cloning repository https://github.com/renoseven/reviewbot
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/renoseven/reviewbot" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frenoseven%2Freviewbot", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frenoseven%2Freviewbot'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 3216520fd292bc0f2e3a7f82d24b22370babc73a
[INFO] testing renoseven/reviewbot against 1.100.0-beta.1+cargoflags=--release for beta-release-1.100-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frenoseven%2Freviewbot" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/renoseven/reviewbot
[INFO] finished tweaking git repo https://github.com/renoseven/reviewbot
[INFO] tweaked toml for git repo https://github.com/renoseven/reviewbot written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/renoseven/reviewbot 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 git repo https://github.com/renoseven/reviewbot 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-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35
[INFO] running `Command { std: "docker" "start" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35", 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" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35" "/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" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35", 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" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.107
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling smallvec v1.16.0
[INFO] [stderr]    Compiling mio v1.2.3
[INFO] [stderr]    Compiling find-msvc-tools v0.1.12
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling litemap v0.8.3
[INFO] [stderr]    Compiling writeable v0.6.4
[INFO] [stderr]    Compiling cc v1.4.5
[INFO] [stderr]    Compiling socket2 v0.6.5
[INFO] [stderr]    Compiling icu_normalizer_data v2.3.0
[INFO] [stderr]    Compiling futures-sink v0.3.34
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling icu_properties_data v2.3.0
[INFO] [stderr]    Compiling http v1.5.0
[INFO] [stderr]    Compiling unicode-segmentation v1.13.3
[INFO] [stderr]    Compiling syn v3.0.5
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling futures-io v0.3.34
[INFO] [stderr]    Compiling http-body v1.1.0
[INFO] [stderr]    Compiling instability v0.3.13
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling compact_str v0.9.1
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling lru v0.18.4
[INFO] [stderr]    Compiling aho-corasick v1.1.5
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling critical-section v1.2.0
[INFO] [stderr]    Compiling rustls v0.23.44
[INFO] [stderr]    Compiling try-lock v0.2.5
[INFO] [stderr]    Compiling typenum v1.20.1
[INFO] [stderr]    Compiling want v0.3.1
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling futures-channel v0.3.34
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]    Compiling darling_core v0.24.1
[INFO] [stderr]    Compiling regex-automata v0.4.18
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling num_threads v0.1.7
[INFO] [stderr]    Compiling zerovec-derive v0.11.6
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling zerovec v0.11.8
[INFO] [stderr]    Compiling tinystr v0.8.4
[INFO] [stderr]    Compiling potential_utf v0.1.6
[INFO] [stderr]    Compiling icu_locale_core v2.3.0
[INFO] [stderr]    Compiling zerotrie v0.2.5
[INFO] [stderr]    Compiling icu_collections v2.3.0
[INFO] [stderr]    Compiling darling_macro v0.24.1
[INFO] [stderr]    Compiling strum_macros v0.28.0
[INFO] [stderr]    Compiling darling v0.24.1
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling icu_provider v2.3.1
[INFO] [stderr]    Compiling icu_properties v2.3.0
[INFO] [stderr]    Compiling icu_normalizer v2.3.0
[INFO] [stderr]    Compiling strum v0.28.0
[INFO] [stderr]    Compiling ratatui-core v0.1.2
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling time v0.3.55
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling rustls-webpki v0.103.15
[INFO] [stderr]    Compiling line-clipping v0.3.8
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling ipnet v2.12.2
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling ratatui-widgets v0.3.2
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling indexmap v2.14.2
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling tokio-rustls v0.26.5
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling clap_builder v4.6.6
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling ratatui-macros v0.7.2
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.2
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]    Compiling http-body-util v0.1.5
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling thread_local v1.1.10
[INFO] [stderr]    Compiling bstr v1.13.1
[INFO] [stderr]    Compiling iana-time-zone v0.1.65
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling chrono v0.4.45
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling clap v4.6.6
[INFO] [stderr]    Compiling globset v0.4.20
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling shellexpand v3.1.2
[INFO] [stderr]    Compiling ratatui v0.30.2
[INFO] [stderr]    Compiling regex v1.13.1
[INFO] [stderr]    Compiling comfy-table v8.0.0
[INFO] [stderr]    Compiling reviewbot v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 5m 41s
[INFO] running `Command { std: "docker" "inspect" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35", 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" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35" "/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 futures-sink v0.3.34
[INFO] [stderr]    Compiling futures-macro v0.3.34
[INFO] [stderr]    Compiling bstr v1.13.1
[INFO] [stderr]    Compiling predicates-core v1.0.10
[INFO] [stderr]    Compiling float-cmp v0.10.0
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]    Compiling deadpool-runtime v0.1.4
[INFO] [stderr]    Compiling difflib v0.4.0
[INFO] [stderr]    Compiling futures-channel v0.3.34
[INFO] [stderr]    Compiling tokio-util v0.7.19
[INFO] [stderr]    Compiling normalize-line-endings v0.3.0
[INFO] [stderr]    Compiling assert_cmd v2.2.2
[INFO] [stderr]    Compiling termtree v0.5.1
[INFO] [stderr]    Compiling deadpool v0.12.3
[INFO] [stderr]    Compiling predicates-tree v1.0.13
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling predicates v3.1.4
[INFO] [stderr]    Compiling assert-json-diff v2.0.2
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling h2 v0.4.19
[INFO] [stderr]    Compiling globset v0.4.20
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling futures-executor v0.3.34
[INFO] [stderr]    Compiling futures v0.3.34
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling wiremock v0.6.5
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling reviewbot v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 3m 51s
[INFO] running `Command { std: "docker" "inspect" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35", 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" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35" "/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.43s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/build/reviewbot/b33a6627b4a91077/out/reviewbot-b33a6627b4a91077)
[INFO] [stdout] 
[INFO] [stdout] running 419 tests
[INFO] [stdout] test budget::account::tests::an_allowance_too_small_to_answer_with_is_refused_rather_than_sent ... ok
[INFO] [stdout] test budget::account::tests::only_minus_one_means_unlimited ... ok
[INFO] [stdout] test budget::estimate::tests::a_byte_allowance_uses_the_same_ascii_rate ... ok
[INFO] [stdout] test budget::account::tests::a_reserve_stops_the_investigation_while_the_conclusion_is_still_affordable ... ok
[INFO] [stdout] test budget::account::tests::input_is_counted_when_it_is_billed_rather_than_predicted ... ok
[INFO] [stdout] test budget::account::tests::zero_stops_before_the_first_call_and_unlimited_never_stops ... ok
[INFO] [stdout] test budget::account::tests::what_is_left_converts_straight_into_an_output_allowance ... ok
[INFO] [stdout] test budget::estimate::tests::ascii_counts_four_characters_to_a_token ... ok
[INFO] [stdout] test budget::price::tests::cached_input_is_billed_at_the_cached_rate ... ok
[INFO] [stdout] test budget::estimate::tests::mixed_text_adds_the_two_rates ... ok
[INFO] [stdout] test budget::estimate::tests::empty_text_costs_nothing ... ok
[INFO] [stdout] test budget::estimate::tests::cjk_counts_one_character_to_a_token ... ok
[INFO] [stdout] test budget::price::tests::a_model_without_a_cached_price_pays_full_rate ... ok
[INFO] [stdout] test budget::price::tests::output_tokens_for_a_budget_slice_rounds_down ... ok
[INFO] [stdout] test common::backoff::tests::retry_after_wins_over_the_curve ... ok
[INFO] [stdout] test common::http::tests::only_429_and_5xx_are_transient_statuses ... ok
[INFO] [stdout] test common::backoff::tests::curve_doubles_then_caps ... ok
[INFO] [stdout] test common::backoff::tests::jitter_stays_inside_the_window ... ok
[INFO] [stdout] test common::http::tests::retry_after_reads_delta_seconds ... ok
[INFO] [stdout] test budget::price::tests::fresh_and_cached_input_are_billed_separately ... ok
[INFO] [stdout] test budget::account::tests::a_ceiling_stops_the_call_that_would_cross_it ... ok
[INFO] [stdout] test common::secret::tests::inline_credentials_are_rejected ... ok
[INFO] [stdout] test config::fingerprint::tests::settings_a_model_call_is_made_of_are_all_the_review_slice ... ok
[INFO] [stdout] test common::truncate::tests::short_text_is_returned_untouched ... ok
[INFO] [stdout] test config::fingerprint::tests::the_earliest_slice_that_differs_names_the_stage_the_rerun_starts_from ... ok
[INFO] [stdout] test config::fingerprint::tests::a_fingerprint_carries_the_pointer_to_a_credential_and_never_its_value ... ok
[INFO] [stdout] test common::secret::tests::env_var_names_are_not_mistaken_for_credentials ... ok
[INFO] [stdout] test common::truncate::tests::the_cut_lands_on_a_character_boundary ... ok
[INFO] [stdout] test config::fingerprint::tests::a_platform_entry_and_the_worktree_flag_are_the_input_slice ... ok
[INFO] [stdout] test config::fingerprint::tests::the_plan_table_is_the_plan_slice ... ok
[INFO] [stdout] test common::secret::tests::paths_are_recognized_by_their_first_character ... ok
[INFO] [stdout] test config::paths::tests::defaults_live_under_dot_reviewbot ... ok
[INFO] [stdout] test config::settings::tests::a_host_field_is_unknown ... ok
[INFO] [stdout] test config::settings::tests::a_kind_field_is_unknown ... ok
[INFO] [stdout] test config::settings::tests::an_absent_allow_extensions_is_a_config_error_rather_than_a_default ... ok
[INFO] [stdout] test config::settings::tests::context_window_must_leave_room_for_output_and_skeleton ... ok
[INFO] [stdout] test config::settings::tests::duplicate_provider_names_fail ... ok
[INFO] [stdout] test config::settings::tests::every_sizing_number_is_required_rather_than_defaulted ... ok
[INFO] [stdout] test config::settings::tests::init_writes_the_example_and_refuses_to_overwrite ... ok
[INFO] [stdout] test config::settings::tests::known_apis_resolve ... ok
[INFO] [stdout] test config::settings::tests::minimal_config_validates_and_selects_the_sole_model ... ok
[INFO] [stdout] test config::settings::tests::log_level_is_read_leniently_before_the_real_config_load ... ok
[INFO] [stdout] test config::settings::tests::an_extension_is_written_bare_rather_than_with_a_dot ... ok
[INFO] [stdout] test config::settings::tests::an_unknown_api_is_refused_even_when_base_url_looks_like_gitlab ... ok
[INFO] [stdout] test config::settings::tests::log_level_does_not_change_the_config_fingerprint ... ok
[INFO] [stdout] test config::settings::tests::the_example_config_sets_everything_that_is_required ... ok
[INFO] [stdout] test config::settings::tests::shipped_checker_args_pass_the_path_as_a_positional_file ... ok
[INFO] [stdout] test config::settings::tests::shipped_checker_descriptions_name_the_language_not_an_exception ... ok
[INFO] [stdout] test config::settings::tests::tool_names_may_not_collide_with_builtins ... ok
[INFO] [stdout] test config::settings::tests::placeholders_are_extracted_per_argv_element ... ok
[INFO] [stdout] test domain::changeset::tests::a_diff_has_no_narrative_at_all ... ok
[INFO] [stdout] test config::settings::tests::tool_entries_reject_unknown_fields_and_bare_strings ... ok
[INFO] [stdout] test config::settings::tests::model_alias_shares_the_namespace_with_names ... ok
[INFO] [stdout] test domain::stage::tests::the_order_is_the_declaration_order ... ok
[INFO] [stdout] test config::settings::tests::negative_budgets_other_than_minus_one_fail ... ok
[INFO] [stdout] test config::settings::tests::selection_needs_exactly_one_default_when_several_models_exist ... ok
[INFO] [stdout] test domain::stage::tests::a_stage_knows_what_came_before_it ... ok
[INFO] [stdout] test domain::stage::tests::a_stage_serializes_as_its_name ... ok
[INFO] [stdout] test config::settings::tests::reasoning_effort_must_be_a_known_value ... ok
[INFO] [stdout] test platform::github::tests::a_glob_reaches_no_further_up_the_tree_than_its_literal_prefix ... ok
[INFO] [stdout] test platform::github::tests::a_search_leaves_the_reread_body_in_the_cache ... ok
[INFO] [stdout] test platform::github::tests::code_search_is_available_but_is_not_a_regular_expression_search ... ok
[INFO] [stdout] test platform::github::tests::a_whole_recursive_tree_is_fetched_once_and_later_globs_filter_it_locally ... ok
[INFO] [stdout] test platform::github::tests::a_review_is_one_comment_event_without_position ... ok
[INFO] [stdout] test platform::github::tests::cached_body_is_none_until_a_file_has_been_read ... ok
[INFO] [stdout] test platform::github::tests::a_truncated_tree_walks_only_the_directories_the_glob_can_reach ... ok
[INFO] [stdout] test platform::github::tests::owner_and_repo_come_from_the_project_path ... ok
[INFO] [stdout] test platform::github::tests::a_walk_that_hits_its_ceiling_reports_the_listing_as_incomplete ... ok
[INFO] [stdout] test platform::github::tests::a_github_html_url_is_fetched_from_the_api_base ... ok
[INFO] [stdout] test platform::github::tests::fetch_change_uses_the_diff_accept_header ... ok
[INFO] [stdout] test platform::github::tests::every_request_carries_a_user_agent ... ok
[INFO] [stdout] test platform::github::tests::size_without_a_cached_tree_falls_back_to_the_contents_api ... ok
[INFO] [stdout] test platform::github::tests::search_hits_are_candidates_that_get_rematched_at_head_sha ... ok
[INFO] [stdout] test platform::github::tests::regex_search_is_unsupported_rather_than_a_silent_keyword_search ... ok
[INFO] [stdout] test platform::gitlab::tests::a_gitlab_html_url_is_fetched_from_the_api_base ... ok
[INFO] [stdout] test platform::github::tests::fetch_change_brings_back_what_the_author_wrote ... ok
[INFO] [stdout] test platform::gitlab::tests::a_listing_from_gitlab_has_no_sizes ... ok
[INFO] [stdout] test platform::gitlab::tests::an_inline_discussion_sends_new_line_both_paths_and_shas ... ok
[INFO] [stdout] test platform::gitlab::tests::an_existing_marker_is_read_from_discussions ... ok
[INFO] [stdout] test platform::gitlab::tests::code_search_is_not_claimed_without_knowing_the_instance_has_it ... ok
[INFO] [stdout] test platform::github::tests::http_401_is_fatal_and_is_not_retried ... ok
[INFO] [stdout] test platform::gitlab::tests::http_401_is_fatal_and_is_not_retried ... ok
[INFO] [stdout] test platform::gitlab::tests::json_hunks_become_a_parseable_unified_diff ... ok
[INFO] [stdout] test platform::gitlab::tests::a_file_is_read_at_the_bound_sha_and_only_once ... ok
[INFO] [stdout] test platform::gitlab::tests::http_422_retries_once_as_a_note ... ok
[INFO] [stdout] test platform::gitlab::tests::cached_body_is_always_none ... ok
[INFO] [stdout] test platform::gitlab::tests::the_repository_tree_is_keyset_paged_and_fetched_once_per_run ... ok
[INFO] [stdout] test platform::http::tests::a_body_without_a_marker_is_empty ... ok
[INFO] [stdout] test platform::http::tests::markers_are_pulled_out_of_a_body ... ok
[INFO] [stdout] test platform::source::tests::a_listing_from_a_source_with_no_sizes_has_none ... ok
[INFO] [stdout] test platform::source::tests::regex_search_against_a_keyword_only_source_is_an_error ... ok
[INFO] [stdout] test platform::source::tests::size_does_not_fetch_a_body ... ok
[INFO] [stdout] test platform::url::tests::anything_else_is_rejected_rather_than_guessed ... ok
[INFO] [stdout] test platform::url::tests::github_pull_request_urls_parse ... ok
[INFO] [stdout] test platform::url::tests::gitlab_merge_request_urls_parse ... ok
[INFO] [stdout] test platform::url::tests::nested_gitlab_groups_keep_their_full_path ... ok
[INFO] [stdout] test progress::tests::input_sentence_names_files ... ok
[INFO] [stdout] test progress::tests::merge_sentence_keeps_scores_optional ... ok
[INFO] [stdout] test progress::tests::plan_sentence_pluralizes_each_count ... ok
[INFO] [stdout] test progress::tests::publish_sentence_distinguishes_intent ... ok
[INFO] [stdout] test progress::tests::report_sentence_names_both_artifacts ... ok
[INFO] [stdout] test progress::tests::review_sentence_omits_an_empty_unreviewed_count ... ok
[INFO] [stdout] test protocol::error::tests::only_the_transient_variant_is_retried ... ok
[INFO] [stdout] test platform::github::tests::commits_that_cannot_be_listed_leave_the_diff_reviewable ... ok
[INFO] [stdout] test platform::gitlab::tests::a_file_level_comment_uses_the_notes_endpoint ... ok
[INFO] [stdout] test protocol::openai::tests::a_complete_non_json_body_is_fatal_not_transient ... ok
[INFO] [stdout] test protocol::openai::tests::a_complete_wrong_schema_is_malformed_not_transient ... ok
[INFO] [stdout] test platform::gitlab::tests::nested_project_paths_are_url_encoded ... ok
[INFO] [stdout] test protocol::openai::tests::a_key_in_the_request_does_not_appear_in_error_text ... ok
[INFO] [stdout] test protocol::openai::tests::a_response_with_no_usage_is_malformed_not_free ... ok
[INFO] [stdout] test platform::gitlab::tests::posting_uses_the_entry_base_url_not_a_guessed_host ... ok
[INFO] [stdout] test protocol::openai::tests::a_responses_shaped_body_maps_to_response_and_usage ... ok
[INFO] [stdout] test protocol::openai::tests::base_url_is_a_prefix_not_a_full_endpoint ... ok
[INFO] [stdout] test protocol::openai::tests::error_snippets_are_redacted ... ok
[INFO] [stdout] test protocol::openai::tests::function_call_arguments_may_be_an_object ... ok
[INFO] [stdout] test protocol::openai::tests::empty_body_and_cut_off_json_are_transient ... ok
[INFO] [stdout] test platform::gitlab::tests::fetch_change_brings_back_what_the_author_wrote ... ok
[INFO] [stdout] test protocol::openai::tests::empty_bodies_are_retried_then_fail_as_transient ... ok
[INFO] [stdout] test platform::gitlab::tests::fetch_change_reads_versions_and_json_diffs ... ok
[INFO] [stdout] test protocol::openai::tests::a_function_call_missing_a_field_is_malformed_not_an_empty_call ... ok
[INFO] [stdout] test protocol::openai::tests::reasoning_effort_is_sent_when_the_model_entry_sets_it ... ok
[INFO] [stdout] test protocol::openai::tests::reasoning_effort_is_omitted_from_the_wire_when_unset ... ok
[INFO] [stdout] test record::layout::tests::a_stage_file_is_named_for_the_stage ... ok
[INFO] [stdout] test record::listing::tests::a_missing_runs_directory_lists_as_empty ... ok
[INFO] [stdout] test protocol::openai::tests::incomplete_status_is_kept_when_the_message_is_missing ... ok
[INFO] [stdout] test protocol::openai::tests::output_text_is_used_when_message_content_is_missing ... ok
[INFO] [stdout] test record::listing::tests::prune_keep_zero_deletes_every_run ... ok
[INFO] [stdout] test protocol::openai::tests::http_401_is_fatal_and_is_not_retried ... ok
[INFO] [stdout] test platform::gitlab::tests::size_is_the_gitlab_size_header_and_does_not_read_the_body ... ok
[INFO] [stdout] test record::listing::tests::prune_keeps_the_newest_and_deletes_the_rest_by_mtime ... ok
[INFO] [stdout] test record::meta::tests::a_changed_slice_drops_its_stage_and_everything_after_it ... ok
[INFO] [stdout] test record::meta::tests::an_invalidated_run_records_the_model_and_ceiling_it_will_run_under ... ok
[INFO] [stdout] test record::meta::tests::another_input_is_refused_however_well_the_settings_match ... ok
[INFO] [stdout] test record::listing::tests::traces_are_listed_oldest_first_and_can_be_filtered ... ok
[INFO] [stdout] test record::meta::tests::publishing_is_recorded_rather_than_fingerprinted ... ok
[INFO] [stdout] test record::meta::tests::matching_settings_resume_every_checkpoint ... ok
[INFO] [stdout] test record::run_id::tests::a_new_commit_on_the_same_change_is_a_new_run ... ok
[INFO] [stdout] test record::run_id::tests::a_diff_is_identified_by_content_not_by_file_name ... ok
[INFO] [stdout] test record::trace::tests::a_review_trace_id_is_sixteen_hex_characters_like_a_run_id ... ok
[INFO] [stdout] test record::trace::tests::oversized_tool_output_is_clipped_not_dropped ... ok
[INFO] [stdout] test record::trace::tests::the_published_view_keeps_paths_but_drops_file_bodies ... ok
[INFO] [stdout] test record::trace::tests::the_summary_trace_is_not_a_file_and_has_the_same_id_shape ... ok
[INFO] [stdout] test security::path::tests::a_glob_aimed_into_denied_territory_is_refused ... ok
[INFO] [stdout] test security::path::tests::builtin_denials_survive_an_empty_security_section ... ok
[INFO] [stdout] test record::lock::tests::two_holders_of_one_run_directory_are_mutually_exclusive ... ok
[INFO] [stdout] test security::path::tests::denied_paths_drop_out_of_listings ... ok
[INFO] [stdout] test security::path::tests::deny_paths_match_directories_and_single_files ... ok
[INFO] [stdout] test security::path::tests::extensions_outside_the_whitelist_are_rejected ... ok
[INFO] [stdout] test security::path::tests::traversal_and_absolute_paths_are_rejected ... ok
[INFO] [stdout] test security::redact::tests::a_value_read_at_startup_is_hidden_even_without_a_matching_shape ... ok
[INFO] [stdout] test security::redact::tests::known_credential_shapes_are_replaced ... ok
[INFO] [stdout] test security::subprocess::tests::a_whitelisted_name_that_looks_like_a_credential_is_still_dropped ... ok
[INFO] [stdout] test record::listing::tests::remove_deletes_one_run_and_refuses_a_missing_id ... ok
[INFO] [stdout] test security::subprocess::tests::credentials_never_reach_a_subprocess ... ok
[INFO] [stdout] test security::redact::tests::ordinary_code_is_left_alone ... ok
[INFO] [stdout] test protocol::openai::tests::http_429_honors_retry_after_and_then_succeeds ... ok
[INFO] [stdout] test stage::context::tests::a_worktree_that_cannot_search_refuses_the_search_and_answers_the_rest ... ok
[INFO] [stdout] test stage::context::tests::a_checker_that_needs_the_whole_project_refuses_until_it_has_one ... ok
[INFO] [stdout] test stage::context::tests::every_worktree_offers_the_model_the_same_tools ... ok
[INFO] [stdout] test security::redact::tests::private_key_blocks_are_replaced_whole ... ok
[INFO] [stdout] test stage::context::tests::the_catalog_prints_the_widest_shape_as_available ... ok
[INFO] [stdout] test stage::context::tests::hide_secret_blots_out_a_value_that_matches_no_shape ... ok
[INFO] [stdout] test stage::context::tests::an_empty_worktree_answers_every_tool_with_a_reason_about_the_run ... ok
[INFO] [stdout] test stage::context::tests::the_reserved_names_are_exactly_what_a_fully_equipped_run_registers ... ok
[INFO] [stdout] test stage::input::tests::a_binary_file_is_recorded_rather_than_dropped ... ok
[INFO] [stdout] test stage::input::tests::a_deleted_file_keeps_its_paths_and_leaves_both_sets_empty ... ok
[INFO] [stdout] test stage::input::tests::a_deletion_that_runs_to_the_end_falls_back_to_the_line_before_it ... ok
[INFO] [stdout] test stage::input::tests::a_long_branch_is_cut_and_says_so ... ok
[INFO] [stdout] test stage::input::tests::a_mail_without_the_separator_is_still_recognised_by_its_headers ... ok
[INFO] [stdout] test stage::input::tests::a_narrative_drops_blank_prose_and_keeps_only_subjects ... ok
[INFO] [stdout] test stage::input::tests::a_new_file_has_every_line_in_both_sets ... ok
[INFO] [stdout] test stage::input::tests::a_pure_deletion_hunk_puts_the_adjacent_line_in_both_sets ... ok
[INFO] [stdout] test stage::input::tests::a_rename_keeps_both_sides ... ok
[INFO] [stdout] test stage::input::tests::added_and_context_lines_are_commentable_but_only_added_lines_changed ... ok
[INFO] [stdout] test stage::input::tests::an_empty_diff_is_an_empty_change_and_prose_is_not ... ok
[INFO] [stdout] test stage::input::tests::context_only_lines_are_commentable_and_nothing_is_changed ... ok
[INFO] [stdout] test stage::input::tests::format_patch_output_is_refused_by_content ... ok
[INFO] [stdout] test stage::input::tests::the_format_is_judged_by_content_so_a_patch_extension_changes_nothing ... ok
[INFO] [stdout] test stage::input::tests::the_hunk_text_round_trips_with_its_own_header ... ok
[INFO] [stdout] test stage::input::tests::several_files_parse_without_a_git_header ... ok
[INFO] [stdout] test protocol::openai::tests::two_503s_then_200_succeeds_after_three_requests ... ok
[INFO] [stdout] test record::lock::tests::a_lock_file_nobody_holds_does_not_block_the_next_run ... ok
[INFO] [stdout] test protocol::openai::tests::message_text_comes_from_content_and_usage_keeps_cached_tokens ... ok
[INFO] [stdout] test stage::merge::tests::a_file_level_comment_sorts_behind_the_lines_of_the_same_file ... ok
[INFO] [stdout] test stage::merge::tests::a_budget_that_cannot_cover_the_score_still_publishes_the_comments ... ok
[INFO] [stdout] test stage::merge::tests::a_closer_hang_is_moved_and_its_end_line_is_dropped ... ok
[INFO] [stdout] test stage::merge::tests::a_chunk_that_submitted_nothing_is_no_findings ... ok
[INFO] [stdout] test stage::merge::tests::a_comment_leaning_only_on_context_lines_is_dropped_and_one_on_an_added_line_is_kept ... ok
[INFO] [stdout] test stage::merge::tests::a_chunk_document_that_will_not_parse_is_listed_and_its_sibling_is_kept ... ok
[INFO] [stdout] test stage::merge::tests::a_lone_opener_is_not_a_weak_hang_and_a_window_skips_closers ... ok
[INFO] [stdout] test stage::merge::tests::a_file_whose_comments_were_all_dropped_is_not_publishable ... ok
[INFO] [stdout] test stage::merge::tests::a_file_level_fallback_publishes_the_score_the_model_gave ... ok
[INFO] [stdout] test stage::merge::tests::a_comment_about_another_file_is_dropped_and_the_other_chunk_is_untouched ... ok
[INFO] [stdout] test stage::merge::tests::a_short_unique_quote_inside_the_window_beats_a_longer_name ... ok
[INFO] [stdout] test stage::merge::tests::a_unique_quote_on_an_evidence_line_beats_a_longer_name_that_appears_twice ... ok
[INFO] [stdout] test stage::merge::tests::a_weak_hang_prefers_the_quoted_call_over_a_wrong_evidence_line ... ok
[INFO] [stdout] test stage::merge::tests::alignment_pins_a_signature_hang_to_the_quoted_call ... ok
[INFO] [stdout] test stage::merge::tests::a_whitespace_only_summary_is_refused_and_re_asked ... ok
[INFO] [stdout] test stage::merge::tests::a_score_of_zero_from_the_model_is_a_real_score ... ok
[INFO] [stdout] test stage::merge::tests::a_refused_call_is_answered_before_the_second_ask ... ok
[INFO] [stdout] test stage::merge::tests::a_reply_that_only_talks_earns_one_re_ask ... ok
[INFO] [stdout] test stage::merge::tests::a_summary_that_stays_blank_leaves_the_run_unscored ... ok
[INFO] [stdout] test stage::merge::tests::new_side_text_reads_added_and_context_lines_and_skips_deletions ... ok
[INFO] [stdout] test stage::merge::tests::nothing_found_and_nothing_reviewed_do_not_read_the_same ... ok
[INFO] [stdout] test stage::merge::tests::alignment_walks_the_four_steps_and_never_touches_the_score ... ok
[INFO] [stdout] test stage::merge::tests::an_empty_list_still_gets_a_score ... ok
[INFO] [stdout] test stage::merge::tests::files_named_but_never_fetched_are_written_down_rather_than_believed ... ok
[INFO] [stdout] test stage::merge::tests::the_band_table_reads_the_way_it_is_written ... ok
[INFO] [stdout] test stage::merge::tests::one_entry_without_a_suggestion_goes_and_its_neighbours_stay ... ok
[INFO] [stdout] test stage::merge::tests::one_entry_without_a_score_goes_and_its_neighbours_stay_without_a_re_ask ... ok
[INFO] [stdout] test stage::merge::tests::alignment_will_not_hang_on_a_blank_or_a_lone_closer ... ok
[INFO] [stdout] test stage::merge::tests::the_same_body_on_ranges_that_do_not_touch_stays_two_comments ... ok
[INFO] [stdout] test stage::merge::tests::only_the_same_body_on_an_overlapping_range_of_one_file_is_merged_away ... ok
[INFO] [stdout] test stage::merge::tests::a_note_full_of_nonsense_moves_neither_the_badge_nor_the_score ... ok
[INFO] [stdout] test stage::merge::tests::the_list_is_ordered_by_score_then_by_path_and_line ... ok
[INFO] [stdout] test stage::orient::tests::a_manifest_spells_out_renames_additions_and_deletions ... ok
[INFO] [stdout] test stage::orient::tests::a_single_file_change_gets_no_manifest_at_all ... ok
[INFO] [stdout] test stage::orient::tests::a_wide_change_names_what_it_can_and_counts_the_rest ... ok
[INFO] [stdout] test stage::orient::tests::the_manifest_names_every_file_the_change_touches ... ok
[INFO] [stdout] test stage::plan::tests::a_bigger_measured_prompt_shrinks_the_limit_and_a_smaller_one_does_not ... ok
[INFO] [stdout] test stage::plan::tests::a_file_over_the_limit_is_cut_along_its_hunks_and_the_others_are_not ... ok
[INFO] [stdout] test stage::plan::tests::a_registered_tool_buys_rounds_rather_than_shrinking_the_diff ... ok
[INFO] [stdout] test stage::plan::tests::a_run_with_no_investigation_tools_gets_one_round ... ok
[INFO] [stdout] test stage::plan::tests::a_window_too_tight_for_the_working_size_uses_what_fits ... ok
[INFO] [stdout] test stage::plan::tests::every_skip_rule_names_its_reason_and_yields_no_chunk ... ok
[INFO] [stdout] test stage::plan::tests::files_outside_allow_extensions_are_skipped ... ok
[INFO] [stdout] test stage::plan::tests::max_chunk_tokens_is_clamped_to_what_still_fits ... ok
[INFO] [stdout] test stage::plan::tests::one_hunk_is_never_cut_in_half_however_small_the_limit ... ok
[INFO] [stdout] test stage::plan::tests::rounds_are_what_is_left_of_the_window_after_the_diff ... ok
[INFO] [stdout] test stage::merge::tests::the_scoring_call_is_given_the_final_list_and_nothing_else ... ok
[INFO] [stdout] test stage::plan::tests::the_hard_ceiling_follows_the_model ... ok
[INFO] [stdout] test stage::plan::tests::the_working_size_is_the_one_the_config_asked_for ... ok
[INFO] [stdout] test stage::plan::tests::two_small_files_stay_two_chunks ... ok
[INFO] [stdout] test stage::prompt::tests::a_capped_list_says_how_much_it_left_out ... ok
[INFO] [stdout] test stage::prompt::tests::a_fence_labels_the_block_and_cannot_be_closed_from_inside ... ok
[INFO] [stdout] test stage::prompt::tests::a_filled_slot_becomes_its_text ... ok
[INFO] [stdout] test stage::prompt::tests::a_place_in_the_code_is_written_one_way ... ok
[INFO] [stdout] test stage::prompt::tests::an_omitted_slot_leaves_no_gap ... ok
[INFO] [stdout] test stage::prompt::tests::an_empty_section_takes_its_heading_with_it ... ok
[INFO] [stdout] test stage::merge::tests::a_quotation_earns_its_badge_by_being_verbatim_and_pointing_at_the_line ... ok
[INFO] [stdout] test stage::prompt::tests::an_unfilled_or_unknown_slot_is_an_error_rather_than_output ... ok
[INFO] [stdout] test stage::publish::tests::a_long_finding_is_clipped_and_the_trace_id_stays ... ok
[INFO] [stdout] test stage::prompt::tests::an_opened_file_is_not_a_reason_to_open_another ... ok
[INFO] [stdout] test stage::prompt::tests::every_shipped_prompt_renders_with_its_slots_accounted_for ... ok
[INFO] [stdout] test stage::merge::tests::running_twice_replaces_this_stages_notes_and_keeps_the_other_stages ... ok
[INFO] [stdout] test stage::merge::tests::the_worst_finding_leads_even_when_a_trivial_one_is_more_certain ... ok
[INFO] [stdout] test stage::merge::tests::the_verdict_comes_back_as_a_tool_call_not_as_json_in_the_reply ... ok
[INFO] [stdout] test stage::publish::tests::markers_are_stable_and_readable_back ... ok
[INFO] [stdout] test stage::publish::tests::a_run_that_was_not_asked_to_publish_never_reaches_the_platform ... ok
[INFO] [stdout] test stage::merge::tests::the_scoring_round_is_shown_both_numbers ... ok
[INFO] [stdout] test stage::publish::tests::publish_fails_when_the_locator_is_missing ... ok
[INFO] [stdout] test stage::merge::tests::two_unreadable_score_replies_leave_the_score_missing_rather_than_zero ... ok
[INFO] [stdout] test stage::publish::tests::an_existing_marker_is_not_posted_again ... ok
[INFO] [stdout] test stage::publish::tests::an_mr_comment_is_the_finding_and_the_trace_id ... ok
[INFO] [stdout] test stage::publish::tests::comments_on_a_file_without_valid_comments_are_not_posted ... ok
[INFO] [stdout] test stage::report::tests::a_finding_that_covers_several_lines_is_headed_as_a_range ... ok
[INFO] [stdout] test stage::report::tests::a_run_that_could_look_anywhere_prints_no_coverage_note ... ok
[INFO] [stdout] test stage::publish::tests::published_json_is_rewritten_after_each_gitlab_success ... ok
[INFO] [stdout] test stage::review::tests::a_change_with_nothing_written_about_it_gets_no_fence ... ok
[INFO] [stdout] test stage::report::tests::a_run_that_saw_only_the_diff_does_not_read_like_a_thorough_one ... ok
[INFO] [stdout] test stage::report::tests::an_unscored_run_gives_the_reason_instead_of_a_number ... ok
[INFO] [stdout] test stage::report::tests::the_badge_sits_beside_the_score ... ok
[INFO] [stdout] test stage::report::tests::a_score_of_zero_does_not_read_as_not_scored ... ok
[INFO] [stdout] test stage::review::tests::a_chunk_the_model_finished_itself_carries_no_note ... ok
[INFO] [stdout] test stage::review::tests::a_budget_below_a_full_thinking_ceiling_still_sends_a_capped_call ... ok
[INFO] [stdout] test stage::review::tests::a_conversation_that_grows_into_the_window_is_stopped_before_the_vendor_sees_it ... ok
[INFO] [stdout] test stage::report::tests::the_report_is_the_findings_and_the_trace_stays_in_traces ... ok
[INFO] [stdout] test stage::review::tests::a_file_with_nothing_to_file_ends_with_no_comment_at_all ... ok
[INFO] [stdout] test stage::review::tests::a_file_the_model_fetched_is_recorded_as_context_on_the_trace ... ok
[INFO] [stdout] test stage::review::tests::a_registered_tool_is_named_without_its_schema ... ok
[INFO] [stdout] test stage::review::tests::a_function_call_is_executed_through_the_registry_and_replayed_into_the_next_request ... ok
[INFO] [stdout] test stage::review::tests::a_prose_review_is_asked_once_for_a_function_call ... ok
[INFO] [stdout] test stage::review::tests::a_model_that_only_calls_tools_is_asked_to_conclude_at_the_ceiling ... ok
[INFO] [stdout] test stage::review::tests::a_later_piece_is_told_what_the_earlier_one_found_and_said ... ok
[INFO] [stdout] test stage::review::tests::a_recorded_finding_is_not_the_end_of_the_file ... ok
[INFO] [stdout] test stage::review::tests::a_tool_that_fails_answers_the_model_instead_of_ending_the_stage ... ok
[INFO] [stdout] test stage::review::tests::a_handoff_survives_an_interrupt_between_pieces ... ok
[INFO] [stdout] test stage::review::tests::a_truncated_reasoning_only_reply_is_asked_once_more_for_json ... ok
[INFO] [stdout] test stage::review::tests::file_number_counts_paths_not_pieces ... ok
[INFO] [stdout] test stage::review::tests::a_whole_file_gets_an_id_from_its_path ... ok
[INFO] [stdout] test stage::review::tests::an_empty_reply_that_spent_nothing_is_not_asked_again ... ok
[INFO] [stdout] test stage::review::tests::an_empty_submit_comment_is_refused_and_the_file_is_not_over ... ok
[INFO] [stdout] test stage::review::tests::the_capability_section_says_what_this_run_s_worktree_is ... ok
[INFO] [stdout] test stage::review::tests::delivery_turns_do_not_consume_the_investigation_ceiling ... ok
[INFO] [stdout] test stage::review::tests::an_interrupted_review_resumes_from_the_chunks_it_already_wrote ... ok
[INFO] [stdout] test stage::review::tests::findings_written_as_prose_are_recovered_on_the_reask ... ok
[INFO] [stdout] test stage::review::tests::submit_comment_without_a_path_uses_the_file_under_review ... ok
[INFO] [stdout] test stage::review::tests::every_chunk_of_a_run_gets_the_same_prompt_bytes ... ok
[INFO] [stdout] test stage::review::tests::money_running_out_mid_file_buys_a_conclusion_rather_than_discarding_the_rounds ... ok
[INFO] [stdout] test stage::review::tests::the_reservation_counts_the_description_as_well ... ok
[INFO] [stdout] test stage::review::tests::the_reservation_is_measured_from_the_prompt_and_the_schemas ... ok
[INFO] [stdout] test stage::review::tests::the_change_description_goes_in_as_material_ahead_of_the_diff ... ok
[INFO] [stdout] test stage::review::tests::only_the_round_before_the_ceiling_is_told_it_is_the_last ... ok
[INFO] [stdout] test stage::review::tests::the_prompt_names_only_tools_that_are_really_registered ... ok
[INFO] [stdout] test stage::review::tests::the_whole_change_view_is_in_the_cached_half_of_the_prompt ... ok
[INFO] [stdout] test stage::review::tests::the_shipped_prompt_fills_and_leaves_no_marker_behind ... ok
[INFO] [stdout] test stage::review::tests::the_file_under_review_is_in_the_worktree_before_a_checker_is_offered ... ok
[INFO] [stdout] test stage::review::tests::the_outputs_of_one_round_share_a_single_ceiling ... ok
[INFO] [stdout] test stage::review::tests::the_concluding_turn_is_not_announced_as_another_round ... ok
[INFO] [stdout] test stage::review::tests::the_pieces_of_one_file_get_a_trace_each ... ok
[INFO] [stdout] test tests::a_budget_of_zero_still_finishes_the_run_and_names_what_it_could_not_review ... ok
[INFO] [stdout] test tests::a_missing_config_names_the_path_it_looked_at ... ok
[INFO] [stdout] test tests::a_diff_run_completes_without_a_platform ... ok
[INFO] [stdout] test tests::a_full_run_writes_every_stage_and_releases_the_lock ... ok
[INFO] [stdout] test tests::a_full_run_announces_every_stage_and_numbers_the_chunks ... ok
[INFO] [stdout] test tests::a_key_in_the_diff_never_reaches_the_model_or_the_trace ... ok
[INFO] [stdout] test tests::a_second_process_on_the_same_run_directory_fails_at_once ... ok
[INFO] [stdout] test tests::a_real_diff_reaches_the_model_as_one_chunk_per_surviving_file ... ok
[INFO] [stdout] test tests::a_finished_run_entered_again_rewrites_the_report_and_says_nothing_twice ... ok
[INFO] [stdout] test tests::an_mbox_is_refused_instead_of_being_stripped ... ok
[INFO] [stdout] test tests::a_run_over_a_checkout_leaves_every_file_byte_for_byte ... ok
[INFO] [stdout] test tests::a_run_entered_again_reports_every_stage_off_its_checkpoints ... ok
[INFO] [stdout] test tests::a_changed_review_table_leaves_input_and_plan_alone ... ok
[INFO] [stdout] test tests::an_explicit_run_id_pointed_at_another_input_fails ... ok
[INFO] [stdout] test tests::a_tool_the_model_calls_is_named_as_it_goes_out_and_returns ... ok
[INFO] [stdout] test tests::a_scored_run_writes_the_report_and_a_second_run_does_not_score_again ... ok
[INFO] [stdout] test tests::a_changed_plan_table_reruns_from_plan_in_the_same_run ... ok
[INFO] [stdout] test tests::run_parameters_do_not_change_identity_but_conclusions_do ... ok
[INFO] [stdout] test tests::the_error_type_stays_small_enough_to_return ... ok
[INFO] [stdout] test tests::publishing_a_raw_diff_fails_before_the_run_directory_exists ... ok
[INFO] [stdout] test tests::an_unreadable_checkpoint_falls_back_to_the_previous_snapshot ... ok
[INFO] [stdout] test tool::availability::tests::a_description_carries_the_mark_and_one_clause_not_the_paragraph ... ok
[INFO] [stdout] test tool::availability::tests::every_refusal_says_that_nothing_about_the_code_follows_from_it ... ok
[INFO] [stdout] test tool::availability::tests::having_nothing_to_read_is_named_ahead_of_what_it_causes ... ok
[INFO] [stdout] test tool::availability::tests::regex_and_keyword_are_independent ... ok
[INFO] [stdout] test tool::availability::tests::what_a_run_went_without_reads_as_coverage ... ok
[INFO] [stdout] test tool::command::tests::a_bin_inside_the_worktree_is_refused_even_after_the_config_passed ... ok
[INFO] [stdout] test tool::command::tests::a_checker_needing_a_checkout_is_offered_on_a_fetched_worktree_and_refuses ... ok
[INFO] [stdout] test tool::command::tests::a_checker_starts_in_the_run_checks_directory ... ok
[INFO] [stdout] test tests::an_unreadable_meta_starts_a_fresh_run_and_still_lists ... ok
[INFO] [stdout] test tests::instructions_are_byte_identical_across_two_chunks ... ok
[INFO] [stdout] test tool::command::tests::a_line_naming_a_denied_path_is_withheld_before_the_model_sees_it ... ok
[INFO] [stdout] test tool::command::tests::a_non_zero_exit_comes_back_as_a_result_with_its_status ... ok
[INFO] [stdout] test tool::command::tests::a_placeholder_expands_to_exactly_one_argv_element ... ok
[INFO] [stdout] test tool::command::tests::a_path_argument_is_fetched_before_the_checker_runs ... ok
[INFO] [stdout] test tool::command::tests::a_traversing_path_is_refused_before_anything_is_spawned ... ok
[INFO] [stdout] test tests::prune_takes_the_cache_and_the_checks_with_the_run ... ok
[INFO] [stdout] test tool::command::tests::an_empty_worktree_is_refused_without_a_directory ... ok
[INFO] [stdout] test tool::command::tests::an_argument_the_schema_does_not_declare_is_answered_not_run ... ok
[INFO] [stdout] test tests::what_the_author_wrote_reaches_every_review_request_as_material ... ok
[INFO] [stdout] test tool::command::tests::a_real_command_runs_in_the_worktree_with_only_the_whitelisted_environment ... ok
[INFO] [stdout] test tool::command::tests::the_schema_shown_to_the_model_comes_from_params ... ok
[INFO] [stdout] test tool::content::tests::a_fetch_batch_over_the_cap_is_refused_with_no_request ... ok
[INFO] [stdout] test tool::content::tests::a_file_over_max_file_bytes_is_refused_rather_than_clipped ... ok
[INFO] [stdout] test tool::command::tests::checker_output_paths_are_repository_relative ... ok
[INFO] [stdout] test tool::content::tests::a_file_too_big_to_return_is_refused_with_the_numbers_to_page_it ... ok
[INFO] [stdout] test tests::the_same_command_again_leaves_the_first_three_stages_alone ... ok
[INFO] [stdout] test tool::command::tests::the_command_is_given_the_argv_array_rather_than_a_shell_line ... ok
[INFO] [stdout] test tool::content::tests::a_search_does_not_warm_when_the_source_has_no_cached_body ... ok
[INFO] [stdout] test tool::content::tests::a_read_goes_through_the_worktree_and_stops_at_its_edge ... ok
[INFO] [stdout] test tool::content::tests::a_listing_past_the_ceiling_says_how_many_are_left ... ok
[INFO] [stdout] test tool::content::tests::a_search_drops_hits_in_denied_files ... ok
[INFO] [stdout] test tool::content::tests::a_mixed_fetch_batch_answers_each_path_and_lands_only_the_good_one ... ok
[INFO] [stdout] test tool::command::tests::output_past_the_ceiling_is_clipped_and_says_how_much_is_missing ... ok
[INFO] [stdout] test tool::content::tests::a_successful_read_records_what_was_fetched_and_narrows_to_the_range ... ok
[INFO] [stdout] test tool::content::tests::a_search_nothing_can_answer_says_so_rather_than_coming_back_empty ... ok
[INFO] [stdout] test tool::content::tests::an_empty_keyword_search_says_that_it_is_not_a_denial ... ok
[INFO] [stdout] test tool::content::tests::a_truncated_search_names_cut_files_with_counts_and_drops_denied_ones ... ok
[INFO] [stdout] test tool::content::tests::an_empty_worktree_says_so_in_the_description_and_again_in_the_refusal ... ok
[INFO] [stdout] test tool::content::tests::an_incomplete_listing_says_so_in_the_words_the_model_reads ... ok
[INFO] [stdout] test tool::content::tests::an_out_of_bounds_argument_is_refused_before_the_worktree_is_asked ... ok
[INFO] [stdout] test tool::content::tests::both_search_engines_work_when_the_platform_has_both ... ok
[INFO] [stdout] test tool::content::tests::half_a_line_range_is_answered_rather_than_guessed_at ... ok
[INFO] [stdout] test tool::command::tests::a_command_that_outlives_its_timeout_is_killed_and_reported ... ok
[INFO] [stdout] test tool::content::tests::keyword_only_refuses_regex_and_answers_keyword ... ok
[INFO] [stdout] test tests::debug_logging_publishing_and_retries_invalidate_nothing ... ok
[INFO] [stdout] test tool::content::tests::regex_only_refuses_keyword_and_answers_regex ... ok
[INFO] [stdout] test tool::content::tests::listings_drop_denied_paths_and_keep_ones_that_cannot_be_read ... ok
[INFO] [stdout] test tool::content::tests::listings_print_a_size_only_when_the_source_handed_one_over ... ok
[INFO] [stdout] test tests::the_same_command_again_leaves_a_finished_input_stage_alone ... ok
[INFO] [stdout] test tool::content::tests::the_descriptions_say_what_the_tool_does_not_which_worktree_this_is ... ok
[INFO] [stdout] test tool::content::tests::suggest_local_read_cuts_ranges_and_the_first_range_reads ... ok
[INFO] [stdout] test tool::content::tests::search_repo_regex_warms_held_bodies_so_the_next_read_is_local ... ok
[INFO] [stdout] test tool::registry::tests::an_unregistered_tool_is_reported_rather_than_guessed_at ... ok
[INFO] [stdout] test tool::registry::tests::execution_goes_through_the_registry_not_a_name_match ... ok
[INFO] [stdout] test tool::signature::tests::a_config_entry_declares_arguments_the_same_way ... ok
[INFO] [stdout] test tool::signature::tests::a_stringified_whole_number_is_that_number_at_every_depth ... ok
[INFO] [stdout] test tool::signature::tests::an_omitted_optional_stays_omitted_rather_than_becoming_a_default ... ok
[INFO] [stdout] test tool::signature::tests::nothing_else_is_read_as_a_number ... ok
[INFO] [stdout] test tool::content::tests::search_local_on_a_cache_states_the_corpus_and_skips_binaries ... ok
[INFO] [stdout] test tool::submit::resend_tests::a_complete_finding_is_recorded_without_a_lecture ... ok
[INFO] [stdout] test tool::registry::tests::a_round_advertises_only_the_tools_it_will_accept ... ok
[INFO] [stdout] test tool::signature::tests::the_schema_is_written_from_the_declaration ... ok
[INFO] [stdout] test tool::submit::tests::a_blank_call_is_refused ... ok
[INFO] [stdout] test tool::submit::tests::a_blank_summary_is_refused_rather_than_read_as_no_summary ... ok
[INFO] [stdout] test tool::content::tests::stat_answers_with_the_size_and_a_plan_and_no_content ... ok
[INFO] [stdout] test tool::registry::tests::a_tool_the_worktree_cannot_answer_is_refused_before_it_runs ... ok
[INFO] [stdout] test tool::signature::tests::a_refusal_names_the_argument_and_the_tool ... ok
[INFO] [stdout] test tool::submit::resend_tests::a_rejected_finding_says_it_was_not_filed_and_must_be_sent_again ... ok
[INFO] [stdout] test tool::submit::tests::a_complete_comment_is_recorded ... ok
[INFO] [stdout] test tool::submit::tests::a_diff_line_pasted_as_text_is_refused_as_a_line_number ... ok
[INFO] [stdout] test tool::submit::tests::a_finding_that_rests_on_no_diff_line_is_refused ... ok
[INFO] [stdout] test tool::submit::tests::a_finding_without_a_hang_point_is_refused ... ok
[INFO] [stdout] test tool::submit::tests::a_quoted_score_reaches_both_submissions ... ok
[INFO] [stdout] test tool::submit::tests::a_score_of_zero_is_a_score ... ok
[INFO] [stdout] test tool::submit::tests::a_score_that_is_not_an_integer_zero_to_a_hundred_is_refused ... ok
[INFO] [stdout] test tool::submit::tests::an_omitted_path_becomes_the_file_under_review ... ok
[INFO] [stdout] test tool::submit::tests::each_submission_belongs_to_its_own_rounds ... ok
[INFO] [stdout] test tool::submit::tests::nothing_else_is_read_as_a_score ... ok
[INFO] [stdout] test worktree::tests::a_cache_miss_is_a_miss_rather_than_a_fetch ... ok
[INFO] [stdout] test worktree::tests::a_cache_opens_under_the_run_directory ... ok
[INFO] [stdout] test worktree::tests::a_checkout_refuses_a_fetch_it_cannot_answer_rather_than_writing ... ok
[INFO] [stdout] test tool::submit::tests::a_missing_suggestion_is_refused_so_the_model_can_retry ... ok
[INFO] [stdout] test tool::submit::tests::a_quoted_whole_number_is_that_number ... ok
[INFO] [stdout] test worktree::tests::a_fetched_file_carries_no_execute_bit ... ok
[INFO] [stdout] test worktree::tests::a_file_over_the_ceiling_is_refused_before_it_is_downloaded ... ok
[INFO] [stdout] test worktree::tests::a_checkout_that_is_not_a_directory_is_refused_when_it_is_opened ... ok
[INFO] [stdout] test tool::submit::tests::a_summary_call_carries_the_score_and_the_text ... ok
[INFO] [stdout] test worktree::tests::a_listing_selects_by_glob_and_carries_the_size_the_walk_already_paid_for ... ok
[INFO] [stdout] test worktree::tests::a_local_file_over_the_ceiling_is_refused_without_being_read ... ok
[INFO] [stdout] test worktree::tests::an_empty_worktree_has_no_directory_and_answers_nothing ... ok
[INFO] [stdout] test worktree::tests::a_local_search_passes_over_binaries_and_says_how_many ... ok
[INFO] [stdout] test worktree::tests::a_read_can_be_narrowed_to_a_range ... ok
[INFO] [stdout] test worktree::tests::the_repository_half_answers_about_the_repository_not_about_the_disk ... ok
[INFO] [stdout] test worktree::tests::binary_content_is_refused_rather_than_written ... ok
[INFO] [stdout] test worktree::tests::a_worktree_with_no_repository_refuses_the_repository_half ... ok
[INFO] [stdout] test worktree::tests::the_shape_answers_for_itself ... ok
[INFO] [stdout] test worktree::tests::the_checkout_head_is_read_off_the_git_directory ... ok
[INFO] [stdout] test worktree::tests::a_stat_past_the_ceiling_has_the_bytes_and_no_line_count ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 419 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.51s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/build/reviewbot/5c2b24e06b993c36/out/reviewbot-5c2b24e06b993c36)
[INFO] [stdout] 
[INFO] [stdout] running 51 tests
[INFO] [stdout] test cli::args::tests::every_command_and_argument_carries_help ... ok
[INFO] [stdout] test cli::args::tests::help_shows_defaults_the_way_clap_does ... ok
[INFO] [stdout] test cli::args::tests::retries_defaults_to_two ... ok
[INFO] [stdout] test cli::args::tests::the_command_line_surface_is_internally_consistent ... ok
[INFO] [stdout] test cli::args::tests::the_commands_that_only_re_entered_a_run_no_longer_parse ... ok
[INFO] [stdout] test cli::args::tests::the_old_catalog_nouns_no_longer_parse ... ok
[INFO] [stdout] test cli::args::tests::trace_is_under_run_not_a_top_level_noun ... ok
[INFO] [stdout] test cli::args::tests::the_old_plural_nouns_no_longer_parse ... ok
[INFO] [stdout] test cli::args::tests::verbosity_flags_no_longer_parse ... ok
[INFO] [stdout] test cli::render::tests::a_budget_of_minus_one_or_zero_reads_as_words ... ok
[INFO] [stdout] test cli::render::tests::a_catalog_is_a_boxed_table ... ok
[INFO] [stdout] test cli::args::tests::commands_are_listed_in_semantic_order ... ok
[INFO] [stdout] test cli::args::tests::prune_keep_latest_defaults_to_zero ... ok
[INFO] [stdout] test cli::args::tests::the_full_surface_parses ... ok
[INFO] [stdout] test cli::args::tests::the_commands_that_need_spelling_out_have_a_long_help ... ok
[INFO] [stdout] test cli::render::tests::a_conversation_prints_the_prompt_diff_tools_reply_reasoning_and_usage ... ok
[INFO] [stdout] test cli::render::tests::check_fields_align_to_the_credential_label ... ok
[INFO] [stdout] test cli::render::tests::money_puts_the_currency_after_the_amount ... ok
[INFO] [stdout] test cli::render::tests::pad_table_aligns_to_the_widest_cell ... ok
[INFO] [stdout] test cli::render::tests::a_command_line_that_did_not_parse_takes_the_same_shape ... ok
[INFO] [stdout] test cli::render::tests::two_conversations_follow_without_a_rule ... ok
[INFO] [stdout] test cli::render::tests::unix_timestamps_print_as_utc ... ok
[INFO] [stdout] test cli::render::tests::prune_is_one_sentence_and_zero_is_nothing ... ok
[INFO] [stdout] test cli::screen::tests::a_finished_run_leaves_the_moving_row_empty ... ok
[INFO] [stdout] test cli::screen::tests::a_header_too_long_for_one_row_uses_the_second ... ok
[INFO] [stdout] test cli::screen::tests::a_later_file_is_thinking_again ... ok
[INFO] [stdout] test cli::render::tests::a_split_file_puts_piece_in_the_header ... ok
[INFO] [stdout] test cli::screen::tests::a_stage_that_has_not_started_is_marked_and_says_nothing_else ... ok
[INFO] [stdout] test cli::render::tests::a_tool_without_arguments_still_shows_the_slots ... ok
[INFO] [stdout] test cli::render::tests::an_invocation_is_echoed_as_one_line_a_shell_reads_back_the_same_way ... ok
[INFO] [stdout] test cli::screen::tests::a_stage_with_nothing_more_specific_says_what_it_is_doing ... ok
[INFO] [stdout] test cli::screen::tests::handing_the_terminal_back_leaves_the_cursor_where_the_block_began ... ok
[INFO] [stdout] test cli::screen::tests::the_activity_rows_are_set_apart_and_say_what_is_being_done ... ok
[INFO] [stdout] test cli::screen::tests::the_block_is_exactly_the_viewport_and_names_every_stage_up_front ... ok
[INFO] [stdout] test cli::screen::tests::the_last_round_before_the_ceiling_says_so ... ok
[INFO] [stdout] test cli::screen::tests::the_last_turn_says_concluding ... ok
[INFO] [stdout] test cli::screen::tests::the_spinner_advances_between_frames ... ok
[INFO] [stdout] test cli::screen::tests::thinking_says_so_and_nothing_else ... ok
[INFO] [stdout] test cli::screen::tests::paths_are_shortened_where_they_carry_least ... ok
[INFO] [stdout] test cli::screen::tests::the_frame_before_a_run_has_a_name_still_says_something ... ok
[INFO] [stdout] test cli::status::tests::a_file_line_carries_the_running_spend ... ok
[INFO] [stdout] test cli::status::tests::a_new_file_is_counted_once_however_many_chunks_it_takes ... ok
[INFO] [stdout] test cli::status::tests::a_pipe_appends_the_run_its_files_and_its_finished_stages ... ok
[INFO] [stdout] test cli::status::tests::a_resumed_file_keeps_its_place_in_the_plan ... ok
[INFO] [stdout] test cli::status::tests::the_events_inside_a_chunk_do_not_each_get_a_line ... ok
[INFO] [stdout] test cli::render::tests::a_directory_recording_another_input_is_not_offered_the_command_back ... ok
[INFO] [stdout] test cli::status::tests::a_tool_coming_back_ends_the_wait_it_explained ... ok
[INFO] [stdout] test cli::status::tests::the_facts_a_chunk_establishes_are_the_ones_a_screen_needs ... ok
[INFO] [stdout] test cli::render::tests::a_failure_in_a_run_prints_the_run_id_and_the_command_that_goes_back_in ... ok
[INFO] [stdout] test cli::logging::tests::switching_flushes_the_buffer_and_appends_to_an_existing_log ... ok
[INFO] [stderr]      Running tests/cli.rs (/opt/rustwide/target/release/build/reviewbot/1c97d515bd796988/out/cli-1c97d515bd796988)
[INFO] [stdout] test cli::status::tests::a_later_file_is_not_still_the_conclusion ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 51 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 25 tests
[INFO] [stdout] test a_missing_config_exits_two_and_names_the_path_on_stderr ... ok
[INFO] [stdout] test a_target_that_is_neither_a_url_nor_a_file_says_so ... ok
[INFO] [stdout] test a_parse_error_is_set_off_like_every_other_error_and_help_is_not ... ok
[INFO] [stdout] test config_check_in_json_prints_parsable_json_and_nothing_else ... ok
[INFO] [stdout] test a_reference_that_does_not_resolve_is_a_config_error_not_an_unexpected_one ... ok
[INFO] [stdout] test an_unreadable_credential_is_a_config_error ... ok
[INFO] [stdout] test config_info_json_is_parseable ... ok
[INFO] [stdout] test config_info_prints_tool_contracts_the_way_tool_list_did ... ok
[INFO] [stdout] test config_info_text_has_every_section_and_the_file_field_names ... ok
[INFO] [stdout] test config_check_validates_locally_and_writes_nothing_to_stderr ... ok
[INFO] [stdout] test quiet_json_still_prints_json ... ok
[INFO] [stdout] test config_info_names_platform_hosts_and_provider_budgets ... ok
[INFO] [stdout] test a_diff_input_with_publish_fails_before_anything_is_written ... ok
[INFO] [stdout] test a_piped_review_appends_progress_then_the_text_summary ... ok
[INFO] [stdout] test run_list_text_aligns_spent_with_currency_and_utc ... ok
[INFO] [stdout] test an_unknown_subcommand_exits_two ... ok
[INFO] [stdout] test the_example_config_passes_config_check_with_dummy_env ... ok
[INFO] [stdout] test quiet_leaves_stdout_empty_on_success ... ok
[INFO] [stdout] test run_list_json_is_an_object_with_runs_dir ... ok
[INFO] [stdout] test trace_prints_conversations_and_filters_by_trace_id ... ok
[INFO] [stdout] test config_init_writes_the_example_and_prints_the_path ... ok
[INFO] [stdout] test run_remove_deletes_one_run_and_prints_nothing ... ok
[INFO] [stdout] test run_prune_dry_run_lists_and_does_not_delete ... ok
[INFO] [stdout] test a_config_change_leaves_a_line_in_the_run_log_saying_what_it_cost ... ok
[INFO] [stderr]    Doc-tests reviewbot
[INFO] [stdout] test the_input_format_is_judged_by_content_not_by_extension ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 25 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.53s
[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" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35", kill_on_drop: false }`
[INFO] [stdout] f5b2170d3d9288b5ff84ff9eaf3b07cf30ee130fe98b297df9c254fbe6a3ba35
