[INFO] cloning repository https://github.com/stevensu1977/nanobot-rs [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/stevensu1977/nanobot-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fstevensu1977%2Fnanobot-rs", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fstevensu1977%2Fnanobot-rs'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 9bcee573ee98a1fcbedd1225dfdfb53302fc1a0e [INFO] testing stevensu1977/nanobot-rs against master#d933cf483edf1605142ac6899ff32536c0ad8b22 for pr-150933 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fstevensu1977%2Fnanobot-rs" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/stevensu1977/nanobot-rs [INFO] finished tweaking git repo https://github.com/stevensu1977/nanobot-rs [INFO] tweaked toml for git repo https://github.com/stevensu1977/nanobot-rs written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/stevensu1977/nanobot-rs on toolchain d933cf483edf1605142ac6899ff32536c0ad8b22 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/stevensu1977/nanobot-rs 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" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded fd-lock v4.0.4 [INFO] [stderr] Downloaded rustyline v15.0.0 [INFO] [stderr] Downloaded native-tls v0.2.16 [INFO] [stderr] Downloaded colored v3.1.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 4d908225dda2fcd95f7c3e3cf98f3e06b661858d919c5e83c1490f4ce9f2de9d [INFO] running `Command { std: "docker" "start" "-a" "4d908225dda2fcd95f7c3e3cf98f3e06b661858d919c5e83c1490f4ce9f2de9d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "4d908225dda2fcd95f7c3e3cf98f3e06b661858d919c5e83c1490f4ce9f2de9d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4d908225dda2fcd95f7c3e3cf98f3e06b661858d919c5e83c1490f4ce9f2de9d", kill_on_drop: false }` [INFO] [stdout] 4d908225dda2fcd95f7c3e3cf98f3e06b661858d919c5e83c1490f4ce9f2de9d [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 6219f673a7e1e45ae68decd761c209dc116e982aa17b17d730c31e8c42383602 [INFO] running `Command { std: "docker" "start" "-a" "6219f673a7e1e45ae68decd761c209dc116e982aa17b17d730c31e8c42383602", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.182 [INFO] [stderr] Compiling aws-lc-rs v1.15.4 [INFO] [stderr] Compiling slab v0.4.12 [INFO] [stderr] Compiling quote v1.0.44 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Compiling object v0.37.3 [INFO] [stderr] Compiling openssl v0.10.75 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling memchr v2.8.0 [INFO] [stderr] Compiling futures-channel v0.3.32 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling native-tls v0.2.16 [INFO] [stderr] Compiling unicase v2.9.0 [INFO] [stderr] Compiling openssl-probe v0.2.1 [INFO] [stderr] Compiling phf_shared v0.12.1 [INFO] [stderr] Compiling syn v2.0.116 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Compiling chrono-tz v0.10.4 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling phf v0.12.1 [INFO] [stderr] Compiling encoding_rs v0.8.35 [INFO] [stderr] Compiling winnow v0.6.26 [INFO] [stderr] Compiling nix v0.29.0 [INFO] [stderr] Compiling mime_guess v2.0.5 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Compiling portable-atomic v1.13.1 [INFO] [stderr] Compiling webpki-roots v0.26.11 [INFO] [stderr] Compiling email-encoding v0.4.1 [INFO] [stderr] Compiling nom v8.0.0 [INFO] [stderr] Compiling nibble_vec v0.1.0 [INFO] [stderr] Compiling endian-type v0.1.2 [INFO] [stderr] Compiling env_home v0.1.0 [INFO] [stderr] Compiling quoted_printable v0.5.1 [INFO] [stderr] Compiling email_address v0.2.9 [INFO] [stderr] Compiling clap_builder v4.5.59 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Compiling radix_trie v0.2.1 [INFO] [stderr] Compiling home v0.5.12 [INFO] [stderr] Compiling colored v3.1.1 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling socket2 v0.6.2 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling dirs-sys v0.5.0 [INFO] [stderr] Compiling rand_core v0.9.5 [INFO] [stderr] Compiling getrandom v0.4.1 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling dirs v6.0.0 [INFO] [stderr] Compiling uuid v1.21.0 [INFO] [stderr] Compiling mail-parser v0.9.4 [INFO] [stderr] Compiling which v7.0.3 [INFO] [stderr] Compiling fd-lock v4.0.4 [INFO] [stderr] Compiling rand v0.9.2 [INFO] [stderr] Compiling console v0.15.11 [INFO] [stderr] Compiling cmake v0.1.57 [INFO] [stderr] Compiling indicatif v0.17.11 [INFO] [stderr] Compiling aws-lc-sys v0.37.1 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Compiling stacker v0.1.23 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling matchers v0.2.0 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling rustyline v15.0.0 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling futures-macro v0.3.32 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling ar_archive_writer v0.5.1 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling tokio v1.49.0 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling psm v0.1.30 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling tracing-subscriber v0.3.22 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling chumsky v0.9.3 [INFO] [stderr] Compiling tinystr v0.8.2 [INFO] [stderr] Compiling potential_utf v0.1.4 [INFO] [stderr] Compiling icu_locale_core v2.1.1 [INFO] [stderr] Compiling icu_collections v2.1.1 [INFO] [stderr] Compiling chrono v0.4.43 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling clap v4.5.59 [INFO] [stderr] Compiling icu_provider v2.1.1 [INFO] [stderr] Compiling icu_normalizer v2.1.1 [INFO] [stderr] Compiling icu_properties v2.1.2 [INFO] [stderr] Compiling cron v0.15.0 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling tokio-native-tls v0.3.1 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling h2 v0.4.13 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling nanobot-core v0.1.0 (/opt/rustwide/workdir/crates/nanobot-core) [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling hyper-tls v0.6.0 [INFO] [stderr] Compiling rustls-webpki v0.103.9 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling tungstenite v0.26.2 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling lettre v0.11.19 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling tokio-tungstenite v0.26.2 [INFO] [stderr] Compiling nanobot-providers v0.1.0 (/opt/rustwide/workdir/crates/nanobot-providers) [INFO] [stderr] Compiling nanobot-channels v0.1.0 (/opt/rustwide/workdir/crates/nanobot-channels) [INFO] [stderr] Compiling nanobot-agent v0.1.0 (/opt/rustwide/workdir/crates/nanobot-agent) [INFO] [stderr] Compiling nanobot-cli v0.1.0 (/opt/rustwide/workdir/crates/nanobot-cli) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 30s [INFO] running `Command { std: "docker" "inspect" "6219f673a7e1e45ae68decd761c209dc116e982aa17b17d730c31e8c42383602", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6219f673a7e1e45ae68decd761c209dc116e982aa17b17d730c31e8c42383602", kill_on_drop: false }` [INFO] [stdout] 6219f673a7e1e45ae68decd761c209dc116e982aa17b17d730c31e8c42383602 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] ab355a32d95dcb84a0bf4ea978f84f450e951614918e805a0bce2496b3026cd0 [INFO] running `Command { std: "docker" "start" "-a" "ab355a32d95dcb84a0bf4ea978f84f450e951614918e805a0bce2496b3026cd0", kill_on_drop: false }` [INFO] [stderr] Compiling tempfile v3.25.0 [INFO] [stderr] Compiling nanobot-providers v0.1.0 (/opt/rustwide/workdir/crates/nanobot-providers) [INFO] [stderr] Compiling nanobot-channels v0.1.0 (/opt/rustwide/workdir/crates/nanobot-channels) [INFO] [stderr] Compiling nanobot-core v0.1.0 (/opt/rustwide/workdir/crates/nanobot-core) [INFO] [stderr] Compiling nanobot-cli v0.1.0 (/opt/rustwide/workdir/crates/nanobot-cli) [INFO] [stderr] Compiling nanobot-agent v0.1.0 (/opt/rustwide/workdir/crates/nanobot-agent) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 12.46s [INFO] running `Command { std: "docker" "inspect" "ab355a32d95dcb84a0bf4ea978f84f450e951614918e805a0bce2496b3026cd0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ab355a32d95dcb84a0bf4ea978f84f450e951614918e805a0bce2496b3026cd0", kill_on_drop: false }` [INFO] [stdout] ab355a32d95dcb84a0bf4ea978f84f450e951614918e805a0bce2496b3026cd0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cfa559dde23f44738f9990739aaa3487d8df3af37eb5df0572f7cf76004a604a" "/opt/rustwide/cargo-home/bin/cargo" "+d933cf483edf1605142ac6899ff32536c0ad8b22" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 15a6429598481ca65089e0999c3ec2fe283f9a3299fe47e6538a25abbfe06d40 [INFO] running `Command { std: "docker" "start" "-a" "15a6429598481ca65089e0999c3ec2fe283f9a3299fe47e6538a25abbfe06d40", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.42s [INFO] [stdout] [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/nanobot_agent-2c8155277f96f60b) [INFO] [stdout] running 61 tests [INFO] [stdout] test agent_loop::tests::test_format_messages_with_tools ... ok [INFO] [stdout] test agent_loop::tests::test_format_messages_for_consolidation ... ok [INFO] [stdout] test tools::base::tests::test_validate_params_enum ... ok [INFO] [stdout] test skills::tests::test_strip_frontmatter_none ... ok [INFO] [stdout] test skills::tests::test_list_skills_empty ... ok [INFO] [stdout] test subagent::tests::test_subagent_prompt_contains_workspace ... ok [INFO] [stdout] test context::tests::test_build_messages_with_session_info ... ok [INFO] [stdout] test context::tests::test_bootstrap_files ... ok [INFO] [stdout] test tools::base::tests::test_validate_params_type_mismatch ... ok [INFO] [stdout] test tools::base::tests::test_validate_params_valid ... ok [INFO] [stdout] test tools::cron::tests::test_add_job_at ... ok [INFO] [stdout] test tools::cron::tests::test_add_job_cron ... ok [INFO] [stdout] test tools::cron::tests::test_add_job_every ... ok [INFO] [stdout] test tools::cron::tests::test_add_job_validation_no_context ... ok [INFO] [stdout] test tools::cron::tests::test_add_job_validation_no_message ... ok [INFO] [stdout] test tools::cron::tests::test_add_job_validation_tz_without_cron ... ok [INFO] [stdout] test tools::cron::tests::test_tool_name ... ok [INFO] [stdout] test tools::cron::tests::test_tool_schema ... ok [INFO] [stdout] test tools::cron::tests::test_execute_remove_not_found ... ok [INFO] [stdout] test tools::filesystem::tests::test_edit_file_multiple_occurrences ... ok [INFO] [stdout] test tools::filesystem::tests::test_edit_file_exact_match ... ok [INFO] [stdout] test tools::filesystem::tests::test_list_dir ... ok [INFO] [stdout] test tools::cron::tests::test_execute_list_empty ... ok [INFO] [stdout] test tools::filesystem::tests::test_read_file ... ok [INFO] [stdout] test tools::filesystem::tests::test_read_file_not_found ... ok [INFO] [stdout] test tools::filesystem::tests::test_allowed_dir_restriction ... ok [INFO] [stdout] test tools::filesystem::tests::test_write_file ... ok [INFO] [stdout] test tools::mcp::tests::test_response_parsing_empty ... ok [INFO] [stdout] test tools::registry::tests::test_execute_not_found ... ok [INFO] [stdout] test tools::registry::tests::test_get_definitions ... ok [INFO] [stdout] test tools::registry::tests::test_register_and_execute ... ok [INFO] [stdout] test skills::tests::test_get_skill_metadata ... ok [INFO] [stdout] test context::tests::test_identity_contains_workspace ... ok [INFO] [stdout] test tools::base::tests::test_validate_params_missing_required ... ok [INFO] [stdout] test tools::base::tests::test_validate_params_range ... ok [INFO] [stdout] test tools::mcp::tests::test_jsonrpc_request ... ok [INFO] [stdout] test tools::mcp::tests::test_response_parsing ... ok [INFO] [stdout] test tools::mcp::tests::test_tool_name_format ... ok [INFO] [stdout] test skills::tests::test_load_skill ... ok [INFO] [stdout] test tools::web::tests::test_decode_entities ... ok [INFO] [stdout] test skills::tests::test_strip_frontmatter ... ok [INFO] [stdout] test context::tests::test_add_assistant_message_omits_empty_content ... ok [INFO] [stdout] test skills::tests::test_escape_xml ... ok [INFO] [stdout] test tools::web::tests::test_validate_url_invalid ... ok [INFO] [stdout] test tools::web::tests::test_validate_url_invalid_scheme ... ok [INFO] [stdout] test tools::shell::tests::test_exec_denied_pattern ... ok [INFO] [stdout] test tools::shell::tests::test_exec_basic ... ok [INFO] [stdout] test tools::shell::tests::test_exec_path_traversal ... ok [INFO] [stdout] test tools::shell::tests::test_exec_denied_format ... ok [INFO] [stdout] test context::tests::test_add_tool_result ... ok [INFO] [stdout] test skills::tests::test_list_skills_with_skill ... ok [INFO] [stdout] test context::tests::test_build_messages_structure ... ok [INFO] [stdout] test context::tests::test_guess_mime ... ok [INFO] [stdout] test tools::web::tests::test_strip_tags ... ok [INFO] [stdout] test tools::shell::tests::test_exec_exit_code ... ok [INFO] [stdout] test tools::web::tests::test_validate_url_valid ... ok [INFO] [stdout] test tools::web::tests::test_strip_tags_script ... ok [INFO] [stdout] test tools::shell::tests::test_exec_timeout ... ok [INFO] [stdout] test tools::web::tests::test_html_to_markdown_links ... ok [INFO] [stdout] test tools::web::tests::test_html_to_markdown_headings ... ok [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/nanobot_channels-cecde5fb5c826564) [INFO] [stdout] test tools::web::tests::test_html_to_markdown_lists ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 61 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.08s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 97 tests [INFO] [stdout] test discord::tests::test_attachment_size_check ... ok [INFO] [stdout] test dingtalk::tests::test_allowlist_check ... ok [INFO] [stdout] test dingtalk::tests::test_markdown_message_format ... ok [INFO] [stdout] test dingtalk::tests::test_callback_parsing ... ok [INFO] [stdout] test discord::tests::test_reply_payload ... ok [INFO] [stdout] test discord::tests::test_sender_extraction ... ok [INFO] [stdout] test email::tests::test_config_validation ... ok [INFO] [stdout] test email::tests::test_consent_check ... ok [INFO] [stdout] test email::tests::test_reply_subject ... ok [INFO] [stdout] test dingtalk::tests::test_access_token_cache ... ok [INFO] [stdout] test email::tests::test_channel_name ... ok [INFO] [stdout] test feishu::tests::test_extract_post_text_direct ... ok [INFO] [stdout] test feishu::tests::test_extract_post_text_localized ... ok [INFO] [stdout] test feishu::tests::test_pb_ping_frame_encode ... ok [INFO] [stdout] test feishu::tests::test_extract_service_id ... ok [INFO] [stdout] test feishu::tests::test_pb_frame_roundtrip ... ok [INFO] [stdout] test feishu::tests::test_parse_md_table ... ok [INFO] [stdout] test email::tests::test_reply_subject_empty ... ok [INFO] [stdout] test feishu::tests::test_extract_post_text_at ... ok [INFO] [stdout] test feishu::tests::test_card_content ... ok [INFO] [stdout] test manager::tests::test_manager_no_channels ... ok [INFO] [stdout] test manager::tests::test_manager_telegram_no_token ... ok [INFO] [stdout] test mochat::tests::test_build_buffered_body_single ... ok [INFO] [stdout] test mochat::tests::test_mention_detection_content ... ok [INFO] [stdout] test email::tests::test_reply_subject_custom_prefix ... ok [INFO] [stdout] test mochat::tests::test_build_buffered_body_group ... ok [INFO] [stdout] test mochat::tests::test_mention_detection_meta ... ok [INFO] [stdout] test mochat::tests::test_normalize_content_null ... ok [INFO] [stdout] test mochat::tests::test_normalize_content_object ... ok [INFO] [stdout] test mochat::tests::test_normalize_content_string ... ok [INFO] [stdout] test mochat::tests::test_resolve_target_empty ... ok [INFO] [stdout] test mochat::tests::test_resolve_target_group ... ok [INFO] [stdout] test mochat::tests::test_resolve_target_panel ... ok [INFO] [stdout] test mochat::tests::test_resolve_target_plain_id ... ok [INFO] [stdout] test discord::tests::test_bot_message_filtering ... ok [INFO] [stdout] test mochat::tests::test_resolve_target_session ... ok [INFO] [stdout] test qq::tests::test_message_dedup ... ok [INFO] [stdout] test qq::tests::test_sender_extraction ... ok [INFO] [stdout] test qq::tests::test_sender_extraction_openid ... ok [INFO] [stdout] test slack::tests::test_mrkdwn_empty ... ok [INFO] [stdout] test email::tests::test_html_to_text_complex ... ok [INFO] [stdout] test slack::tests::test_mrkdwn_link ... ok [INFO] [stdout] test slack::tests::test_table_conversion ... ok [INFO] [stdout] test email::tests::test_html_to_text ... ok [INFO] [stdout] test slack::tests::test_mrkdwn_bold ... ok [INFO] [stdout] test telegram::formatting::tests::test_code_block ... ok [INFO] [stdout] test telegram::formatting::tests::test_bullets ... ok [INFO] [stdout] test telegram::formatting::tests::test_empty_input ... ok [INFO] [stdout] test telegram::formatting::tests::test_code_block_preserves_content ... ok [INFO] [stdout] test telegram::formatting::tests::test_blockquotes_stripped ... ok [INFO] [stdout] test telegram::formatting::tests::test_bold_underscore ... ok [INFO] [stdout] test telegram::formatting::tests::test_bold_conversion ... ok [INFO] [stdout] test telegram::formatting::tests::test_html_entities_escaped ... ok [INFO] [stdout] test telegram::formatting::tests::test_inline_code ... ok [INFO] [stdout] test telegram::formatting::tests::test_split_message_at_newline ... ok [INFO] [stdout] test telegram::formatting::tests::test_split_message_at_space ... ok [INFO] [stdout] test telegram::formatting::tests::test_split_message_hard_cut ... ok [INFO] [stdout] test telegram::formatting::tests::test_italic_no_match_inside_words ... ok [INFO] [stdout] test telegram::formatting::tests::test_split_message_short ... ok [INFO] [stdout] test telegram::formatting::tests::test_links ... ok [INFO] [stdout] test telegram::tests::test_get_extension_by_type ... ok [INFO] [stdout] test telegram::tests::test_get_extension_with_mime ... ok [INFO] [stdout] test telegram::formatting::tests::test_italic_conversion ... ok [INFO] [stdout] test telegram::tests::test_get_media_type_document ... ok [INFO] [stdout] test telegram::tests::test_get_media_type_photo ... ok [INFO] [stdout] test slack::tests::test_channel_name ... ok [INFO] [stdout] test manager::tests::test_get_status ... ok [INFO] [stdout] test telegram::tests::test_sender_id_with_username ... ok [INFO] [stdout] test telegram::tests::test_sender_id_without_username ... ok [INFO] [stdout] test telegram::tests::test_get_media_type_audio ... ok [INFO] [stdout] test telegram::tests::test_get_media_type_voice ... ok [INFO] [stdout] test tests::test_is_allowed_denied ... ok [INFO] [stdout] test qq::tests::test_channel_name ... ok [INFO] [stdout] test tests::test_is_allowed_empty_parts_ignored ... ok [INFO] [stdout] test tests::test_is_allowed_exact_match ... ok [INFO] [stdout] test tests::test_is_allowed_pipe_no_match ... ok [INFO] [stdout] test slack::tests::test_dm_policy_allowlist ... ok [INFO] [stdout] test telegram::formatting::tests::test_strikethrough ... ok [INFO] [stdout] test manager::tests::test_manager_enabled_channels ... ok [INFO] [stdout] test tests::test_is_allowed_empty_list ... ok [INFO] [stdout] test tests::test_is_allowed_pipe_separated ... ok [INFO] [stdout] test whatsapp::tests::test_channel_name ... ok [INFO] [stdout] test whatsapp::tests::test_sender_id_lid_format ... ok [INFO] [stdout] test whatsapp::tests::test_sender_id_no_domain ... ok [INFO] [stdout] test whatsapp::tests::test_voice_message_replacement ... ok [INFO] [stdout] test feishu::tests::test_channel_name ... ok [INFO] [stdout] test whatsapp::tests::test_sender_id_phone_format ... ok [INFO] [stdout] test telegram::formatting::tests::test_headers_stripped ... ok [INFO] [stdout] test slack::tests::test_group_policy_allowlist ... ok [INFO] [stdout] test discord::tests::test_channel_name ... ok [INFO] [stdout] test mochat::tests::test_channel_name ... ok [INFO] [stdout] test dingtalk::tests::test_channel_name ... ok [INFO] [stdout] test slack::tests::test_dm_policy_open ... ok [INFO] [stdout] test telegram::tests::test_channel_name ... ok [INFO] [stdout] test telegram::transcription::tests::test_transcribe_empty_key ... ok [INFO] [stdout] test telegram::transcription::tests::test_transcriber_new ... ok [INFO] [stdout] test telegram::transcription::tests::test_transcribe_missing_file ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 97 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.85s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/nanobot-a2fd66047548baf7) [INFO] [stdout] [INFO] [stdout] running 12 tests [INFO] [stdout] test provider_factory::tests::test_make_provider_no_key ... ok [INFO] [stdout] test tests::test_is_exit_command_negative ... ok [INFO] [stdout] test tests::test_history_path_default ... ok [INFO] [stdout] test tests::test_onboard_creates_config ... ok [INFO] [stdout] test tests::test_onboard_creates_dirs ... ok [INFO] [stdout] test tests::test_is_exit_command_case_insensitive ... ok [INFO] [stdout] test tests::test_cron_remove_not_found ... ok [INFO] [stdout] test tests::test_onboard_no_overwrite ... ok [INFO] [stdout] test tests::test_is_exit_command ... ok [INFO] [stdout] test tests::test_cron_list_empty ... ok [INFO] [stdout] test provider_factory::tests::test_make_provider_fallback_to_configured ... ok [INFO] [stdout] test provider_factory::tests::test_make_provider_with_anthropic_key ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s [INFO] [stdout] [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/nanobot_core-237a425c609676b1) [INFO] [stdout] [INFO] [stdout] running 57 tests [INFO] [stdout] test bus::tests::test_stop ... ok [INFO] [stdout] test bus::tests::test_take_inbound_receiver_only_once ... ok [INFO] [stdout] test bus::tests::test_outbound_broadcast_to_multiple_subscribers ... ok [INFO] [stdout] test bus::tests::test_inbound_publish_consume ... ok [INFO] [stdout] test config::tests::test_deserialize_camel_case_json ... ok [INFO] [stdout] test config::tests::test_config_roundtrip ... ok [INFO] [stdout] test config::tests::test_empty_json_uses_defaults ... ok [INFO] [stdout] test config::tests::test_default_config_serializes_to_camel_case ... ok [INFO] [stdout] test bus::tests::test_publish_outbound_no_subscribers ... ok [INFO] [stdout] test config::tests::test_extra_headers_deserialization ... ok [INFO] [stdout] test config::tests::test_mcp_servers_deserialization ... ok [INFO] [stdout] test config::tests::test_github_copilot_field_name ... ok [INFO] [stdout] test config::tests::test_migrate_config_moves_restrict_to_workspace ... ok [INFO] [stdout] test config::tests::test_provider_is_configured ... ok [INFO] [stdout] test config::tests::test_workspace_path_expansion ... ok [INFO] [stdout] test config::tests::test_openai_codex_field_name ... ok [INFO] [stdout] test cron::tests::test_cron_store_roundtrip ... ok [INFO] [stdout] test cron::tests::test_schedule_at_future ... ok [INFO] [stdout] test cron::tests::test_schedule_at_past ... ok [INFO] [stdout] test cron::tests::test_schedule_every ... ok [INFO] [stdout] test cron::tests::test_schedule_invalid_cron ... ok [INFO] [stdout] test cron::tests::test_schedule_cron_expression ... ok [INFO] [stdout] test cron::tests::test_schedule_cron_with_timezone ... ok [INFO] [stdout] test cron::tests::test_schedule_every_zero ... ok [INFO] [stdout] test heartbeat::tests::test_is_heartbeat_empty_headers_only ... ok [INFO] [stdout] test heartbeat::tests::test_is_heartbeat_empty_comments ... ok [INFO] [stdout] test heartbeat::tests::test_is_heartbeat_not_empty ... ok [INFO] [stdout] test heartbeat::tests::test_is_heartbeat_not_empty_with_content ... ok [INFO] [stdout] test heartbeat::tests::test_is_heartbeat_empty_checkboxes ... ok [INFO] [stdout] test heartbeat::tests::test_is_heartbeat_empty_blank ... ok [INFO] [stdout] test heartbeat::tests::test_heartbeat_file_path ... ok [INFO] [stdout] test session::tests::test_session_add_and_get_history ... ok [INFO] [stdout] test session::tests::test_session_add_message_with_extra ... ok [INFO] [stdout] test session::tests::test_session_get_history_limit ... ok [INFO] [stdout] test session::tests::test_session_path_generation ... ok [INFO] [stdout] test memory::tests::test_memory_context_empty ... ok [INFO] [stdout] test session::tests::test_jsonl_roundtrip ... ok [INFO] [stdout] test memory::tests::test_read_write_long_term ... ok [INFO] [stdout] test cron::tests::test_cron_service_status ... ok [INFO] [stdout] test types::tests::test_inbound_deserialization_defaults ... ok [INFO] [stdout] test utils::tests::test_expand_tilde ... ok [INFO] [stdout] test types::tests::test_inbound_session_key ... ok [INFO] [stdout] test utils::tests::test_safe_filename ... ok [INFO] [stdout] test utils::tests::test_parse_session_key_with_multiple_colons ... ok [INFO] [stdout] test utils::tests::test_parse_session_key ... ok [INFO] [stdout] test utils::tests::test_parse_session_key_invalid ... ok [INFO] [stdout] test cron::tests::test_cron_service_persistence ... ok [INFO] [stdout] test cron::tests::test_cron_service_add_list_remove ... ok [INFO] [stdout] test types::tests::test_outbound_serialization ... ok [INFO] [stdout] test utils::tests::test_truncate_string ... ok [INFO] [stdout] test session::tests::test_metadata_line_has_type_field ... ok [INFO] [stdout] test utils::tests::test_timestamp_format ... ok [INFO] [stdout] test memory::tests::test_memory_context_with_content ... ok [INFO] [stdout] test memory::tests::test_write_long_term_overwrites ... ok [INFO] [stdout] test memory::tests::test_append_history ... ok [INFO] [stdout] test session::tests::test_session_clear ... ok [INFO] [stdout] test session::tests::test_list_sessions ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 57 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/nanobot_providers-9a320204836696ad) [INFO] [stdout] [INFO] [stdout] running 24 tests [INFO] [stdout] test openai_compat::tests::test_parse_tool_arguments_empty ... ok [INFO] [stdout] test openai_compat::tests::test_parse_tool_arguments_valid ... ok [INFO] [stdout] test openai_compat::tests::test_parse_tool_arguments_invalid ... ok [INFO] [stdout] test openai_compat::tests::test_parse_tool_arguments_with_fences ... ok [INFO] [stdout] test registry::tests::test_find_by_model_deepseek ... ok [INFO] [stdout] test registry::tests::test_find_by_model_anthropic ... ok [INFO] [stdout] test registry::tests::test_find_by_model_none ... ok [INFO] [stdout] test registry::tests::test_find_by_name ... ok [INFO] [stdout] test registry::tests::test_find_by_name_not_found ... ok [INFO] [stdout] test registry::tests::test_find_gateway_by_base_keyword ... ok [INFO] [stdout] test registry::tests::test_find_gateway_by_name ... ok [INFO] [stdout] test registry::tests::test_find_gateway_none ... ok [INFO] [stdout] test registry::tests::test_provider_count ... ok [INFO] [stdout] test registry::tests::test_label ... ok [INFO] [stdout] test registry::tests::test_model_overrides_kimi ... ok [INFO] [stdout] test registry::tests::test_model_overrides_no_match ... ok [INFO] [stdout] test registry::tests::test_find_by_model_skips_gateways ... ok [INFO] [stdout] test registry::tests::test_find_gateway_by_key_prefix ... ok [INFO] [stdout] test openai_compat::tests::test_apply_model_overrides_kimi ... ok [INFO] [stdout] test openai_compat::tests::test_resolve_model_gateway_prefix ... ok [INFO] [stdout] test openai_compat::tests::test_resolve_model_standard_provider ... ok [INFO] [stdout] test openai_compat::tests::test_resolve_model_gateway_strip_prefix ... ok [INFO] [stdout] test openai_compat::tests::test_resolve_model_skip_double_prefix ... ok [INFO] [stdout] test openai_compat::tests::test_resolve_model_no_prefix_needed ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s [INFO] [stdout] [INFO] [stderr] Doc-tests nanobot_agent [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 nanobot_channels [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 nanobot_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] [stderr] Doc-tests nanobot_providers [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" "15a6429598481ca65089e0999c3ec2fe283f9a3299fe47e6538a25abbfe06d40", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "15a6429598481ca65089e0999c3ec2fe283f9a3299fe47e6538a25abbfe06d40", kill_on_drop: false }` [INFO] [stdout] 15a6429598481ca65089e0999c3ec2fe283f9a3299fe47e6538a25abbfe06d40