[INFO] cloning repository https://github.com/ecortez91/sentinel [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ecortez91/sentinel" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fecortez91%2Fsentinel", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fecortez91%2Fsentinel'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 79608302f624b31e34fd5e21cecea0faf1c62ef5 [INFO] testing ecortez91/sentinel against try#dec9417b8611e34e787a3e4c37686b5131f9e5c5 for pr-154210 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fecortez91%2Fsentinel" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/ecortez91/sentinel [INFO] finished tweaking git repo https://github.com/ecortez91/sentinel [INFO] tweaked toml for git repo https://github.com/ecortez91/sentinel written to /workspace/builds/worker-3-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/ecortez91/sentinel on toolchain dec9417b8611e34e787a3e4c37686b5131f9e5c5 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/ecortez91/sentinel 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" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 64cec872b2545448b9ff2269858224175a698b92faf525e47c0d50e145fa71e1 [INFO] running `Command { std: "docker" "start" "-a" "64cec872b2545448b9ff2269858224175a698b92faf525e47c0d50e145fa71e1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "64cec872b2545448b9ff2269858224175a698b92faf525e47c0d50e145fa71e1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "64cec872b2545448b9ff2269858224175a698b92faf525e47c0d50e145fa71e1", kill_on_drop: false }` [INFO] [stdout] 64cec872b2545448b9ff2269858224175a698b92faf525e47c0d50e145fa71e1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 0bae3407d4b7b7a490d772c59c1fe95536fde94be9420b22896304f76ec07bd6 [INFO] running `Command { std: "docker" "start" "-a" "0bae3407d4b7b7a490d772c59c1fe95536fde94be9420b22896304f76ec07bd6", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.106 [INFO] [stderr] Compiling libc v0.2.180 [INFO] [stderr] Compiling cc v1.2.55 [INFO] [stderr] Compiling aho-corasick v1.1.4 [INFO] [stderr] Compiling bstr v1.12.1 [INFO] [stderr] Compiling zmij v1.0.19 [INFO] [stderr] Compiling crossbeam-epoch v0.9.18 [INFO] [stderr] Compiling winnow v0.7.14 [INFO] [stderr] Compiling rustls-pki-types v1.14.0 [INFO] [stderr] Compiling object v0.37.3 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling arc-swap v1.8.1 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling itertools v0.11.0 [INFO] [stderr] Compiling normpath v1.5.0 [INFO] [stderr] Compiling base62 v2.2.3 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling http-body-util v0.1.3 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Compiling crossbeam-deque v0.8.6 [INFO] [stderr] Compiling webpki-roots v1.0.6 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Compiling castaway v0.2.4 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling itertools v0.13.0 [INFO] [stderr] Compiling serde_with v3.16.1 [INFO] [stderr] Compiling libloading v0.8.9 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Compiling quote v1.0.44 [INFO] [stderr] Compiling unicode-width v0.2.0 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Compiling anyhow v1.0.101 [INFO] [stderr] Compiling hashlink v0.9.1 [INFO] [stderr] Compiling clap_builder v4.5.57 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling socket2 v0.6.2 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling stacker v0.1.23 [INFO] [stderr] Compiling libsqlite3-sys v0.28.0 [INFO] [stderr] Compiling hostname v0.4.2 [INFO] [stderr] Compiling nvml-wrapper-sys v0.8.0 [INFO] [stderr] Compiling compact_str v0.8.1 [INFO] [stderr] Compiling lru v0.12.5 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling crossterm v0.28.1 [INFO] [stderr] Compiling unicode-truncate v1.1.0 [INFO] [stderr] Compiling email-encoding v0.4.1 [INFO] [stderr] Compiling nom v8.0.0 [INFO] [stderr] Compiling ascii v1.1.0 [INFO] [stderr] Compiling quoted_printable v0.5.1 [INFO] [stderr] Compiling smawk v0.3.2 [INFO] [stderr] Compiling email_address v0.2.9 [INFO] [stderr] Compiling fallible-iterator v0.3.0 [INFO] [stderr] Compiling cassowary v0.3.0 [INFO] [stderr] Compiling unicode-linebreak v0.1.5 [INFO] [stderr] Compiling chunked_transfer v1.5.0 [INFO] [stderr] Compiling chrono v0.4.43 [INFO] [stderr] Compiling tiny_http v0.12.0 [INFO] [stderr] Compiling textwrap v0.16.2 [INFO] [stderr] Compiling sysinfo v0.32.1 [INFO] [stderr] Compiling globset v0.4.18 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling ignore v0.4.25 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Compiling ar_archive_writer v0.5.1 [INFO] [stderr] Compiling globwalk v0.8.1 [INFO] [stderr] Compiling psm v0.1.30 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling darling_core v0.20.11 [INFO] [stderr] Compiling chumsky v0.9.3 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling serde_repr v0.1.20 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling rust-i18n v3.1.5 [INFO] [stderr] Compiling rustls-webpki v0.103.9 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling tokio v1.49.0 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling strum v0.26.3 [INFO] [stderr] Compiling darling_macro v0.20.11 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling darling v0.20.11 [INFO] [stderr] Compiling wrapcenum-derive v0.4.1 [INFO] [stderr] Compiling tinystr v0.8.2 [INFO] [stderr] Compiling potential_utf v0.1.4 [INFO] [stderr] Compiling icu_collections v2.1.1 [INFO] [stderr] Compiling icu_locale_core v2.1.1 [INFO] [stderr] Compiling clap v4.5.57 [INFO] [stderr] Compiling ratatui v0.29.0 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling nvml-wrapper v0.10.0 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling serde_yaml v0.9.34+deprecated [INFO] [stderr] Compiling triomphe v0.1.15 [INFO] [stderr] Compiling icu_provider v2.1.1 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling bollard-stubs v1.47.1-rc.27.3.1 [INFO] [stderr] Compiling toml_edit v0.22.27 [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 url v2.5.8 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling rusqlite v0.31.0 [INFO] [stderr] Compiling rust-i18n-support v3.1.5 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling lettre v0.11.19 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling rust-i18n-macro v3.1.5 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling hyperlocal v0.9.1 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling bollard v0.18.1 [INFO] [stderr] Compiling sentinel v0.3.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 51s [INFO] running `Command { std: "docker" "inspect" "0bae3407d4b7b7a490d772c59c1fe95536fde94be9420b22896304f76ec07bd6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0bae3407d4b7b7a490d772c59c1fe95536fde94be9420b22896304f76ec07bd6", kill_on_drop: false }` [INFO] [stdout] 0bae3407d4b7b7a490d772c59c1fe95536fde94be9420b22896304f76ec07bd6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] a7719e340ed2236a9a3b199e49b0ed20f502904911a4b738e2fe524eb9f091fc [INFO] running `Command { std: "docker" "start" "-a" "a7719e340ed2236a9a3b199e49b0ed20f502904911a4b738e2fe524eb9f091fc", kill_on_drop: false }` [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Compiling tempfile v3.25.0 [INFO] [stderr] Compiling sentinel v0.3.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 16.69s [INFO] running `Command { std: "docker" "inspect" "a7719e340ed2236a9a3b199e49b0ed20f502904911a4b738e2fe524eb9f091fc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a7719e340ed2236a9a3b199e49b0ed20f502904911a4b738e2fe524eb9f091fc", kill_on_drop: false }` [INFO] [stdout] a7719e340ed2236a9a3b199e49b0ed20f502904911a4b738e2fe524eb9f091fc [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 1d01cb6184758c5894b3b58127c56231dfe7d1ffba6cf358d26f23a0a54051e4 [INFO] running `Command { std: "docker" "start" "-a" "1d01cb6184758c5894b3b58127c56231dfe7d1ffba6cf358d26f23a0a54051e4", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.53s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/sentinel-64c8a15d26d37e3c) [INFO] [stdout] [INFO] [stdout] running 554 tests [INFO] [stdout] test ai::conversation::tests::append_creates_new_if_empty ... ok [INFO] [stdout] test ai::conversation::tests::api_messages_filters_system ... ok [INFO] [stdout] test ai::conversation::tests::add_system_message ... ok [INFO] [stdout] test ai::conversation::tests::message_user ... ok [INFO] [stdout] test ai::conversation::tests::append_creates_new_if_last_not_assistant ... ok [INFO] [stdout] test ai::conversation::tests::message_assistant ... ok [INFO] [stdout] test ai::conversation::tests::trims_to_max_history ... ok [INFO] [stdout] test ai::conversation::tests::add_assistant_message ... ok [INFO] [stdout] test alerts::detector::tests::thermal_cooldown_dedup ... ok [INFO] [stdout] test alerts::detector::tests::thermal_critical_at_threshold ... ok [INFO] [stdout] test ai::conversation::tests::message_system ... ok [INFO] [stdout] test ai::conversation::tests::trim_removes_from_front ... ok [INFO] [stdout] test ai::conversation::tests::new_conversation_empty ... ok [INFO] [stdout] test ai::conversation::tests::append_to_last_assistant_extends ... ok [INFO] [stdout] test ai::conversation::tests::clear_empties_conversation ... ok [INFO] [stdout] test alerts::detector::tests::thermal_multiple_sensors ... ok [INFO] [stdout] test alerts::detector::tests::thermal_no_alert_below_warning ... ok [INFO] [stdout] test alerts::detector::tests::zombie_ignored_when_parent_in_ignore_list ... ok [INFO] [stdout] test alerts::detector::tests::zombie_alert_fires_when_parent_not_ignored ... ok [INFO] [stdout] test alerts::detector::tests::zombie_alert_fires_when_no_parent ... ok [INFO] [stdout] test alerts::detector::tests::zombie_parent_ignore_is_case_insensitive ... ok [INFO] [stdout] test alerts::detector::tests::thermal_emergency_at_threshold ... ok [INFO] [stdout] test alerts::detector::tests::thermal_warning_at_threshold ... ok [INFO] [stdout] test alerts::detector::tests::zombie_alert_message_includes_parent_name ... ok [INFO] [stdout] test ai::conversation::tests::add_user_message ... ok [INFO] [stdout] test config::tests::write_config_bytes_to_mib_conversion ... ok [INFO] [stdout] test constants::tests::all_model_tiers_are_distinct ... ok [INFO] [stdout] test constants::tests::all_models_start_with_claude_prefix ... ok [INFO] [stdout] test constants::tests::model_cheap_is_haiku ... ok [INFO] [stdout] test constants::tests::model_legacy_alias_equals_middle ... ok [INFO] [stdout] test diagnostics::tests::contention_healthy_system ... ok [INFO] [stdout] test constants::tests::model_middle_is_sonnet ... ok [INFO] [stdout] test constants::tests::model_premium_is_opus ... ok [INFO] [stdout] test constants::tests::premium_is_not_used_as_default ... ok [INFO] [stdout] test diagnostics::tests::contention_detects_zombies ... ok [INFO] [stdout] test diagnostics::tests::contention_ignores_zombie_with_ignored_parent ... ok [INFO] [stdout] test diagnostics::tests::contention_high_cpu ... ok [INFO] [stdout] test diagnostics::tests::contention_high_memory ... ok [INFO] [stdout] test diagnostics::tests::report_max_severity ... ok [INFO] [stdout] test diagnostics::tests::report_max_severity_empty ... ok [INFO] [stdout] test config::tests::save_load_thermal_credentials_roundtrip ... ok [INFO] [stdout] test diagnostics::tests::report_to_text_empty ... ok [INFO] [stdout] test diagnostics::tests::report_to_text_with_findings ... ok [INFO] [stdout] test ai::conversation::tests::api_messages_correct_format ... ok [INFO] [stdout] test diagnostics::tests::truncate_cmd_long ... ok [INFO] [stdout] test diagnostics::tests::truncate_cmd_short ... ok [INFO] [stdout] test diagnostics::tests::process_analysis_with_current ... ok [INFO] [stdout] test config::tests::save_atomic_no_temp_file_remains ... ok [INFO] [stdout] test models::alert::tests::alert_new_fields ... ok [INFO] [stdout] test models::alert::tests::age_display_just_created ... ok [INFO] [stdout] test models::alert::tests::alert_timestamp_is_recent ... ok [INFO] [stdout] test config::tests::save_omits_none_thermal_credentials ... ok [INFO] [stdout] test config::tests::save_creates_parent_directories ... ok [INFO] [stdout] test config::tests::save_load_full_roundtrip ... ok [INFO] [stdout] test config::tests::save_includes_documentation_header ... ok [INFO] [stdout] test models::process::tests::format_bytes_exact_mib ... ok [INFO] [stdout] test diagnostics::tests::timeline_empty_store ... ok [INFO] [stdout] test models::process::tests::format_bytes_mib_range ... ok [INFO] [stdout] test models::alert::tests::severity_display ... ok [INFO] [stdout] test models::process::tests::format_bytes_exact_gib ... ok [INFO] [stdout] test models::process::tests::format_bytes_large_gib ... ok [INFO] [stdout] test models::alert::tests::category_display ... ok [INFO] [stdout] test models::alert::tests::severity_ordering ... ok [INFO] [stdout] test models::process::tests::format_bytes_exact_kib ... ok [INFO] [stdout] test models::process::tests::format_bytes_kib_range ... ok [INFO] [stdout] test models::process::tests::format_bytes_small ... ok [INFO] [stdout] test diagnostics::tests::anomaly_scan_empty ... ok [INFO] [stdout] test models::process::tests::format_bytes_zero ... ok [INFO] [stdout] test models::process::tests::process_info_disk_displays ... ok [INFO] [stdout] test models::process::tests::process_info_memory_display ... ok [INFO] [stdout] test models::system::tests::gpu_memory_percent_full ... ok [INFO] [stdout] test models::process::tests::process_status_display ... ok [INFO] [stdout] test models::system::tests::gpu_memory_percent_normal ... ok [INFO] [stdout] test models::system::tests::gpu_memory_percent_zero_total ... ok [INFO] [stdout] test models::system::tests::memory_percent_full ... ok [INFO] [stdout] test models::process::tests::process_status_equality ... ok [INFO] [stdout] test models::system::tests::memory_percent_zero_total ... ok [INFO] [stdout] test models::system::tests::memory_percent_normal ... ok [INFO] [stdout] test diagnostics::tests::process_analysis_not_running ... ok [INFO] [stdout] test config::tests::save_roundtrip_preserves_values ... ok [INFO] [stdout] test models::system::tests::swap_percent_full ... ok [INFO] [stdout] test models::system::tests::swap_percent_normal ... ok [INFO] [stdout] test models::system::tests::swap_percent_zero_total ... ok [INFO] [stdout] test notifications::telegram::tests::category_display_name_not_abbreviated ... ok [INFO] [stdout] test notifications::telegram::tests::explain_group_cpu_high ... ok [INFO] [stdout] test notifications::telegram::tests::explain_group_zombie ... ok [INFO] [stdout] test notifications::telegram::tests::category_display_name_returns_human_readable ... ok [INFO] [stdout] test notifications::telegram::tests::explain_group_memory_leak ... ok [INFO] [stdout] test notifications::telegram::tests::format_alert_with_context_handles_partial_info ... ok [INFO] [stdout] test notifications::telegram::tests::explain_group_extreme_multiplier ... ok [INFO] [stdout] test notifications::telegram::tests::explain_group_memory_high ... ok [INFO] [stdout] test notifications::telegram::tests::format_alert_contains_key_fields ... ok [INFO] [stdout] test notifications::telegram::tests::format_alert_severity_emojis ... ok [INFO] [stdout] test notifications::telegram::tests::format_bytes_f64_ranges ... ok [INFO] [stdout] test notifications::telegram::tests::format_alert_with_context_includes_system_info ... ok [INFO] [stdout] test notifications::telegram::tests::format_digest_summarizes_alerts ... ok [INFO] [stdout] test notifications::telegram::tests::format_grouped_truncates_many_workers ... ok [INFO] [stdout] test diagnostics::tests::port_diagnosis_empty ... ok [INFO] [stdout] test notifications::telegram::tests::digest_buffer_caps_at_max ... ok [INFO] [stdout] test notifications::telegram::tests::format_digest_truncates_long_list ... ok [INFO] [stdout] test notifications::telegram::tests::from_config_falls_back_to_env_vars ... ok [INFO] [stdout] test notifications::telegram::tests::format_grouped_multi_shows_detailed_breakdown ... ok [INFO] [stdout] test notifications::telegram::tests::format_grouped_single_falls_back ... ok [INFO] [stdout] test notifications::telegram::tests::from_config_prefers_config_over_env ... ok [INFO] [stdout] test notifications::telegram::tests::format_grouped_sorts_workers_by_value_descending ... ok [INFO] [stdout] test notifications::telegram::tests::format_grouped_with_context_shows_inline ... ok [INFO] [stdout] test notifications::telegram::tests::from_config_returns_some_when_configured ... ok [INFO] [stdout] test notifications::telegram::tests::from_config_returns_none_when_chat_id_missing ... ok [INFO] [stdout] test notifications::telegram::tests::from_config_returns_none_when_token_empty ... ok [INFO] [stdout] test notifications::telegram::tests::group_computes_correct_average ... ok [INFO] [stdout] test notifications::telegram::tests::parse_min_severity_variants ... ok [INFO] [stdout] test notifications::telegram::tests::group_alerts_empty ... ok [INFO] [stdout] test notifications::telegram::tests::from_config_returns_none_when_both_missing ... ok [INFO] [stdout] test notifications::telegram::tests::group_alerts_non_groupable_stays_separate ... ok [INFO] [stdout] test notifications::telegram::tests::group_alerts_mixed_apps ... ok [INFO] [stdout] test diagnostics::tests::process_analysis_high_cpu_suggests_renice ... ok [INFO] [stdout] test notifications::telegram::tests::group_alerts_workers_same_parent ... ok [INFO] [stdout] test notifications::telegram::tests::resolve_parent_missing_parent_returns_self ... ok [INFO] [stdout] test notifications::telegram::tests::rate_limiting_blocks_duplicate ... ok [INFO] [stdout] test notifications::telegram::tests::resolve_parent_stops_at_init ... ok [INFO] [stdout] test diagnostics::tests::timeline_with_events ... ok [INFO] [stdout] test notifications::telegram::tests::from_config_returns_none_when_token_missing ... ok [INFO] [stdout] test notifications::telegram::tests::resolve_parent_direct_parent ... ok [INFO] [stdout] test notifications::telegram::tests::groupable_categories ... ok [INFO] [stdout] test notifications::telegram::tests::resolve_parent_non_worker_returns_self ... ok [INFO] [stdout] test notifications::telegram::tests::resolve_parent_two_hops ... ok [INFO] [stdout] test notifications::telegram::tests::suggest_action_cpu_danger ... ok [INFO] [stdout] test notifications::telegram::tests::severity_filter_blocks_low_severity ... ok [INFO] [stdout] test notifications::telegram::tests::suggest_action_memory_critical ... ok [INFO] [stdout] test notifications::telegram::tests::send_grouped_alerts_rate_limits_by_app_name ... ok [INFO] [stdout] test notifications::telegram::tests::worker_detail_fields ... ok [INFO] [stdout] test notifications::telegram::tests::suggest_action_memory_warning ... ok [INFO] [stdout] test notifications::telegram::tests::suggest_action_zombie ... ok [INFO] [stdout] test notifications::telegram::tests::worker_name_detection ... ok [INFO] [stdout] test notifications::telegram::tests::worker_details_populated_from_process_info ... ok [INFO] [stdout] test notifications::tests::is_configured_checks_fields ... ok [INFO] [stdout] test notifications::tests::notify_event_subjects ... ok [INFO] [stdout] test notifications::telegram::tests::worker_details_populated_for_cpu_category ... ok [INFO] [stdout] test notifications::telegram::tests::suggest_action_cpu_warning ... ok [INFO] [stdout] test notifications::telegram::tests::suggest_action_disk_io ... ok [INFO] [stdout] test notifications::telegram::tests::suggest_action_fallback_category ... ok [INFO] [stdout] test notifications::tests::thermal_alert_body_formatting ... ok [INFO] [stdout] test plugins::market::client::tests::client_creation ... ok [INFO] [stdout] test notifications::tests::rate_limiting_works ... ok [INFO] [stdout] test plugins::market::client::tests::parse_cryptocompare_article_missing_optional_fields ... ok [INFO] [stdout] test plugins::market::client::tests::parse_cryptocompare_news_response ... ok [INFO] [stdout] test plugins::market::client::tests::sentiment_label_case_insensitive ... ok [INFO] [stdout] test plugins::market::client::tests::parse_kline_response ... ok [INFO] [stdout] test plugins::market::client::tests::sentiment_label_mapping ... ok [INFO] [stdout] test plugins::market::client::tests::parse_ticker_response ... ok [INFO] [stdout] test plugins::market::models::tests::chart_range_all_has_five ... ok [INFO] [stdout] test plugins::market::models::tests::extract_base_asset_eth ... ok [INFO] [stdout] test plugins::market::models::tests::chart_range_interval ... ok [INFO] [stdout] test plugins::market::models::tests::extract_base_asset_btc ... ok [INFO] [stdout] test plugins::market::models::tests::extract_base_asset_sol ... ok [INFO] [stdout] test plugins::market::models::tests::extract_base_asset_btc_pair ... ok [INFO] [stdout] test plugins::market::models::tests::format_change_negative ... ok [INFO] [stdout] test plugins::market::models::tests::format_change_positive ... ok [INFO] [stdout] test plugins::market::models::tests::format_large_number_billion ... ok [INFO] [stdout] test plugins::market::models::tests::format_large_number_million ... ok [INFO] [stdout] test plugins::market::models::tests::format_large_number_trillion ... ok [INFO] [stdout] test plugins::market::models::tests::format_price_large ... ok [INFO] [stdout] test plugins::market::models::tests::format_price_small ... ok [INFO] [stdout] test plugins::market::models::tests::news_item_creation ... ok [INFO] [stdout] test plugins::market::models::tests::news_item_no_sentiment ... ok [INFO] [stdout] test plugins::market::models::tests::range_stats_avg_close ... ok [INFO] [stdout] test plugins::market::models::tests::range_stats_computes_range_pct ... ok [INFO] [stdout] test plugins::market::models::tests::range_stats_computes_trend ... ok [INFO] [stdout] test diagnostics::tests::disk_analysis_with_disks ... ok [INFO] [stdout] test plugins::market::models::tests::range_stats_counts_bullish_bearish ... ok [INFO] [stdout] test diagnostics::tests::disk_analysis_nearly_full ... ok [INFO] [stdout] test plugins::market::models::tests::range_stats_computes_high_low ... ok [INFO] [stdout] test notifications::tests::smtp_config_from_env_missing_returns_none ... ok [INFO] [stdout] test plugins::market::models::tests::range_stats_returns_none_for_too_few_points ... ok [INFO] [stdout] test plugins::market::models::tests::range_stats_volatility_is_positive ... ok [INFO] [stdout] test plugins::market::renderer::tests::bucket_candles_aggregates_ohlc ... ok [INFO] [stdout] test plugins::market::renderer::tests::bucket_candles_empty_history ... ok [INFO] [stdout] test plugins::market::renderer::tests::bucket_candles_one_to_one ... ok [INFO] [stdout] test plugins::market::renderer::tests::bucket_candles_zero_buckets ... ok [INFO] [stdout] test plugins::market::renderer::tests::format_axis_price_large ... ok [INFO] [stdout] test plugins::market::renderer::tests::format_axis_price_medium ... ok [INFO] [stdout] test plugins::market::renderer::tests::format_axis_price_small ... ok [INFO] [stdout] test plugins::market::renderer::tests::format_axis_price_tiny ... ok [INFO] [stdout] test plugins::market::renderer::tests::format_time_ago_days ... ok [INFO] [stdout] test plugins::market::renderer::tests::format_time_ago_hours ... ok [INFO] [stdout] test plugins::market::renderer::tests::format_time_ago_minutes ... ok [INFO] [stdout] test plugins::market::renderer::tests::format_time_ago_recent ... ok [INFO] [stdout] test plugins::market::renderer::tests::price_to_row_maps_max_to_top ... ok [INFO] [stdout] test plugins::market::renderer::tests::price_to_row_maps_mid_to_middle ... ok [INFO] [stdout] test plugins::market::renderer::tests::price_to_row_maps_min_to_bottom ... ok [INFO] [stdout] test plugins::market::renderer::tests::price_to_row_zero_range ... ok [INFO] [stdout] test plugins::market::renderer::tests::render_candle_bearish ... ok [INFO] [stdout] test plugins::market::renderer::tests::render_candle_bullish ... ok [INFO] [stdout] test plugins::market::renderer::tests::render_candle_doji ... ok [INFO] [stdout] test plugins::market::renderer::tests::truncate_long_string ... ok [INFO] [stdout] test plugins::market::renderer::tests::truncate_short_string ... ok [INFO] [stdout] test plugins::market::state::tests::add_ticker_works ... ok [INFO] [stdout] test plugins::market::state::tests::cycle_sort_goes_through_all ... ok [INFO] [stdout] test plugins::market::state::tests::favorites_filter_works ... ok [INFO] [stdout] test plugins::market::state::tests::search_filter_works ... ok [INFO] [stdout] test plugins::market::state::tests::visible_coins_default_sorted_by_rank ... ok [INFO] [stdout] test plugins::market::tests::cancel_add_does_not_save ... ok [INFO] [stdout] test plugins::market::tests::command_remove_queues_pending_action ... ok [INFO] [stdout] test plugins::market::tests::remove_ticker_returns_save_watchlist ... ok [INFO] [stdout] test plugins::registry::tests::enabled_plugins_filters_correctly ... ok [INFO] [stdout] test plugins::registry::tests::find_by_id_works ... ok [INFO] [stdout] test plugins::registry::tests::register_and_lookup ... ok [INFO] [stdout] test plugins::settings::tests::alert_thresholds_all_present ... ok [INFO] [stdout] test plugins::settings::tests::apply_clamps_cpu_threshold ... ok [INFO] [stdout] test plugins::settings::tests::apply_all_editable_keys_are_handled ... ok [INFO] [stdout] test plugins::settings::tests::apply_clamps_thermal_threshold ... ok [INFO] [stdout] test plugins::settings::tests::apply_invalid_number_returns_false ... ok [INFO] [stdout] test plugins::settings::tests::apply_lhm_password_empty_clears_to_none ... ok [INFO] [stdout] test plugins::settings::tests::apply_lhm_password_sets_some ... ok [INFO] [stdout] test plugins::settings::tests::apply_lhm_url_rejects_empty ... ok [INFO] [stdout] test plugins::settings::tests::apply_lhm_url_sets_value ... ok [INFO] [stdout] test plugins::settings::tests::apply_market_poll_enforces_minimum ... ok [INFO] [stdout] test plugins::settings::tests::apply_lhm_username_empty_clears_to_none ... ok [INFO] [stdout] test plugins::settings::tests::apply_mem_warning_converts_mib_to_bytes ... ok [INFO] [stdout] test plugins::settings::tests::apply_lhm_username_sets_some ... ok [INFO] [stdout] test plugins::settings::tests::apply_max_alerts_enforces_minimum ... ok [INFO] [stdout] test plugins::settings::tests::apply_score_alert_threshold_clamps_max ... ok [INFO] [stdout] test plugins::settings::tests::apply_shutdown_schedule_end ... ok [INFO] [stdout] test plugins::settings::tests::apply_refresh_interval_enforces_minimum ... ok [INFO] [stdout] test plugins::settings::tests::apply_score_alert_threshold ... ok [INFO] [stdout] test plugins::settings::tests::apply_shutdown_schedule_start ... ok [INFO] [stdout] test plugins::settings::tests::apply_shutdown_schedule_start_clamps ... ok [INFO] [stdout] test plugins::market::tests::command_add_queues_pending_action ... ok [INFO] [stdout] test plugins::settings::tests::apply_sustained_seconds_enforces_minimum ... ok [INFO] [stdout] test plugins::market::tests::command_duplicate_add_no_pending_action ... ok [INFO] [stdout] test plugins::settings::tests::apply_sys_mem_warning_percent ... ok [INFO] [stdout] test plugins::settings::tests::apply_theme_sets_value ... ok [INFO] [stdout] test plugins::settings::tests::apply_toggle_flips_boolean ... ok [INFO] [stdout] test plugins::settings::tests::apply_unicode_mode ... ok [INFO] [stdout] test plugins::settings::tests::apply_unknown_key_returns_false ... ok [INFO] [stdout] test plugins::market::tests::drain_pending_actions_clears_queue ... ok [INFO] [stdout] test plugins::settings::tests::apply_ssh_threshold_enforces_minimum ... ok [INFO] [stdout] test plugins::settings::tests::apply_max_suspicious_outbound ... ok [INFO] [stdout] test plugins::settings::tests::apply_sustained_seconds ... ok [INFO] [stdout] test plugins::settings::tests::apply_ssh_brute_force_threshold ... ok [INFO] [stdout] test plugins::settings::tests::cycle_advances_theme ... ok [INFO] [stdout] test plugins::settings::tests::number_edit_clamps_above_max ... ok [INFO] [stdout] test plugins::settings::tests::cycle_wraps_around ... ok [INFO] [stdout] test plugins::settings::tests::number_edit_clamps_below_min ... ok [INFO] [stdout] test plugins::settings::tests::glyph_mode_in_general_category ... ok [INFO] [stdout] test plugins::settings::tests::edit_mode_blocks_navigation ... ok [INFO] [stdout] test plugins::settings::tests::number_edit_rejects_double_dot ... ok [INFO] [stdout] test plugins::settings::tests::category_change_resets_item_selection ... ok [INFO] [stdout] test plugins::settings::tests::number_enter_activates_edit_mode ... ok [INFO] [stdout] test plugins::settings::tests::navigation_does_not_overflow ... ok [INFO] [stdout] test plugins::settings::tests::number_edit_esc_cancels ... ok [INFO] [stdout] test plugins::settings::tests::number_edit_confirm_valid ... ok [INFO] [stdout] test plugins::settings::tests::apply_sys_mem_critical_percent ... ok [INFO] [stdout] test plugins::settings::tests::apply_sys_mem_percent_clamps ... ok [INFO] [stdout] test plugins::market::tests::duplicate_add_does_not_save ... ok [INFO] [stdout] test plugins::settings::tests::number_edit_only_accepts_digits_and_dot ... ok [INFO] [stdout] test plugins::settings::tests::apply_mem_critical_threshold ... ok [INFO] [stdout] test plugins::settings::tests::settings_list_reflects_config_values ... ok [INFO] [stdout] test plugins::settings::tests::text_edit_backspace_removes_char ... ok [INFO] [stdout] test plugins::settings::tests::settings_rebuild_after_edit ... ok [INFO] [stdout] test plugins::settings::tests::security_category_exists_in_settings_list ... ok [INFO] [stdout] test plugins::settings::tests::text_enter_activates_edit_mode ... ok [INFO] [stdout] test plugins::settings::tests::text_edit_confirm_applies_value ... ok [INFO] [stdout] test plugins::settings::tests::text_edit_accepts_printable_chars ... ok [INFO] [stdout] test plugins::settings::tests::text_edit_respects_max_length ... ok [INFO] [stdout] test plugins::settings::tests::thermal_schedule_items_exist ... ok [INFO] [stdout] test plugins::settings::tests::readonly_shows_status ... ok [INFO] [stdout] test plugins::settings::tests::toggle_notification_produces_config_changed ... ok [INFO] [stdout] test plugins::market::tests::add_ticker_returns_save_watchlist ... ok [INFO] [stdout] test plugins::tests::default_methods_return_expected_values ... ok [INFO] [stdout] test plugins::windows::models::tests::agent_status_serialization ... ok [INFO] [stdout] test plugins::windows::models::tests::memory_usage_pct_normal ... ok [INFO] [stdout] test plugins::windows::models::tests::disk_usage_pct ... ok [INFO] [stdout] test plugins::windows::models::tests::memory_usage_pct_zero_total ... ok [INFO] [stdout] test plugins::windows::models::tests::disk_usage_pct_zero_total ... ok [INFO] [stdout] test plugins::windows::models::tests::network_info_roundtrip ... ok [INFO] [stdout] test plugins::windows::models::tests::old_json_without_new_fields_parses ... ok [INFO] [stdout] test plugins::windows::renderer::tests::truncate_str_long ... ok [INFO] [stdout] test plugins::windows::renderer::tests::format_uptime_days ... ok [INFO] [stdout] test plugins::windows::models::tests::snapshot_with_new_fields_roundtrip ... ok [INFO] [stdout] test plugins::windows::state::tests::panel_cycle_forward_wraps ... ok [INFO] [stdout] test plugins::windows::renderer::tests::format_bytes_gb ... ok [INFO] [stdout] test plugins::windows::state::tests::panel_focus_toggle ... ok [INFO] [stdout] test plugins::windows::state::tests::panel_cycle_noop_when_not_focused ... ok [INFO] [stdout] test plugins::windows::renderer::tests::format_bytes_mb ... ok [INFO] [stdout] test plugins::windows::renderer::tests::format_uptime_minutes ... ok [INFO] [stdout] test plugins::windows::renderer::tests::format_uptime_hours ... ok [INFO] [stdout] test plugins::settings::tests::toggle_produces_config_changed ... ok [INFO] [stdout] test plugins::tests::plugin_action_debug ... ok [INFO] [stdout] test plugins::windows::state::tests::cycle_sort_rotates_all_fields ... ok [INFO] [stdout] test plugins::windows::renderer::tests::truncate_str_short ... ok [INFO] [stdout] test plugins::windows::models::tests::security_status_roundtrip ... ok [INFO] [stdout] test plugins::windows::state::tests::selection_does_not_underflow ... ok [INFO] [stdout] test plugins::windows::state::tests::sort_field_labels ... ok [INFO] [stdout] test plugins::windows::state::tests::new_state_defaults ... ok [INFO] [stdout] test plugins::windows::state::tests::toggle_sort_direction ... ok [INFO] [stdout] test plugins::windows::tests::ai_key_sets_status_without_snapshot ... ok [INFO] [stdout] test plugins::windows::state::tests::cycle_sort_resets_selection ... ok [INFO] [stdout] test plugins::windows::tests::ai_key_emits_request_with_snapshot ... ok [INFO] [stdout] test plugins::windows::state::tests::toggle_sort_direction_resets_selection ... ok [INFO] [stdout] test plugins::windows::tests::ai_error_sets_message ... ok [INFO] [stdout] test plugins::windows::tests::focus_key_toggles_panel ... ok [INFO] [stdout] test plugins::windows::tests::ai_receive_chunk_and_done ... ok [INFO] [stdout] test plugins::windows::tests::execute_command_with_snapshot ... ok [INFO] [stdout] test plugins::windows::tests::focus_cycle_key_only_when_focused ... ok [INFO] [stdout] test plugins::windows::tests::is_enabled_respects_config ... ok [INFO] [stdout] test plugins::windows::tests::key_down_does_not_overflow ... ok [INFO] [stdout] test plugins::windows::tests::key_up_does_not_underflow ... ok [INFO] [stdout] test plugins::windows::tests::key_navigation_up_down ... ok [INFO] [stdout] test plugins::windows::tests::plugin_id_and_label ... ok [INFO] [stdout] test plugins::windows::tests::help_entries_not_empty ... ok [INFO] [stdout] test plugins::windows::tests::security_alerts_all_healthy_no_alerts ... ok [INFO] [stdout] test plugins::windows::tests::home_end_keys ... ok [INFO] [stdout] test plugins::windows::tests::security_alerts_cooldown_dedup ... ok [INFO] [stdout] test plugins::windows::tests::security_alerts_defender_off ... ok [INFO] [stdout] test plugins::windows::tests::execute_command_unknown ... ok [INFO] [stdout] test plugins::windows::tests::execute_command_no_snapshot ... ok [INFO] [stdout] test plugins::windows::tests::sort_direction_key_toggles ... ok [INFO] [stdout] test plugins::windows::tests::status_bar_hints_not_empty ... ok [INFO] [stdout] test plugins::windows::tests::security_alerts_stale_updates ... ok [INFO] [stdout] test security::collector::tests::analyze_suspicious_outbound_skips_loopback ... ok [INFO] [stdout] test security::collector::tests::analyze_suspicious_outbound_capped ... ok [INFO] [stdout] test security::collector::tests::auth_log_scan_best_effort ... ok [INFO] [stdout] test security::collector::tests::auth_log_scan_brute_force_threshold ... ok [INFO] [stdout] test security::collector::tests::classify_known_port_matching_process ... ok [INFO] [stdout] test plugins::windows::tests::unhandled_key_returns_ignored ... ok [INFO] [stdout] test security::collector::tests::classify_known_port_wrong_process ... ok [INFO] [stdout] test security::collector::tests::analyze_suspicious_outbound_allows_standard_port ... ok [INFO] [stdout] test security::collector::tests::analyze_suspicious_outbound_flags_nonstandard_port ... ok [INFO] [stdout] test security::collector::tests::classify_unknown_port_with_valid_process ... ok [INFO] [stdout] test security::collector::tests::classify_no_pid_is_unowned ... ok [INFO] [stdout] test security::collector::tests::extract_failed_ssh_info_invalid_user ... ok [INFO] [stdout] test security::collector::tests::auth_log_scan_events_bounded ... ok [INFO] [stdout] test security::collector::tests::classify_generic_known_port_any_process ... ok [INFO] [stdout] test security::collector::tests::extract_auth_detail_truncates ... ok [INFO] [stdout] test plugins::windows::tests::security_alerts_firewall_off ... ok [INFO] [stdout] test security::collector::tests::extract_failed_ssh_info_no_from_keyword ... ok [INFO] [stdout] test security::collector::tests::extract_failed_ssh_info_standard_line ... ok [INFO] [stdout] test security::collector::tests::extract_sudo_detail_extracts_command ... ok [INFO] [stdout] test security::collector::tests::parse_cron_line_at_reboot ... ok [INFO] [stdout] test security::collector::tests::parse_cron_line_too_few_fields ... ok [INFO] [stdout] test security::collector::tests::parse_cron_line_rejects_non_cron ... ok [INFO] [stdout] test security::collector::tests::parse_cron_line_standard ... ok [INFO] [stdout] test plugins::windows::tests::sort_key_cycles_field ... ok [INFO] [stdout] test security::collector::tests::parse_system_cron_line_standard ... ok [INFO] [stdout] test security::collector::tests::score_deducts_for_threats ... ok [INFO] [stdout] test security::collector::tests::score_deducts_for_suspicious_outbound_capped ... ok [INFO] [stdout] test security::collector::tests::score_starts_at_100_when_clean ... ok [INFO] [stdout] test security::collector::tests::score_deducts_for_no_auth_log ... ok [INFO] [stdout] test security::state::tests::default_state_is_clean ... ok [INFO] [stdout] test security::collector::tests::score_deducts_for_modified_packages ... ok [INFO] [stdout] test security::collector::tests::score_clamps_at_zero ... ok [INFO] [stdout] test security::collector::tests::score_deducts_for_ssh_brute_force ... ok [INFO] [stdout] test security::collector::tests::score_deducts_for_suspicious_and_unowned ... ok [INFO] [stdout] test security::state::tests::port_risk_ordering ... ok [INFO] [stdout] test security::collector::tests::score_combined_new_penalties ... ok [INFO] [stdout] test security::state::tests::score_label_thresholds ... ok [INFO] [stdout] test security::state::tests::security_event_age_display ... ok [INFO] [stdout] test store::tests::event_kind_from_str_unknown ... ok [INFO] [stdout] test store::tests::event_kind_roundtrip ... ok [INFO] [stdout] test security::state::tests::focus_panel_resets_selection ... ok [INFO] [stdout] test store::tests::format_age_hours ... ok [INFO] [stdout] test security::state::tests::focused_item_count_per_panel ... ok [INFO] [stdout] test store::tests::format_age_seconds ... ok [INFO] [stdout] test store::tests::format_age_minutes ... ok [INFO] [stdout] test security::collector::tests::logged_in_users_returns_vec ... ok [INFO] [stdout] test store::tests::add_favorite_is_idempotent ... ok [INFO] [stdout] test security::state::tests::panel_next_cycles_all ... ok [INFO] [stdout] test security::state::tests::panel_prev_is_inverse_of_next ... ok [INFO] [stdout] test store::tests::event_counts_by_kind ... ok [INFO] [stdout] test store::tests::detect_process_start_exit ... ok [INFO] [stdout] test store::tests::get_favorites_empty_initially ... ok [INFO] [stdout] test store::tests::add_and_get_favorites ... ok [INFO] [stdout] test store::tests::parse_hex_addr_ipv4 ... ok [INFO] [stdout] test store::tests::parse_hex_addr_ipv4_any ... ok [INFO] [stdout] test security::collector::tests::collect_cron_entries_returns_bounded_vec ... ok [INFO] [stdout] test store::tests::cleanup_removes_old_data ... ok [INFO] [stdout] test plugins::windows::tests::tick_drains_data_from_channel ... ok [INFO] [stdout] test store::tests::tcp_state_names ... ok [INFO] [stdout] test thermal::shutdown::tests::abort_on_normal_returns_false ... ok [INFO] [stdout] test thermal::shutdown::tests::abort_resets_state ... ok [INFO] [stdout] test thermal::shutdown::tests::counting_recovers_below_critical ... ok [INFO] [stdout] test plugins::windows::tests::tick_drains_error_from_channel ... ok [INFO] [stdout] test thermal::shutdown::tests::disabled_manager_does_nothing ... ok [INFO] [stdout] test thermal::shutdown::tests::normal_stays_normal_below_emergency ... ok [INFO] [stdout] test thermal::shutdown::tests::normal_to_counting_at_emergency ... ok [INFO] [stdout] test thermal::shutdown::tests::seconds_remaining_counting ... ok [INFO] [stdout] test thermal::shutdown::tests::seconds_remaining_normal_is_none ... ok [INFO] [stdout] test thermal::shutdown::tests::state_labels ... ok [INFO] [stdout] test thermal::tests::detect_wsl_host_ip_returns_some_on_wsl ... ok [INFO] [stdout] test thermal::tests::from_config_or_env_falls_back_to_env_when_config_empty ... ok [INFO] [stdout] test thermal::tests::from_config_or_env_falls_back_when_config_has_empty_strings ... ok [INFO] [stdout] test thermal::tests::from_config_or_env_prefers_config_over_env ... ok [INFO] [stdout] test thermal::tests::from_config_or_env_returns_none_when_both_missing ... ok [INFO] [stdout] test thermal::tests::is_cpu_hardware_detects_intel_amd ... ok [INFO] [stdout] test thermal::tests::is_gpu_hardware_detects_nvidia_amd ... ok [INFO] [stdout] test thermal::tests::is_memory_hardware_detects_ram ... ok [INFO] [stdout] test thermal::tests::is_motherboard_cpu_sensor_detects_socket ... ok [INFO] [stdout] test store::tests::sync_favorites_empty_to_empty ... ok [INFO] [stdout] test thermal::tests::is_noise_sensor_filters_metadata ... ok [INFO] [stdout] test thermal::tests::is_noise_sensor_filters_tjmax ... ok [INFO] [stdout] test thermal::tests::is_storage_hardware_detects_drives ... ok [INFO] [stdout] test thermal::tests::lhm_auth_from_env_returns_none_when_missing ... ok [INFO] [stdout] test thermal::tests::lhm_auth_from_env_returns_some_when_set ... ok [INFO] [stdout] test thermal::tests::motherboard_cpu_sensor_does_not_inflate_max_temp ... ok [INFO] [stdout] test thermal::tests::live_lhm_poll_returns_thermal_data ... ok [INFO] [stdout] test store::tests::open_in_memory ... ok [INFO] [stdout] test thermal::tests::natural_sort_key_cores ... ok [INFO] [stdout] test thermal::tests::noise_sensors_excluded_from_parse ... ok [INFO] [stdout] test thermal::tests::natural_sort_key_no_number ... ok [INFO] [stdout] test thermal::tests::parse_lhm_json_empty_returns_none ... ok [INFO] [stdout] test thermal::tests::parse_lhm_json_no_ram_temps ... ok [INFO] [stdout] test thermal::tests::parse_sensor_value_celsius ... ok [INFO] [stdout] test thermal::tests::parse_sensor_value_comma_decimal ... ok [INFO] [stdout] test thermal::tests::parse_sensor_value_empty ... ok [INFO] [stdout] test thermal::tests::parse_sensor_value_rpm ... ok [INFO] [stdout] test thermal::tests::parse_lhm_json_with_ram_temps ... ok [INFO] [stdout] test store::tests::system_snapshot_time_filter ... ok [INFO] [stdout] test store::tests::insert_and_query_events ... ok [INFO] [stdout] test store::tests::insert_and_query_system_snapshot ... ok [INFO] [stdout] test store::tests::recent_events_summary_format ... ok [INFO] [stdout] test ui::glyphs::tests::ascii_mode_has_safe_chars ... ok [INFO] [stdout] test ui::glyphs::tests::ascii_spinner_cycles ... ok [INFO] [stdout] test thermal::tests::resolve_lhm_url_respects_env_override ... ok [INFO] [stdout] test thermal::tests::parse_lhm_json_full_tree ... ok [INFO] [stdout] test thermal::tests::resolve_lhm_url_substitutes_wsl_host ... ok [INFO] [stdout] test thermal::tests::thermal_snapshot_to_text ... ok [INFO] [stdout] test thermal::tests::thermal_snapshot_to_text_includes_ram ... ok [INFO] [stdout] test store::tests::process_snapshots_deduplication ... ok [INFO] [stdout] test ui::glyphs::tests::spinner_cycles ... ok [INFO] [stdout] test ui::renderer::helpers::tests::centered_rect_larger_than_area ... ok [INFO] [stdout] test ui::renderer::helpers::tests::centered_rect_normal ... ok [INFO] [stdout] test ui::renderer::helpers::tests::centered_rect_with_offset_area ... ok [INFO] [stdout] test ui::glyphs::tests::glyph_mode_from_config ... ok [INFO] [stdout] test store::tests::remove_favorite ... ok [INFO] [stdout] test ui::renderer::helpers::tests::format_rate_gib ... ok [INFO] [stdout] test ui::glyphs::tests::bar_helper_full ... ok [INFO] [stdout] test ui::renderer::helpers::tests::format_rate_kib ... ok [INFO] [stdout] test ui::glyphs::tests::bar_helper_half ... ok [INFO] [stdout] test ui::glyphs::tests::unicode_mode_has_block_chars ... ok [INFO] [stdout] test ui::renderer::helpers::tests::format_rate_mib ... ok [INFO] [stdout] test ui::renderer::helpers::tests::centered_rect_exact_fit ... ok [INFO] [stdout] test ui::renderer::helpers::tests::truncate_str_adds_ellipsis ... ok [INFO] [stdout] test ui::renderer::helpers::tests::truncate_str_max_2 ... ok [INFO] [stdout] test ui::renderer::helpers::tests::truncate_str_max_0 ... ok [INFO] [stdout] test ui::renderer::helpers::tests::format_rate_bytes ... ok [INFO] [stdout] test ui::renderer::helpers::tests::truncate_str_empty_input ... ok [INFO] [stdout] test ui::renderer::helpers::tests::truncate_str_max_3 ... ok [INFO] [stdout] test ui::renderer::helpers::tests::truncate_str_short_unchanged ... ok [INFO] [stdout] test ui::state::tests::ai_cursor_right_at_end ... ok [INFO] [stdout] test ui::state::tests::ai_cursor_movement ... ok [INFO] [stdout] test ui::renderer::helpers::tests::truncate_str_exact_fit ... ok [INFO] [stdout] test ui::state::tests::ai_input_backspace_at_start ... ok [INFO] [stdout] test ui::state::tests::ai_submit_empty_returns_none ... ok [INFO] [stdout] test ui::renderer::helpers::tests::format_rate_zero ... ok [INFO] [stdout] test store::tests::insert_and_query_process_snapshots ... ok [INFO] [stdout] test ui::state::tests::ai_input_char_and_backspace ... ok [INFO] [stdout] test ui::state::tests::command_result_from_report_clean_dir_action ... ok [INFO] [stdout] test ui::state::tests::command_result_from_report_extracts_actions ... ok [INFO] [stdout] test ui::state::tests::ai_submit_returns_text_and_clears ... ok [INFO] [stdout] test ui::state::tests::ai_submit_whitespace_only_returns_none ... ok [INFO] [stdout] test ui::state::tests::apply_direction_desc ... ok [INFO] [stdout] test store::tests::remove_nonexistent_favorite_is_noop ... ok [INFO] [stdout] test store::tests::sync_favorites_adds_and_removes ... ok [INFO] [stdout] test store::tests::query_events_by_kind ... ok [INFO] [stdout] test ui::state::tests::apply_direction_asc ... ok [INFO] [stdout] test ui::state::tests::command_result_from_report_renice_action ... ok [INFO] [stdout] test store::tests::table_stats_empty ... ok [INFO] [stdout] test ui::glyphs::tests::bar_helper_empty ... ok [INFO] [stdout] test ui::state::tests::command_result_has_executable_actions_info_only ... ok [INFO] [stdout] test ui::state::tests::command_result_text_only_has_no_actions ... ok [INFO] [stdout] test ui::state::tests::close_process_detail_clears_loading_state ... ok [INFO] [stdout] test ui::state::tests::cycle_focus_forward ... ok [INFO] [stdout] test ui::state::tests::cycle_sort_goes_through_all ... ok [INFO] [stdout] test ui::state::tests::cycle_theme_changes ... ok [INFO] [stdout] test ui::state::tests::danger_alert_count_mixed ... ok [INFO] [stdout] test ui::state::tests::filtered_processes_by_cmd ... ok [INFO] [stdout] test ui::state::tests::history_window_next_cycles ... ok [INFO] [stdout] test ui::state::tests::filtered_processes_case_insensitive ... ok [INFO] [stdout] test ui::state::tests::history_window_next_prev_inverse ... ok [INFO] [stdout] test ui::state::tests::filtered_processes_by_name ... ok [INFO] [stdout] test ui::state::tests::filtered_processes_by_pid ... ok [INFO] [stdout] test ui::state::tests::history_window_prev_cycles ... ok [INFO] [stdout] test ui::state::tests::filtered_processes_no_filter ... ok [INFO] [stdout] test ui::state::tests::load_extra_does_nothing_when_popup_closed_before_load ... ok [INFO] [stdout] test ui::state::tests::load_extra_noop_when_no_pending ... ok [INFO] [stdout] test ui::state::tests::cycle_lang_includes_cjk_when_supported ... ok [INFO] [stdout] test ui::state::tests::danger_alert_count_none ... ok [INFO] [stdout] test ui::state::tests::history_window_points ... ok [INFO] [stdout] test ui::state::tests::next_tab_with_plugins_cycles ... ok [INFO] [stdout] test ui::state::tests::prev_tab_cycles ... ok [INFO] [stdout] test ui::state::tests::open_process_detail_sets_loading_true ... ok [INFO] [stdout] test ui::state::tests::renice_dialog_open_close ... ok [INFO] [stdout] test ui::state::tests::load_process_detail_extra_populates_fds_and_environ ... ok [INFO] [stdout] test ui::state::tests::cycle_lang_skips_cjk_when_unsupported ... ok [INFO] [stdout] test ui::state::tests::signal_picker_no_process ... ok [INFO] [stdout] test ui::state::tests::set_status_stores_message ... ok [INFO] [stdout] test ui::state::tests::scroll_down_increases ... ok [INFO] [stdout] test ui::state::tests::signal_picker_open_close ... ok [INFO] [stdout] test ui::state::tests::next_tab_cycles ... ok [INFO] [stdout] test ui::state::tests::sort_by_pid ... ok [INFO] [stdout] test ui::state::tests::tab_all_with_plugins_inserts_between_security_and_askai ... ok [INFO] [stdout] test ui::state::tests::scroll_up_at_zero_stays ... ok [INFO] [stdout] test ui::state::tests::scroll_alerts_tab ... ok [INFO] [stdout] test ui::state::tests::selected_process_info_empty ... ok [INFO] [stdout] test ui::state::tests::sort_by_cpu_asc ... ok [INFO] [stdout] test ui::state::tests::sort_by_cpu_desc ... ok [INFO] [stdout] test ui::state::tests::sort_by_memory ... ok [INFO] [stdout] test ui::state::tests::selected_process_info_returns_correct ... ok [INFO] [stdout] test ui::state::tests::tab_all_with_zero_plugins_has_six ... ok [INFO] [stdout] test ui::state::tests::tab_index ... ok [INFO] [stdout] test ui::state::tests::toggle_sort_direction ... ok [INFO] [stdout] test ui::state::tests::tree_processes_flat ... ok [INFO] [stdout] test ui::state::tests::toggle_focus_on_dashboard ... ok [INFO] [stdout] test ui::theme::tests::builtin_theme_names_dracula_first ... ok [INFO] [stdout] test ui::theme::tests::by_name_all_builtins ... ok [INFO] [stdout] test ui::theme::tests::default_is_dracula ... ok [INFO] [stdout] test ui::theme::tests::next_builtin_cycles_through_all ... ok [INFO] [stdout] test ui::theme::tests::next_builtin_wraps_around ... ok [INFO] [stdout] test ui::theme::tests::by_name_case_insensitive ... ok [INFO] [stdout] test ui::theme::tests::parse_color_invalid_length ... ok [INFO] [stdout] test ui::theme::tests::parse_color_invalid_hex ... ok [INFO] [stdout] test ui::theme::tests::parse_color_lowercase ... ok [INFO] [stdout] test ui::theme::tests::parse_color_none ... ok [INFO] [stdout] test ui::theme::tests::by_name_unknown ... ok [INFO] [stdout] test ui::theme::tests::parse_color_white ... ok [INFO] [stdout] test ui::state::tests::sort_by_name ... ok [INFO] [stdout] test ui::state::tests::tree_processes_parent_child ... ok [INFO] [stdout] test ui::theme::tests::parse_color_black ... ok [INFO] [stdout] test ui::theme::tests::temp_color_high ... ok [INFO] [stdout] test ui::theme::tests::temp_color_critical ... ok [INFO] [stdout] test ui::theme::tests::parse_color_with_hash ... ok [INFO] [stdout] test ui::theme::tests::theme_cycle_starts_from_dracula ... ok [INFO] [stdout] test ui::theme::tests::usage_color_critical ... ok [INFO] [stdout] test ui::theme::tests::temp_color_low ... ok [INFO] [stdout] test ui::theme::tests::usage_color_low ... ok [INFO] [stdout] test utils::tests::detect_platform_returns_consistent_value ... ok [INFO] [stdout] test ui::theme::tests::temp_color_mid ... ok [INFO] [stdout] test ui::theme::tests::usage_color_mid ... ok [INFO] [stdout] test ui::theme::tests::parse_color_without_hash ... ok [INFO] [stderr] Running unittests src/agent/main.rs (/opt/rustwide/target/debug/deps/sentinel_agent-f9aa9e4985fc5777) [INFO] [stdout] test utils::tests::loading_dots_cycles ... ok [INFO] [stdout] test utils::tests::spinner_char_cycles ... ok [INFO] [stdout] test utils::tests::truncate_str_exact_length ... ok [INFO] [stdout] test utils::tests::truncate_str_empty_string ... ok [INFO] [stdout] test utils::tests::truncate_str_max_len_3_or_less ... ok [INFO] [stdout] test utils::tests::truncate_str_max_len_zero ... ok [INFO] [stdout] test utils::tests::truncate_str_max_len_4 ... ok [INFO] [stdout] test utils::tests::truncate_str_needs_truncation ... ok [INFO] [stdout] test security::collector::tests::collect_systemd_timers_returns_bounded_vec ... ok [INFO] [stdout] test utils::tests::truncate_str_short_string_unchanged ... ok [INFO] [stdout] test ui::theme::tests::usage_color_high ... ok [INFO] [stdout] test utils::tests::has_windows_interop_matches_wsl ... ok [INFO] [stdout] test utils::tests::is_wsl_matches_detect_platform ... ok [INFO] [stdout] test ui::state::tests::command_result_from_report_free_port_action ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 554 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 24 tests [INFO] [stdout] test tests::agent_action_variants_exist ... ok [INFO] [stdout] test tests::agent_action_default_is_console ... ok [INFO] [stdout] test tests::is_thread_returns_false_for_current_process ... ok [INFO] [stdout] test tests::is_thread_returns_false_for_nonexistent_pid ... ok [INFO] [stdout] test tests::parse_addr_port_invalid ... ok [INFO] [stdout] test tests::parse_addr_port_ipv4 ... ok [INFO] [stdout] test tests::is_thread_returns_false_for_pid_1 ... ok [INFO] [stdout] test tests::parse_addr_port_ipv6_bracket ... ok [INFO] [stdout] test tests::parse_addr_port_ipv4_any ... ok [INFO] [stdout] test tests::parse_defender_enabled ... ok [INFO] [stdout] test tests::parse_defender_disabled ... ok [INFO] [stdout] test tests::parse_defender_empty ... ok [INFO] [stdout] test tests::parse_firewall_all_on ... ok [INFO] [stdout] test tests::parse_firewall_mixed ... ok [INFO] [stdout] test tests::parse_update_days_valid ... ok [INFO] [stdout] test tests::parse_netstat_output_empty ... ok [INFO] [stdout] test tests::parse_netstat_output_malformed ... ok [INFO] [stdout] test tests::parse_query_user_empty ... ok [INFO] [stdout] test tests::parse_netstat_output_standard ... ok [INFO] [stdout] test tests::parse_query_user_standard ... ok [INFO] [stdout] test tests::parse_startup_entries ... ok [INFO] [stdout] test tests::parse_startup_entries_empty ... ok [INFO] [stdout] test tests::parse_firewall_empty ... ok [INFO] [stdout] test tests::parse_update_days_invalid ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "1d01cb6184758c5894b3b58127c56231dfe7d1ffba6cf358d26f23a0a54051e4", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "1d01cb6184758c5894b3b58127c56231dfe7d1ffba6cf358d26f23a0a54051e4", kill_on_drop: false }` [INFO] [stdout] 1d01cb6184758c5894b3b58127c56231dfe7d1ffba6cf358d26f23a0a54051e4