[INFO] cloning repository https://github.com/philppplik/true-code
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/philppplik/true-code" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fphilppplik%2Ftrue-code", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fphilppplik%2Ftrue-code'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 10886da709f5bc5d4a1baab5541ca55f961dfe02
[INFO] testing philppplik/true-code against 1.99.0-beta.8 for beta-1.100-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fphilppplik%2Ftrue-code" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/philppplik/true-code
[INFO] finished tweaking git repo https://github.com/philppplik/true-code
[INFO] tweaked toml for git repo https://github.com/philppplik/true-code written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/philppplik/true-code on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/philppplik/true-code 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.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded libredox v0.1.24
[INFO] [stderr]   Downloaded linux-keyutils v0.2.5
[INFO] [stderr]   Downloaded instability v0.3.10
[INFO] [stderr]   Downloaded process-wrap v10.0.0
[INFO] [stderr]   Downloaded rmcp v3.3.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28
[INFO] running `Command { std: "docker" "start" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28", 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" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28", 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" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.107
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling memchr v2.8.3
[INFO] [stderr]    Compiling log v0.4.34
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling futures-core v0.3.34
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling bitflags v2.13.2
[INFO] [stderr]    Compiling bytes v1.12.1
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling smallvec v1.16.1
[INFO] [stderr]    Compiling futures-sink v0.3.34
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling futures-io v0.3.34
[INFO] [stderr]    Compiling futures-task v0.3.34
[INFO] [stderr]    Compiling futures-channel v0.3.34
[INFO] [stderr]    Compiling zmij v1.0.23
[INFO] [stderr]    Compiling find-msvc-tools v0.1.12
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling writeable v0.6.4
[INFO] [stderr]    Compiling litemap v0.8.3
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling unicode-segmentation v1.13.3
[INFO] [stderr]    Compiling cc v1.4.6
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling aho-corasick v1.1.5
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling rustversion v1.0.23
[INFO] [stderr]    Compiling crossbeam-utils v0.8.23
[INFO] [stderr]    Compiling iana-time-zone v0.1.65
[INFO] [stderr]    Compiling rustls-pki-types v1.15.1
[INFO] [stderr]    Compiling http v1.5.0
[INFO] [stderr]    Compiling rustls v0.23.45
[INFO] [stderr]    Compiling either v1.18.0
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.21
[INFO] [stderr]    Compiling winnow v1.0.4
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling unicode-width v0.2.0
[INFO] [stderr]    Compiling toml_parser v1.1.3+spec-1.1.0
[INFO] [stderr]    Compiling toml_writer v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling syn v3.0.5
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling instability v0.3.10
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling crossbeam-deque v0.8.8
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling compact_str v0.9.1
[INFO] [stderr]    Compiling lru v0.18.4
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]    Compiling bstr v1.13.1
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling critical-section v1.2.0
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling cfg_aliases v0.2.2
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling ipnet v2.12.2
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling http-body v1.1.0
[INFO] [stderr]    Compiling nix v0.31.3
[INFO] [stderr]    Compiling webpki-roots v1.0.9
[INFO] [stderr]    Compiling time-core v0.1.9
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling http-body-util v0.1.5
[INFO] [stderr]    Compiling line-clipping v0.3.8
[INFO] [stderr]    Compiling similar v2.7.0
[INFO] [stderr]    Compiling anyhow v1.0.104
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling rmcp v3.3.0
[INFO] [stderr]    Compiling clap_builder v4.6.6
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling thread_local v1.1.10
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling mio v1.2.3
[INFO] [stderr]    Compiling socket2 v0.6.5
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling linux-keyutils v0.2.5
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling regex-automata v0.4.18
[INFO] [stderr]    Compiling directories v6.0.0
[INFO] [stderr]    Compiling keyring v3.6.3
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling time v0.3.55
[INFO] [stderr]    Compiling rtoolbox v0.0.6
[INFO] [stderr]    Compiling tc-cli v0.1.0 (/opt/rustwide/workdir/crates/tc-cli)
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling rpassword v7.5.4
[INFO] [stderr]    Compiling eventsource-stream v0.2.3
[INFO] [stderr]    Compiling serde_spanned v1.1.1
[INFO] [stderr]    Compiling toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling uuid v1.26.1
[INFO] [stderr]    Compiling indexmap v2.14.2
[INFO] [stderr]    Compiling toml v1.1.6+spec-1.1.0
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.6
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling futures-macro v0.3.34
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling async-trait v0.1.92
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]    Compiling globset v0.4.20
[INFO] [stderr]    Compiling regex v1.13.1
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling rustls-webpki v0.103.15
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling ignore v0.4.33
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling strum_macros v0.28.0
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling clap v4.6.6
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]    Compiling zerovec v0.11.8
[INFO] [stderr]    Compiling zerotrie v0.2.5
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling strum v0.28.0
[INFO] [stderr]    Compiling ratatui-core v0.1.2
[INFO] [stderr]    Compiling tinystr v0.8.4
[INFO] [stderr]    Compiling potential_utf v0.1.6
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling futures-executor v0.3.34
[INFO] [stderr]    Compiling futures v0.3.34
[INFO] [stderr]    Compiling chrono v0.4.45
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling tracing-serde v0.2.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling ratatui-widgets v0.3.2
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.2
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling tc-core v0.1.0 (/opt/rustwide/workdir/crates/tc-core)
[INFO] [stderr]    Compiling ratatui-macros v0.7.2
[INFO] [stderr]    Compiling ratatui v0.30.2
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling tokio-util v0.7.19
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling tokio-rustls v0.26.5
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling process-wrap v10.0.0
[INFO] [stderr]    Compiling tokio-stream v0.1.19
[INFO] [stderr]    Compiling tc-config v0.1.0 (/opt/rustwide/workdir/crates/tc-config)
[INFO] [stderr]    Compiling tc-tools v0.1.0 (/opt/rustwide/workdir/crates/tc-tools)
[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 reqwest v0.12.28
[INFO] [stderr]    Compiling tc-providers v0.1.0 (/opt/rustwide/workdir/crates/tc-providers)
[INFO] [stderr]    Compiling tc-agent v0.1.0 (/opt/rustwide/workdir/crates/tc-agent)
[INFO] [stderr]    Compiling tc-tui v0.1.0 (/opt/rustwide/workdir/crates/tc-tui)
[INFO] [stderr]    Compiling tc-mcp v0.1.0 (/opt/rustwide/workdir/crates/tc-mcp)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 48s
[INFO] running `Command { std: "docker" "inspect" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28", 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" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling fastrand v2.5.0
[INFO] [stderr]    Compiling tc-config v0.1.0 (/opt/rustwide/workdir/crates/tc-config)
[INFO] [stderr]    Compiling tc-core v0.1.0 (/opt/rustwide/workdir/crates/tc-core)
[INFO] [stderr]    Compiling tc-providers v0.1.0 (/opt/rustwide/workdir/crates/tc-providers)
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling tc-agent v0.1.0 (/opt/rustwide/workdir/crates/tc-agent)
[INFO] [stderr]    Compiling tc-mcp v0.1.0 (/opt/rustwide/workdir/crates/tc-mcp)
[INFO] [stderr]    Compiling tc-tools v0.1.0 (/opt/rustwide/workdir/crates/tc-tools)
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.2
[INFO] [stderr]    Compiling ratatui v0.30.2
[INFO] [stderr]    Compiling tc-tui v0.1.0 (/opt/rustwide/workdir/crates/tc-tui)
[INFO] [stderr]    Compiling tc-cli v0.1.0 (/opt/rustwide/workdir/crates/tc-cli)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 38.70s
[INFO] running `Command { std: "docker" "inspect" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28", 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" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.57s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/tc_agent-3375ac84ed2d6d53)
[INFO] [stdout] 
[INFO] [stdout] running 89 tests
[INFO] [stdout] test approval::tests::a_command_request_summarises_the_command ... ok
[INFO] [stdout] test approval::tests::a_write_request_summarises_the_file_and_the_line_counts ... ok
[INFO] [stdout] test checkpoint::tests::a_project_with_no_sessions_reports_nothing_to_undo ... ok
[INFO] [stdout] test approval::tests::the_opt_in_approver_still_refuses_a_change_that_breaks_a_rule ... ok
[INFO] [stdout] test checkpoint::tests::a_missing_backup_is_reported_rather_than_silently_skipped ... ok
[INFO] [stdout] test checkpoint::tests::repeated_edits_to_one_file_undo_one_step_at_a_time ... ok
[INFO] [stdout] test checkpoint::tests::an_already_reverted_checkpoint_is_skipped ... ok
[INFO] [stdout] test approval::tests::the_opt_in_approver_accepts ... ok
[INFO] [stdout] test checkpoint::tests::capturing_a_missing_file_is_not_an_error ... ok
[INFO] [stdout] test checkpoint::tests::two_captures_of_one_file_produce_two_backups ... ok
[INFO] [stdout] test commands::tests::a_body_with_no_placeholders_is_unchanged_when_nothing_was_typed ... ok
[INFO] [stdout] test checkpoint::tests::a_truncated_final_line_does_not_make_the_log_unreadable ... ok
[INFO] [stdout] test checkpoint::tests::restoring_puts_the_old_contents_back ... ok
[INFO] [stdout] test checkpoint::tests::undoing_a_created_file_deletes_it ... ok
[INFO] [stdout] test checkpoint::tests::undoing_an_already_deleted_file_is_not_an_error ... ok
[INFO] [stdout] test commands::tests::commands_are_listed_in_a_stable_order ... ok
[INFO] [stdout] test commands::tests::a_project_with_no_commands_is_not_an_error ... ok
[INFO] [stdout] test commands::tests::an_unknown_frontmatter_key_is_ignored_rather_than_refused ... ok
[INFO] [stdout] test commands::tests::arguments_are_appended_when_the_body_has_nowhere_to_put_them ... ok
[INFO] [stdout] test checkpoint::tests::a_log_with_no_changes_has_nothing_to_undo ... ok
[INFO] [stdout] test commands::tests::a_file_without_frontmatter_is_all_prompt ... ok
[INFO] [stdout] test approval::tests::the_default_approver_refuses ... ok
[INFO] [stdout] test commands::tests::dollar_arguments_takes_everything_typed ... ok
[INFO] [stdout] test checkpoint::tests::the_newest_unreverted_checkpoint_is_the_one_to_undo ... ok
[INFO] [stdout] test commands::tests::frontmatter_is_read_and_kept_out_of_the_prompt ... ok
[INFO] [stdout] test commands::tests::the_summary_shows_the_argument_hint_when_there_is_one ... ok
[INFO] [stdout] test hooks::tests::a_project_with_no_hook_file_is_not_an_error ... ok
[INFO] [stdout] test checkpoint::tests::capturing_an_existing_file_saves_its_contents ... ok
[INFO] [stdout] test commands::tests::a_placeholder_with_no_argument_becomes_empty_rather_than_literal ... ok
[INFO] [stdout] test learn::tests::a_concept_answered_correctly_twice_looks_solid ... ok
[INFO] [stdout] test learn::tests::a_concept_missed_at_least_half_the_time_needs_revisiting ... ok
[INFO] [stdout] test learn::tests::a_correct_index_outside_the_options_is_rejected ... ok
[INFO] [stdout] test learn::tests::a_fenced_code_block_is_tolerated ... ok
[INFO] [stdout] test learn::tests::a_fresh_profile_adds_nothing_to_the_prompt ... ok
[INFO] [stdout] test learn::tests::a_missing_profile_is_a_fresh_start_not_an_error ... ok
[INFO] [stdout] test hooks::tests::an_invalid_pattern_is_caught_at_load_rather_than_mid_run ... ok
[INFO] [stdout] test hooks::tests::a_refusal_stops_the_hooks_behind_it ... ok
[INFO] [stdout] test learn::tests::an_answer_with_no_json_is_reported_rather_than_guessed_at ... ok
[INFO] [stdout] test hooks::tests::a_hook_with_no_pattern_runs_for_every_tool ... ok
[INFO] [stdout] test learn::tests::past_difficulty_is_what_the_prompt_carries ... ok
[INFO] [stdout] test learn::tests::a_well_formed_question_parses ... ok
[INFO] [stdout] test learn::tests::an_empty_explanation_is_rejected ... ok
[INFO] [stdout] test learn::tests::a_corrupt_profile_starts_fresh_rather_than_failing_the_session ... ok
[INFO] [stdout] test learn::tests::a_question_with_one_option_is_rejected ... ok
[INFO] [stdout] test hooks::tests::a_hook_only_runs_for_a_tool_its_pattern_matches ... ok
[INFO] [stdout] test learn::tests::the_profile_counts_attempts_per_concept ... ok
[INFO] [stdout] test learn::tests::the_generation_prompt_forbids_the_easy_useless_question ... ok
[INFO] [stdout] test proof::tests::a_build_alone_is_only_partly_verified ... ok
[INFO] [stdout] test learn::tests::the_profile_round_trips_through_a_file ... ok
[INFO] [stdout] test learn::tests::weak_spots_come_back_worst_first ... ok
[INFO] [stdout] test proof::tests::a_change_with_no_checks_is_unverified ... ok
[INFO] [stdout] test hooks::tests::a_stop_hook_ignores_the_tool_pattern ... ok
[INFO] [stdout] test proof::tests::a_command_that_proves_nothing_is_not_listed ... ok
[INFO] [stdout] test proof::tests::a_failing_lint_is_still_a_failure ... ok
[INFO] [stdout] test proof::tests::a_failing_check_outranks_everything_else ... ok
[INFO] [stdout] test proof::tests::repeated_edits_to_one_file_are_listed_once ... ok
[INFO] [stdout] test proof::tests::broken_rules_appear_in_the_panel ... ok
[INFO] [stdout] test proof::tests::a_run_that_changed_nothing_and_checked_nothing_shows_nothing ... ok
[INFO] [stdout] test hooks::tests::exit_code_two_after_the_fact_is_a_failure_not_a_refusal ... ok
[INFO] [stdout] test hooks::tests::exit_code_two_refuses_the_call ... ok
[INFO] [stdout] test hooks::tests::any_other_failure_is_reported_but_does_not_block ... ok
[INFO] [stdout] test tests::adjacent_text_blocks_are_merged ... ok
[INFO] [stdout] test proof::tests::only_a_failure_or_a_missing_check_is_treated_as_alarming ... ok
[INFO] [stdout] test session::tests::a_disabled_log_still_counts_events_and_never_panics ... ok
[INFO] [stdout] test proof::tests::passing_tests_earn_a_verified_verdict ... ok
[INFO] [stdout] test tests::every_finish_reason_explains_itself_to_the_user ... ok
[INFO] [stdout] test tests::arguments_are_summarised_without_json_noise ... ok
[INFO] [stdout] test proof::tests::the_panel_shows_each_check_with_its_exit_code ... ok
[INFO] [stdout] test tests::each_mode_tells_the_model_what_it_can_actually_do ... ok
[INFO] [stdout] test proof::tests::the_panel_states_plainly_that_nothing_ran ... ok
[INFO] [stdout] test session::tests::tool_events_round_trip_through_the_log ... ok
[INFO] [stdout] test proof::tests::the_unverified_verdict_says_what_to_do_about_it ... ok
[INFO] [stdout] test commands::tests::non_markdown_files_are_left_alone ... ok
[INFO] [stdout] test session::tests::every_event_carries_the_session_id ... ok
[INFO] [stdout] test session::tests::an_unwritable_root_degrades_instead_of_failing ... ok
[INFO] [stdout] test proof::tests::checks_without_changes_still_count_as_verification ... ok
[INFO] [stdout] test session::tests::reopening_a_session_appends_rather_than_truncating ... ok
[INFO] [stdout] test session::tests::events_are_appended_in_order_with_gap_free_sequence_numbers ... ok
[INFO] [stdout] test tests::merging_text_does_not_reorder_tool_calls ... ok
[INFO] [stdout] test tests::summarising_a_non_object_yields_an_empty_line ... ok
[INFO] [stdout] test tests::tool_calls_are_extracted_in_order ... ok
[INFO] [stdout] test tests::write_mode_admits_it_cannot_run_the_tests ... ok
[INFO] [stdout] test tests::the_loop_message_names_the_offending_tool ... ok
[INFO] [stdout] test tests::the_system_prompt_contains_nothing_dynamic ... ok
[INFO] [stdout] test tests::the_mode_suffix_is_appended_so_the_cached_prefix_stays_stable ... ok
[INFO] [stdout] test tests::the_prompt_asks_for_the_two_habits_that_matter_most ... ok
[INFO] [stdout] test tests::the_turn_limit_message_suggests_what_to_do_next ... ok
[INFO] [stdout] test commands::tests::numbered_placeholders_take_one_word_each ... ok
[INFO] [stdout] test checkpoint::tests::the_most_recently_written_session_is_chosen ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 89 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/agent_loop.rs (/opt/rustwide/target/debug/deps/agent_loop-9b319943a8caed3d)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test a_truncated_answer_is_reported_as_such ... ok
[INFO] [stdout] test an_unknown_tool_is_an_error_the_model_can_recover_from ... ok
[INFO] [stdout] test a_plain_answer_finishes_in_one_turn ... ok
[INFO] [stdout] test a_tool_error_is_reported_and_the_run_continues ... ok
[INFO] [stdout] test a_provider_failure_is_surfaced_rather_than_swallowed ... ok
[INFO] [stdout] test repeating_one_identical_tool_call_stops_the_run ... ok
[INFO] [stdout] test a_tool_call_runs_and_its_result_drives_a_second_turn ... ok
[INFO] [stdout] test the_session_log_records_the_whole_run ... ok
[INFO] [stdout] test the_budget_stops_the_run_before_the_next_request ... ok
[INFO] [stdout] test tool_arguments_are_never_logged_before_the_tool_runs_out_of_order ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/approval.rs (/opt/rustwide/target/debug/deps/approval-bb7d2e11b56463e7)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test shell_is_unavailable_below_full_mode ... ok
[INFO] [stdout] test read_only_mode_never_offers_a_way_to_write ... ok
[INFO] [stdout] test a_patch_that_cannot_apply_never_reaches_the_prompt ... ok
[INFO] [stdout] test a_write_outside_the_workspace_is_refused_before_the_prompt ... ok
[INFO] [stdout] test a_declined_write_never_reaches_the_disk ... ok
[INFO] [stdout] test aborting_at_the_prompt_ends_the_run_without_writing ... ok
[INFO] [stdout] test the_approval_decision_is_recorded_in_the_session_log ... ok
[INFO] [stdout] test a_write_that_changes_nothing_does_not_ask ... ok
[INFO] [stdout] test an_approved_write_is_applied ... ok
[INFO] [stderr]      Running tests/constraints.rs (/opt/rustwide/target/debug/deps/constraints-5af8b372934ed9aa)
[INFO] [stdout] test approving_a_tool_for_the_session_stops_the_asking ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test a_project_without_rules_behaves_exactly_as_before ... ok
[INFO] [stdout] test a_forbidden_command_is_caught_before_it_runs ... ok
[INFO] [stdout] test auto_approval_refuses_a_change_that_breaks_a_rule ... ok
[INFO] [stdout] test auto_approval_still_allows_a_clean_change ... ok
[INFO] [stdout] test the_violation_is_recorded_in_the_session_log ... ok
[INFO] [stdout] test a_violation_is_shown_to_the_user_before_the_change_is_applied ... ok
[INFO] [stdout] test a_clean_change_is_not_held_up_by_an_unrelated_rule ... ok
[INFO] [stdout] test approving_anyway_tells_the_model_it_broke_a_rule ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/hooks.rs (/opt/rustwide/target/debug/deps/hooks-5006374572f6698d)
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test the_model_is_told_why_the_call_was_refused ... ok
[INFO] [stdout] test a_merely_broken_hook_does_not_block_the_agent ... ok
[INFO] [stdout] test a_post_tool_hooks_findings_reach_the_model ... ok
[INFO] [stdout] test a_hook_for_a_different_tool_does_not_interfere ... ok
[INFO] [stdout] test a_pre_tool_hook_that_refuses_stops_the_write_from_happening ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/learn.rs (/opt/rustwide/target/debug/deps/learn-dac0d758b0b63adc)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test past_difficulty_reaches_the_question_prompt ... ok
[INFO] [stdout] test a_run_that_changed_nothing_is_not_quizzed ... ok
[INFO] [stdout] test a_question_follows_a_change_when_teaching_is_on ... ok
[INFO] [stdout] test an_unusable_question_is_dropped_without_failing_the_run ... ok
[INFO] [stdout] test a_wrong_answer_names_the_right_one ... ok
[INFO] [stdout] test the_question_arrives_after_the_proof_panel ... ok
[INFO] [stdout] test the_question_is_billed_like_any_other_call ... ok
[INFO] [stdout] test nothing_is_asked_unless_teaching_is_on ... ok
[INFO] [stdout] test a_correct_answer_is_recorded_and_still_explains ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/proof.rs (/opt/rustwide/target/debug/deps/proof-d8264798869c0ae1)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test a_read_only_run_that_changes_nothing_produces_no_panel ... ok
[INFO] [stdout] test a_guard_rail_stop_still_produces_a_panel ... ok
[INFO] [stdout] test a_passing_test_command_earns_a_verified_verdict ... ok
[INFO] [stdout] test each_prompt_gets_its_own_panel ... ok
[INFO] [stdout] test a_change_with_no_checks_is_reported_as_unverified ... ok
[INFO] [stdout] test a_failing_check_is_reported_however_the_model_summarises_it ... ok
[INFO] [stdout] test a_command_that_proves_nothing_earns_no_credit ... ok
[INFO] [stdout] test the_panel_arrives_before_the_run_is_declared_finished ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/undo.rs (/opt/rustwide/target/debug/deps/undo-ce1d04980893934a)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test a_read_only_session_never_records_a_checkpoint ... ok
[INFO] [stdout] test the_checkpoint_is_recorded_before_the_change_is_applied ... ok
[INFO] [stdout] test a_declined_change_leaves_nothing_to_undo ... ok
[INFO] [stdout] test undoing_a_created_file_removes_it_again ... ok
[INFO] [stdout] test undo_restores_the_file_the_agent_changed ... ok
[INFO] [stdout] test undo_reports_clearly_when_there_is_nothing_to_undo ... ok
[INFO] [stdout] test undo_works_from_a_later_process_via_the_session_log ... ok
[INFO] [stdout] test reopening_a_log_continues_the_sequence_numbers ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/tc_cli-e9f1d38a662fbe86)
[INFO] [stdout] test undo_walks_backwards_one_change_at_a_time ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/true-code.rs (/opt/rustwide/target/debug/deps/true_code-287483259542ef2b)
[INFO] [stdout] running 9 tests
[INFO] [stderr]      Running unittests src/bin/truecode.rs (/opt/rustwide/target/debug/deps/truecode-e5c3f50ab09bda6b)
[INFO] [stdout] test tests::no_arguments_means_the_interactive_tui ... ok
[INFO] [stdout] test remote::tests::the_user_agent_names_the_tool_and_version ... ok
[INFO] [stdout] test tests::print_mode_is_available_as_dash_p ... ok
[INFO] [stdout] test tests::the_cli_definition_is_valid ... ok
[INFO] [stdout] test remote::tests::a_per_token_price_becomes_a_per_million_one ... ok
[INFO] [stdout] test remote::tests::a_missing_or_unparsable_price_is_marked_unknown ... ok
[INFO] [stdout] test tests::the_model_can_be_overridden_on_the_command_line ... ok
[INFO] [stdout] test tests::introspection_subcommands_are_reachable ... ok
[INFO] [stdout] test remote::tests::a_zero_price_is_shown_as_free ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/tc_config-81ad4394f9f07c6b)
[INFO] [stdout] 
[INFO] [stdout] running 28 tests
[INFO] [stdout] test catalog::tests::a_catalogued_gateway_model_keeps_its_price ... ok
[INFO] [stdout] test catalog::tests::a_vendor_shared_with_the_gateway_follows_the_chosen_provider ... ok
[INFO] [stdout] test catalog::tests::a_model_we_cannot_price_says_so_rather_than_guessing ... ok
[INFO] [stdout] test catalog::tests::a_gateway_id_may_also_carry_our_prefix ... ok
[INFO] [stdout] test catalog::tests::an_identifier_without_a_vendor_prefix_is_rejected ... ok
[INFO] [stdout] test catalog::tests::any_model_resolves_through_a_gateway_that_proxies_everything ... ok
[INFO] [stdout] test catalog::tests::cached_input_is_never_more_expensive_than_fresh_input ... ok
[INFO] [stdout] test catalog::tests::identifiers_are_unique ... ok
[INFO] [stdout] test catalog::tests::a_fixed_provider_still_rejects_a_model_it_does_not_have ... ok
[INFO] [stdout] test catalog::tests::vendor_identifiers_are_unique ... ok
[INFO] [stdout] test catalog::tests::a_gateway_model_id_is_taken_verbatim ... ok
[INFO] [stdout] test secrets::tests::a_blank_value_counts_as_unset_in_either_source ... ok
[INFO] [stdout] test catalog::tests::every_entry_names_a_known_vendor_and_is_priced ... ok
[INFO] [stdout] test catalog::tests::every_vendor_is_reachable_and_documented ... ok
[INFO] [stdout] test secrets::tests::both_sources_describe_themselves ... ok
[INFO] [stdout] test catalog::tests::the_defaults_resolve_together ... ok
[INFO] [stdout] test secrets::tests::no_key_anywhere_yields_nothing ... ok
[INFO] [stdout] test secrets::tests::the_environment_is_preferred_over_the_keyring ... ok
[INFO] [stdout] test secrets::tests::the_keyring_is_used_when_the_environment_is_unset ... ok
[INFO] [stdout] test secrets::tests::a_missing_key_names_both_ways_to_supply_one ... ok
[INFO] [stdout] test secrets::tests::a_keyring_failure_points_at_the_environment_instead ... ok
[INFO] [stdout] test tests::a_zero_budget_means_unlimited_rather_than_instantly_exhausted ... ok
[INFO] [stdout] test tests::unknown_keys_are_rejected_instead_of_silently_ignored ... ok
[INFO] [stdout] test tests::a_layer_overrides_only_the_keys_it_sets ... ok
[INFO] [stdout] test tests::a_missing_project_config_is_not_an_error ... ok
[INFO] [stdout] test tests::budget_warns_before_it_stops ... ok
[INFO] [stdout] test tests::defaults_point_at_a_model_that_exists_in_the_catalogue ... ok
[INFO] [stdout] test catalog::tests::an_unknown_model_from_a_fixed_vendor_is_rejected ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 28 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/tc_core-6380966420c3b10b)
[INFO] [stdout] 
[INFO] [stdout] running 17 tests
[INFO] [stdout] test cost::tests::usage_accumulates_across_turns ... ok
[INFO] [stdout] test cost::tests::free_price_never_charges ... ok
[INFO] [stdout] test message::tests::tool_results_are_grouped_into_one_user_message ... ok
[INFO] [stdout] test event::tests::kind_is_flattened_so_logs_stay_greppable ... ok
[INFO] [stdout] test message::tests::text_delta_round_trips_through_json ... ok
[INFO] [stdout] test event::tests::jsonl_is_exactly_one_line ... ok
[INFO] [stdout] test message::tests::tool_call_delta_round_trips_through_json ... ok
[INFO] [stdout] test cost::tests::cost_of_prices_each_token_class_separately ... ok
[INFO] [stdout] test message::tests::constructors_assign_the_expected_role ... ok
[INFO] [stdout] test cost::tests::cache_hit_rate_is_none_without_input_tokens ... ok
[INFO] [stdout] test event::tests::jsonl_round_trips_without_loss ... ok
[INFO] [stdout] test cost::tests::cache_hit_rate_reports_the_cached_share ... ok
[INFO] [stdout] test event::tests::session_ids_are_unique ... ok
[INFO] [stdout] test message::tests::text_content_joins_every_text_block ... ok
[INFO] [stdout] test cost::tests::sub_cent_amounts_keep_four_decimals ... ok
[INFO] [stdout] test message::tests::text_content_ignores_tool_blocks ... ok
[INFO] [stdout] test message::tests::role_serialises_lowercase_for_provider_payloads ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/tc_mcp-89b01d3e7dc30c85)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 16 tests
[INFO] [stdout] test tool::tests::an_empty_result_renders_as_empty_rather_than_panicking ... ok
[INFO] [stdout] test which::tests::a_path_is_left_alone ... ok
[INFO] [stdout] test which::tests::an_unknown_command_is_returned_unchanged ... ok
[INFO] [stdout] test config::tests::a_project_with_no_server_list_is_not_an_error ... ok
[INFO] [stdout] test which::tests::unix_resolution_is_left_to_the_operating_system ... ok
[INFO] [stdout] test tests::a_startup_failure_names_the_server_and_the_cause ... ok
[INFO] [stdout] test config::tests::a_malformed_list_is_reported_rather_than_ignored ... ok
[INFO] [stdout] test config::tests::servers_are_enabled_unless_turned_off ... ok
[INFO] [stdout] test which::tests::a_command_with_an_extension_is_left_alone ... ok
[INFO] [stdout] test tool::tests::text_blocks_are_joined_in_order ... ok
[INFO] [stdout] test config::tests::an_unknown_key_is_refused_rather_than_silently_dropped ... ok
[INFO] [stdout] test tool::tests::tool_names_are_namespaced_by_the_users_name_for_the_server ... ok
[INFO] [stdout] test tests::no_configured_servers_means_no_tools_and_no_failures ... ok
[INFO] [stdout] test tests::a_disabled_server_is_not_started ... ok
[INFO] [stdout] test config::tests::arguments_and_environment_are_read_as_given ... ok
[INFO] [stdout] test tests::a_server_that_cannot_start_is_reported_rather_than_fatal ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/foreign_server.rs (/opt/rustwide/target/debug/deps/foreign_server-71355e4b64b84288)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test a_foreign_server_is_started_and_its_tools_become_usable ... ok
[INFO] [stdout] test a_foreign_tool_never_runs_without_approval ... ok
[INFO] [stdout] test a_tool_level_error_is_an_error_and_not_output ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/tc_providers-99f2ef7592aa9f40)
[INFO] [stdout] 
[INFO] [stdout] running 42 tests
[INFO] [stdout] test anthropic::tests::tool_results_are_sent_back_with_their_call_id ... ok
[INFO] [stdout] test anthropic::tests::tool_schemas_are_sent_in_the_expected_shape ... ok
[INFO] [stdout] test anthropic::tests::system_messages_are_not_duplicated_into_the_message_array ... ok
[INFO] [stdout] test anthropic::tests::the_system_prompt_is_sent_as_a_cacheable_block ... ok
[INFO] [stdout] test anthropic::tests::a_tool_call_is_emitted_only_once_its_arguments_are_complete ... ok
[INFO] [stdout] test anthropic::tests::message_start_reports_the_model_and_seeds_input_usage ... ok
[INFO] [stdout] test anthropic::tests::malformed_json_is_reported_as_a_decode_error ... ok
[INFO] [stdout] test anthropic::tests::message_delta_completes_the_turn_with_the_full_usage ... ok
[INFO] [stdout] test anthropic::tests::max_tokens_is_surfaced_so_truncation_is_visible ... ok
[INFO] [stdout] test anthropic::tests::text_deltas_become_text_increments ... ok
[INFO] [stdout] test anthropic::tests::a_tool_called_without_arguments_yields_an_empty_object ... ok
[INFO] [stdout] test anthropic::tests::tool_use_is_a_distinct_stop_reason_from_end_turn ... ok
[INFO] [stdout] test openai::tests::a_tool_call_is_not_emitted_twice_when_usage_follows_the_finish_chunk ... ok
[INFO] [stdout] test anthropic::tests::no_tools_key_is_sent_when_no_tools_are_available ... ok
[INFO] [stdout] test openai::tests::cached_tokens_are_split_out_of_the_prompt_total ... ok
[INFO] [stdout] test openai::tests::assistant_tool_calls_are_sent_with_stringified_arguments ... ok
[INFO] [stdout] test anthropic::tests::two_tool_calls_in_one_turn_do_not_mix_their_arguments ... ok
[INFO] [stdout] test openai::tests::empty_content_deltas_produce_no_output ... ok
[INFO] [stdout] test anthropic::tests::stopping_a_text_block_produces_nothing ... ok
[INFO] [stdout] test anthropic::tests::unknown_event_types_are_ignored_not_fatal ... ok
[INFO] [stdout] test openai::tests::a_tool_call_is_assembled_across_chunks_and_emitted_on_finish ... ok
[INFO] [stdout] test openai::tests::parallel_tool_calls_are_emitted_in_array_order ... ok
[INFO] [stdout] test anthropic::tests::malformed_tool_arguments_are_reported_rather_than_silently_dropped ... ok
[INFO] [stdout] test openai::tests::malformed_tool_arguments_are_reported_rather_than_silently_dropped ... ok
[INFO] [stdout] test openai::tests::the_done_sentinel_is_not_treated_as_json ... ok
[INFO] [stdout] test tests::a_missing_model_points_at_the_search_command ... ok
[INFO] [stdout] test tests::short_error_bodies_are_passed_through_unchanged ... ok
[INFO] [stdout] test tests::a_rejected_key_says_how_to_replace_it ... ok
[INFO] [stdout] test tests::truncation_never_splits_a_multi_byte_character ... ok
[INFO] [stdout] test tests::an_unexplainable_error_is_shown_as_it_came ... ok
[INFO] [stdout] test tests::a_provider_outage_is_not_blamed_on_the_user ... ok
[INFO] [stdout] test openai::tests::tools_are_wrapped_in_the_function_envelope ... ok
[INFO] [stdout] test openai::tests::usage_streaming_is_requested_explicitly ... ok
[INFO] [stdout] test tests::explain_keeps_the_providers_own_words_and_adds_ours ... ok
[INFO] [stdout] test tests::requests_default_to_a_bounded_output_length ... ok
[INFO] [stdout] test tests::running_out_of_credit_is_named_as_such ... ok
[INFO] [stdout] test tests::long_error_bodies_are_truncated_with_a_hint ... ok
[INFO] [stdout] test openai::tests::tool_calls_finish_reason_maps_to_tool_use ... ok
[INFO] [stdout] test openai::tests::the_first_chunk_announces_the_model_once ... ok
[INFO] [stdout] test openai::tests::the_system_prompt_is_sent_as_the_first_message ... ok
[INFO] [stdout] test openai::tests::tool_results_become_their_own_tool_role_message ... ok
[INFO] [stdout] test tests::a_context_overflow_is_distinguished_from_other_bad_requests ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 42 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/tc_tools-497b0887c86383eb)
[INFO] [stdout] 
[INFO] [stdout] running 116 tests
[INFO] [stdout] test constraints::tests::a_project_without_a_ledger_has_no_rules ... ok
[INFO] [stdout] test constraints::tests::a_violation_summarises_the_rule_and_the_evidence ... ok
[INFO] [stdout] test constraints::tests::a_typo_in_a_key_fails_loudly_instead_of_dropping_the_rule ... ok
[INFO] [stdout] test diff::tests::a_changed_line_shows_both_sides ... ok
[INFO] [stdout] test diff::tests::a_file_without_a_trailing_newline_still_renders_one_line_per_row ... ok
[INFO] [stdout] test diff::tests::added_lines_are_captured_verbatim_without_the_diff_marker ... ok
[INFO] [stdout] test diff::tests::an_identical_write_produces_an_empty_diff ... ok
[INFO] [stdout] test constraints::tests::a_file_rule_does_not_fire_on_a_command_and_vice_versa ... ok
[INFO] [stdout] test diff::tests::distant_changes_are_separated_rather_than_dumping_the_whole_file ... ok
[INFO] [stdout] test diff::tests::unchanged_context_is_marked_with_a_space ... ok
[INFO] [stdout] test constraints::tests::the_prompt_separates_checked_rules_from_unchecked_notes ... ok
[INFO] [stdout] test constraints::tests::a_forbidden_command_is_caught ... ok
[INFO] [stdout] test constraints::tests::a_forbidden_path_is_caught_whatever_the_change_contains ... ok
[INFO] [stdout] test diff::tests::a_new_file_is_reported_as_a_creation ... ok
[INFO] [stdout] test diff::tests::the_summary_names_the_action_and_the_counts ... ok
[INFO] [stdout] test constraints::tests::a_malformed_pattern_names_the_rule_and_the_field ... ok
[INFO] [stdout] test constraints::tests::a_removed_line_never_violates_a_rule ... ok
[INFO] [stdout] test edit::tests::both_editing_tools_declare_themselves_mutating ... ok
[INFO] [stdout] test constraints::tests::the_prompt_tells_the_model_to_stop_rather_than_work_around_a_rule ... ok
[INFO] [stdout] test constraints::tests::a_forbidden_pattern_in_an_added_line_is_caught ... ok
[INFO] [stdout] test constraints::tests::a_forbidden_pattern_in_an_unchanged_line_is_not_a_violation ... ok
[INFO] [stdout] test constraints::tests::every_broken_rule_is_reported_not_just_the_first ... ok
[INFO] [stdout] test edit::tests::write_file_leaves_no_temporary_file_behind ... ok
[INFO] [stdout] test edit::tests::write_file_previews_a_creation_without_writing_anything ... ok
[INFO] [stdout] test edit::tests::patch_previews_the_change_without_applying_it ... ok
[INFO] [stdout] test edit::tests::patch_rejects_an_empty_old_string ... ok
[INFO] [stdout] test edit::tests::patch_reports_a_missing_snippet_with_guidance ... ok
[INFO] [stdout] test edit::tests::patch_can_delete_a_snippet ... ok
[INFO] [stdout] test edit::tests::patch_replaces_every_occurrence_when_asked ... ok
[INFO] [stdout] test edit::tests::write_file_creates_missing_parent_directories ... ok
[INFO] [stdout] test edit::tests::patch_refuses_an_ambiguous_match_and_says_how_to_fix_it ... ok
[INFO] [stdout] test edit::tests::write_file_refuses_to_escape_the_workspace ... ok
[INFO] [stdout] test edit::tests::write_file_creates_a_new_file ... ok
[INFO] [stdout] test edit::tests::patch_refuses_to_create_a_missing_file ... ok
[INFO] [stdout] test diff::tests::a_huge_diff_is_truncated_with_a_marker ... ok
[INFO] [stdout] test fs::tests::an_empty_line_range_says_so_instead_of_returning_nothing ... ok
[INFO] [stdout] test edit::tests::patch_replaces_a_unique_snippet ... ok
[INFO] [stdout] test constraints::tests::a_scoped_rule_can_carve_out_exceptions ... ok
[INFO] [stdout] test path::tests::a_file_that_does_not_exist_yet_still_resolves_inside ... ok
[INFO] [stdout] test path::tests::a_missing_file_in_an_escaping_directory_is_still_refused ... ok
[INFO] [stdout] test edit::tests::write_file_refuses_to_overwrite_a_binary_file ... ok
[INFO] [stdout] test constraints::tests::a_rule_can_be_scoped_to_certain_files ... ok
[INFO] [stdout] test fs::tests::read_file_truncates_oversized_content ... ok
[INFO] [stdout] test fs::tests::read_file_refuses_to_escape_the_workspace ... ok
[INFO] [stdout] test path::tests::an_absolute_path_inside_the_workspace_is_allowed ... ok
[INFO] [stdout] test fs::tests::glob_rejects_a_malformed_pattern ... ok
[INFO] [stdout] test diff::tests::added_lines_survive_truncation_of_the_rendered_text ... ok
[INFO] [stdout] test path::tests::a_relative_path_inside_the_workspace_resolves ... ok
[INFO] [stdout] test fs::tests::read_file_reports_a_missing_file_clearly ... ok
[INFO] [stdout] test path::tests::a_symlink_pointing_out_of_the_workspace_is_refused ... ok
[INFO] [stdout] test fs::tests::read_file_requires_a_path ... ok
[INFO] [stdout] test fs::tests::read_file_rejects_binary_content ... ok
[INFO] [stdout] test fs::tests::read_file_honours_a_line_range ... ok
[INFO] [stdout] test fs::tests::glob_reports_no_matches_rather_than_an_empty_string ... ok
[INFO] [stdout] test path::tests::an_absolute_path_outside_the_workspace_is_refused ... ok
[INFO] [stdout] test path::tests::an_empty_path_is_refused ... ok
[INFO] [stdout] test fs::tests::glob_finds_files_and_respects_gitignore ... ok
[INFO] [stdout] test fs::tests::list_dir_defaults_to_the_workspace_root ... ok
[INFO] [stdout] test fs::tests::list_dir_marks_directories_and_skips_ignored_ones ... ok
[INFO] [stdout] test path::tests::lexical_normalisation_collapses_parent_components ... ok
[INFO] [stdout] test fs::tests::read_file_returns_numbered_lines ... ok
[INFO] [stdout] test path::tests::the_workspace_root_itself_resolves ... ok
[INFO] [stdout] test path::tests::deep_traversal_to_a_home_directory_is_refused ... ok
[INFO] [stdout] test path::tests::parent_traversal_that_stays_inside_is_allowed ... ok
[INFO] [stdout] test search::tests::grep_honours_an_explicit_case_sensitive_flag ... ok
[INFO] [stdout] test path::tests::parent_traversal_that_escapes_is_refused ... ok
[INFO] [stdout] test search::tests::grep_refuses_to_search_outside_the_workspace ... ok
[INFO] [stdout] test shell::tests::a_malformed_exit_line_is_not_guessed_at ... ok
[INFO] [stdout] test shell::tests::a_dangerous_but_legitimate_command_previews_as_high_risk ... ok
[INFO] [stdout] test search::tests::grep_rejects_a_malformed_regex ... ok
[INFO] [stdout] test shell::tests::every_refused_pattern_has_a_stated_reason ... ok
[INFO] [stdout] test shell::tests::output_from_somewhere_else_yields_no_exit_code ... ok
[INFO] [stdout] test shell::tests::refusal_is_case_insensitive ... ok
[INFO] [stdout] test shell::tests::refusal_takes_precedence_over_risk_classification ... ok
[INFO] [stdout] test search::tests::grep_skips_ignored_files ... ok
[INFO] [stdout] test shell::tests::a_command_that_never_finishes_is_killed_rather_than_hanging_forever ... ok
[INFO] [stdout] test shell::tests::a_failing_command_is_returned_as_output_not_as_an_error ... ok
[INFO] [stdout] test shell::tests::a_successful_command_reports_exit_zero_to_the_parser ... ok
[INFO] [stdout] test tests::an_unknown_permission_mode_is_rejected_rather_than_defaulted ... ok
[INFO] [stdout] test shell::tests::the_shell_tool_declares_itself_mutating ... ok
[INFO] [stdout] test tests::every_tool_has_a_description_and_an_object_schema ... ok
[INFO] [stdout] test tests::calling_an_unknown_tool_is_an_error_not_a_panic ... ok
[INFO] [stdout] test search::tests::grep_reports_file_and_line_for_each_match ... ok
[INFO] [stdout] test tests::display_paths_are_relative_and_use_forward_slashes ... ok
[INFO] [stdout] test tests::every_mutating_tool_is_absent_from_the_read_only_set ... ok
[INFO] [stdout] test shell::tests::a_successful_command_reports_its_output_and_exit_code ... ok
[INFO] [stdout] test search::tests::grep_can_be_scoped_to_a_directory ... ok
[INFO] [stdout] test tests::only_mutating_effects_need_approval ... ok
[INFO] [stdout] test tests::full_mode_adds_the_shell ... ok
[INFO] [stdout] test shell::tests::catastrophic_commands_are_refused_before_they_run ... ok
[INFO] [stdout] test shell::tests::an_ordinary_command_previews_as_normal_risk ... ok
[INFO] [stdout] test tests::long_output_is_truncated_and_says_so ... ok
[INFO] [stdout] test tests::permission_modes_round_trip_through_their_labels ... ok
[INFO] [stdout] test tests::short_output_is_left_alone ... ok
[INFO] [stdout] test shell::tests::a_refused_command_is_rejected_at_preview_time_too ... ok
[INFO] [stdout] test tests::read_only_mode_offers_no_way_to_change_anything ... ok
[INFO] [stdout] test tests::tool_names_are_unique ... ok
[INFO] [stdout] test search::tests::grep_is_case_insensitive_by_default ... ok
[INFO] [stdout] test verify::tests::an_unrelated_command_proves_nothing ... ok
[INFO] [stdout] test verify::tests::every_kind_has_a_label ... ok
[INFO] [stdout] test tests::the_default_mode_is_the_safe_one ... ok
[INFO] [stdout] test verify::tests::test_commands_are_recognised ... ok
[INFO] [stdout] test verify::tests::every_profile_offers_a_test_command ... ok
[INFO] [stdout] test tests::truncation_never_splits_a_multi_byte_character ... ok
[INFO] [stdout] test verify::tests::a_lint_that_mentions_tests_is_still_a_lint ... ok
[INFO] [stdout] test verify::tests::an_unknown_project_yields_no_profile ... ok
[INFO] [stdout] test verify::tests::a_rust_project_is_detected_by_its_manifest ... ok
[INFO] [stdout] test tests::write_mode_adds_editing_but_not_command_execution ... ok
[INFO] [stdout] test tests::read_only_tools_preview_as_harmless ... ok
[INFO] [stdout] test tests::the_read_only_set_contains_only_read_only_tools ... ok
[INFO] [stdout] test search::tests::grep_says_so_when_nothing_matches ... ok
[INFO] [stdout] test verify::tests::build_commands_are_recognised ... ok
[INFO] [stdout] test verify::tests::classification_ignores_case ... ok
[INFO] [stdout] test verify::tests::the_first_matching_profile_wins ... ok
[INFO] [stdout] test shell::tests::the_exit_code_can_be_read_back_out_of_the_rendered_output ... ok
[INFO] [stdout] test shell::tests::commands_run_in_the_workspace_directory ... ok
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/tc_tui-c904298899c57a81)
[INFO] [stdout] test result: ok. 116 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 35 tests
[INFO] [stdout] test app::tests::a_failed_tool_is_marked_but_does_not_end_the_run ... ok
[INFO] [stdout] test app::tests::a_prompt_that_merely_mentions_a_slash_is_still_a_prompt ... ok
[INFO] [stdout] test app::tests::a_bare_slash_model_asks_rather_than_guessing_an_id ... ok
[INFO] [stdout] test app::tests::a_tool_call_appears_in_the_transcript_while_it_runs ... ok
[INFO] [stdout] test app::tests::aborting_when_nothing_runs_is_a_no_op ... ok
[INFO] [stdout] test app::tests::an_unknown_command_is_answered_without_charging_for_a_turn ... ok
[INFO] [stdout] test app::tests::backspace_on_empty_input_is_a_no_op ... ok
[INFO] [stdout] test app::tests::completing_a_turn_accumulates_usage_and_cost ... ok
[INFO] [stdout] test app::tests::context_fill_reports_the_used_share ... ok
[INFO] [stdout] test app::tests::finishing_a_tool_marks_that_entry_done ... ok
[INFO] [stdout] test app::tests::exceeding_the_budget_stops_the_session_instead_of_spending_on ... ok
[INFO] [stdout] test app::tests::a_notice_lands_in_the_transcript ... ok
[INFO] [stdout] test app::tests::slash_model_carries_the_id_when_one_was_typed ... ok
[INFO] [stdout] test app::tests::a_guard_rail_finish_explains_itself ... ok
[INFO] [stdout] test app::tests::a_failure_is_reported_rather_than_swallowed ... ok
[INFO] [stdout] test app::tests::submit_is_refused_while_a_turn_is_in_flight ... ok
[INFO] [stdout] test app::tests::scrolling_down_never_goes_below_the_bottom ... ok
[INFO] [stdout] test app::tests::submit_moves_the_prompt_into_the_transcript ... ok
[INFO] [stdout] test app::tests::aborting_marks_running_tools_as_failed ... ok
[INFO] [stdout] test app::tests::the_proof_panel_lands_in_the_transcript ... ok
[INFO] [stdout] test ui::tests::every_status_has_a_label_that_names_its_exit ... ok
[INFO] [stdout] test ui::tests::token_counts_stay_readable_at_every_magnitude ... ok
[INFO] [stdout] test ui::tests::a_full_gauge_is_all_filled_segments ... ok
[INFO] [stdout] test ui::tests::the_gauge_warns_once_the_context_is_mostly_full ... ok
[INFO] [stdout] test app::tests::a_question_takes_over_until_it_is_answered ... ok
[INFO] [stdout] test ui::tests::gauge_values_outside_the_range_are_clamped ... ok
[INFO] [stdout] test app::tests::streaming_text_accumulates_into_one_entry ... ok
[INFO] [stderr]    Doc-tests tc_agent
[INFO] [stdout] test app::tests::a_successful_finish_shows_no_notice ... ok
[INFO] [stdout] test app::tests::parallel_calls_of_the_same_tool_finish_independently ... ok
[INFO] [stdout] test app::tests::editing_handles_multi_byte_characters ... ok
[INFO] [stdout] test app::tests::text_after_a_tool_starts_a_new_entry_instead_of_appending_to_the_tool ... ok
[INFO] [stdout] test app::tests::slash_undo_is_handled_locally_rather_than_sent_to_the_model ... ok
[INFO] [stdout] test app::tests::submit_ignores_blank_input ... ok
[INFO] [stdout] test ui::tests::an_empty_gauge_is_all_empty_segments ... ok
[INFO] [stdout] test app::tests::the_help_text_lists_every_command_submit_accepts ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 35 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests tc_cli
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests tc_config
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests tc_core
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests tc_mcp
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests tc_providers
[INFO] [stderr]    Doc-tests tc_tools
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests tc_tui
[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" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28", kill_on_drop: false }`
[INFO] [stdout] 9cab1992381c51a4fab8e396725668374cedcf588895d8e81bfff3adbc704c28
