[INFO] cloning repository https://github.com/aaroncohen/pid-ctl
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/aaroncohen/pid-ctl" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Faaroncohen%2Fpid-ctl", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Faaroncohen%2Fpid-ctl'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 64520017d73f1aeae88d9d85239aa9c0778593d3
[INFO] testing aaroncohen/pid-ctl against try#b8e88e5ddf5521a9f43ee3f62a702388c713e4bb for pr-155114
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Faaroncohen%2Fpid-ctl" "/workspace/builds/worker-1-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/aaroncohen/pid-ctl
[INFO] finished tweaking git repo https://github.com/aaroncohen/pid-ctl
[INFO] tweaked toml for git repo https://github.com/aaroncohen/pid-ctl written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/aaroncohen/pid-ctl on toolchain b8e88e5ddf5521a9f43ee3f62a702388c713e4bb
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+b8e88e5ddf5521a9f43ee3f62a702388c713e4bb" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/aaroncohen/pid-ctl 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" "+b8e88e5ddf5521a9f43ee3f62a702388c713e4bb" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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" "+b8e88e5ddf5521a9f43ee3f62a702388c713e4bb" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 6c4262f4e05f00db3656f3db36357e6d2f4f051a9abacb921023bd2397f4894e
[INFO] running `Command { std: "docker" "start" "-a" "6c4262f4e05f00db3656f3db36357e6d2f4f051a9abacb921023bd2397f4894e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "6c4262f4e05f00db3656f3db36357e6d2f4f051a9abacb921023bd2397f4894e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6c4262f4e05f00db3656f3db36357e6d2f4f051a9abacb921023bd2397f4894e", kill_on_drop: false }`
[INFO] [stdout] 6c4262f4e05f00db3656f3db36357e6d2f4f051a9abacb921023bd2397f4894e
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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" "+b8e88e5ddf5521a9f43ee3f62a702388c713e4bb" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 6e8698bd99804a17a87dc7bd4681c1283aa6546fd2b2d56e3db6d65c24edeb86
[INFO] running `Command { std: "docker" "start" "-a" "6e8698bd99804a17a87dc7bd4681c1283aa6546fd2b2d56e3db6d65c24edeb86", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling libc v0.2.184
[INFO] [stderr]    Compiling unicode-segmentation v1.13.2
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling lru v0.16.3
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling num-conv v0.2.1
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling nix v0.31.2
[INFO] [stderr]    Compiling line-clipping v0.3.7
[INFO] [stderr]    Compiling compact_str v0.9.0
[INFO] [stderr]    Compiling time-macros v0.2.27
[INFO] [stderr]    Compiling pid-ctl-core v0.1.0 (/opt/rustwide/workdir/crates/pid-ctl-core)
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling fs2 v0.4.3
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling ctrlc v3.5.2
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling clap_derive v4.6.0
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling clap v4.6.0
[INFO] [stderr]    Compiling strum v0.27.2
[INFO] [stderr]    Compiling ratatui-core v0.1.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling ratatui-widgets v0.3.0
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.0
[INFO] [stderr]    Compiling pid-ctl-sim v0.1.0 (/opt/rustwide/workdir/crates/pid-ctl-sim)
[INFO] [stderr]    Compiling ratatui-macros v0.7.0
[INFO] [stderr]    Compiling ratatui v0.30.0
[INFO] [stderr]    Compiling pid-ctl v0.1.0 (/opt/rustwide/workdir/crates/pid-ctl)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 26.92s
[INFO] running `Command { std: "docker" "inspect" "6e8698bd99804a17a87dc7bd4681c1283aa6546fd2b2d56e3db6d65c24edeb86", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6e8698bd99804a17a87dc7bd4681c1283aa6546fd2b2d56e3db6d65c24edeb86", kill_on_drop: false }`
[INFO] [stdout] 6e8698bd99804a17a87dc7bd4681c1283aa6546fd2b2d56e3db6d65c24edeb86
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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" "+b8e88e5ddf5521a9f43ee3f62a702388c713e4bb" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] cb556bc86fc4982bfa7ca3792851c557b9af583ed9e95f8786c4b1890b49a5a0
[INFO] running `Command { std: "docker" "start" "-a" "cb556bc86fc4982bfa7ca3792851c557b9af583ed9e95f8786c4b1890b49a5a0", kill_on_drop: false }`
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling predicates-core v1.0.10
[INFO] [stderr]    Compiling float-cmp v0.10.0
[INFO] [stderr]    Compiling difflib v0.4.0
[INFO] [stderr]    Compiling normalize-line-endings v0.3.0
[INFO] [stderr]    Compiling assert_cmd v2.2.0
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling cfg_aliases v0.1.1
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling serial2 v0.2.35
[INFO] [stderr]    Compiling diff v0.1.13
[INFO] [stderr]    Compiling shell-words v1.1.1
[INFO] [stderr]    Compiling nix v0.28.0
[INFO] [stderr]    Compiling predicates-tree v1.0.13
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling quick-error v1.2.3
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling pretty_assertions v1.4.1
[INFO] [stderr]    Compiling unarray v0.1.4
[INFO] [stderr]    Compiling rand_xorshift v0.4.0
[INFO] [stderr]    Compiling rand v0.9.3
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling filedescriptor v0.8.3
[INFO] [stderr]    Compiling portable-pty v0.9.0
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling rusty-fork v0.3.1
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling predicates v3.1.4
[INFO] [stderr]    Compiling proptest v1.11.0
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.0
[INFO] [stderr]    Compiling ratatui v0.30.0
[INFO] [stderr]    Compiling pid-ctl v0.1.0 (/opt/rustwide/workdir/crates/pid-ctl)
[INFO] [stderr]    Compiling pid-ctl-sim v0.1.0 (/opt/rustwide/workdir/crates/pid-ctl-sim)
[INFO] [stderr]    Compiling pid-ctl-core v0.1.0 (/opt/rustwide/workdir/crates/pid-ctl-core)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 19.51s
[INFO] running `Command { std: "docker" "inspect" "cb556bc86fc4982bfa7ca3792851c557b9af583ed9e95f8786c4b1890b49a5a0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "cb556bc86fc4982bfa7ca3792851c557b9af583ed9e95f8786c4b1890b49a5a0", kill_on_drop: false }`
[INFO] [stdout] cb556bc86fc4982bfa7ca3792851c557b9af583ed9e95f8786c4b1890b49a5a0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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" "+b8e88e5ddf5521a9f43ee3f62a702388c713e4bb" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 8727cc57df81b7fae9fbf1cdb519cad83c4f88836ce792c2c1656d269a44e474
[INFO] running `Command { std: "docker" "start" "-a" "8727cc57df81b7fae9fbf1cdb519cad83c4f88836ce792c2c1656d269a44e474", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.30s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/pid_ctl-8484336f24b1773e)
[INFO] [stdout] 
[INFO] [stdout] running 49 tests
[INFO] [stdout] test app::snapshot_persister::tests::fail_count_starts_at_zero ... ok
[INFO] [stdout] test app::snapshot_persister::tests::fail_escalated_after_threshold ... ok
[INFO] [stdout] test app::snapshot_persister::tests::fail_escalated_false_when_no_failures ... ok
[INFO] [stdout] test app::snapshot_persister::tests::fail_escalated_false_when_fail_after_zero ... ok
[INFO] [stdout] test app::snapshot_persister::tests::force_flush_no_store_returns_none ... ok
[INFO] [stdout] test app::tests::no_d_term_skip_on_normal_tick ... ok
[INFO] [stdout] test app::tests::post_dt_skip_reason_surfaces_in_tick_outcome ... ok
[INFO] [stdout] test app::ticker::tests::happy_path_notifies_observer ... ok
[INFO] [stdout] test app::tests::post_dt_skip_zeros_d_on_next_tick ... ok
[INFO] [stdout] test autotune::tests::config_validate_accepts_valid ... ok
[INFO] [stdout] test autotune::tests::config_validate_rejects_bias_above_out_max ... ok
[INFO] [stdout] test autotune::tests::config_validate_rejects_negative_amp ... ok
[INFO] [stdout] test autotune::tests::engine_emits_relay_flip_on_pv_crossing ... ok
[INFO] [stdout] test autotune::tests::engine_settled_after_three_cycles_on_first_order_plant ... ok
[INFO] [stdout] test autotune::tests::tuning_rule_pi_zero_derivative ... ok
[INFO] [stdout] test app::ticker::tests::cv_fail_count_resets_on_success ... ok
[INFO] [stdout] test app::snapshot_persister::tests::persist_no_store_is_ok ... ok
[INFO] [stdout] test autotune::tests::tuning_rule_pid_gains_positive ... ok
[INFO] [stdout] test autotune::tests::tuning_rule_tl_more_conservative_than_zn ... ok
[INFO] [stdout] test app::snapshot_persister::tests::has_store_false_when_no_store ... ok
[INFO] [stdout] test app::ticker::tests::d_term_skip_surfaces_in_observer ... ok
[INFO] [stdout] test autotune::tests::ku_formula_matches_manual_calc ... ok
[INFO] [stdout] test schedule::tests::large_slip_skips_missed_boundaries_without_burst ... ok
[INFO] [stdout] test schedule::tests::on_time_next_is_tick_plus_interval ... ok
[INFO] [stdout] test schedule::tests::overrun_does_not_anchor_to_now ... ok
[INFO] [stdout] test json_events::tests::socket_ready_event_fields ... ok
[INFO] [stdout] test json_events::tests::pv_read_failure_safe_cv_skipped_when_none ... ok
[INFO] [stdout] test autotune::tests::config_validate_rejects_relay_high_exceeds_out_max ... ok
[INFO] [stdout] test json_events::tests::integral_reset_event_fields ... ok
[INFO] [stdout] test json_events::tests::suppressed_logger_still_appends_to_log ... ok
[INFO] [stdout] test json_events::tests::macro_generated_events_have_correct_envelope ... ok
[INFO] [stdout] test autotune::tests::config_validate_rejects_zero_amp ... ok
[INFO] [stdout] test app::snapshot_persister::tests::persist_coalesces_within_flush_interval ... ok
[INFO] [stdout] test socket::tests::test_drop_removes_file ... ok
[INFO] [stdout] test socket::tests::test_request_deserialization ... ok
[INFO] [stdout] test socket::tests::test_probe_active ... ok
[INFO] [stdout] test socket::tests::test_probe_no_file ... ok
[INFO] [stdout] test socket::tests::test_client_request_roundtrip ... ok
[INFO] [stdout] test socket::tests::test_response_serialization ... ok
[INFO] [stdout] test socket::tests::test_oversized_request ... ok
[INFO] [stdout] test app::snapshot_persister::tests::persist_no_interval_always_writes ... ok
[INFO] [stdout] test socket::tests::test_probe_stale ... ok
[INFO] [stdout] test app::snapshot_persister::tests::force_flush_success_resets_fail_count ... ok
[INFO] [stdout] test socket::tests::test_bind_and_service_roundtrip ... ok
[INFO] [stdout] test app::snapshot_persister::tests::persist_writes_on_first_call ... ok
[INFO] [stdout] test app::snapshot_persister::tests::fail_count_resets_after_success ... ok
[INFO] [stdout] test app::snapshot_persister::tests::force_flush_ignores_coalescing ... ok
[INFO] [stdout] test app::ticker::tests::cv_fail_exhausted_at_threshold ... ok
[INFO] [stdout] test app::ticker::tests::cv_fail_transient_increments_counter ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 49 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/pid_ctl-659ef205792acb04)
[INFO] [stdout] 
[INFO] [stdout] running 43 tests
[INFO] [stdout] test tune::tests::annotation_caret_skips_off_screen_markers ... ok
[INFO] [stdout] test tune::tests::export_dedupes_tunables_and_strips_tune_flags ... ok
[INFO] [stdout] test tune::tests::gain_annotation_display_text_shows_net_change ... ok
[INFO] [stdout] test tune::tests::annotation_caret_aligns_with_marker_column ... ok
[INFO] [stdout] test tune::tests::annotation_caret_newer_overwrites_older ... ok
[INFO] [stdout] test tune::tests::history_cap_uses_spark_w_when_wider_than_tune_history ... ok
[INFO] [stdout] test tune::tests::history_trend_empty_is_stable ... ok
[INFO] [stdout] test tune::tests::history_range_returns_expanded_scale ... ok
[INFO] [stdout] test tune::tests::history_trend_falling ... ok
[INFO] [stdout] test tune::tests::history_trend_stable ... ok
[INFO] [stdout] test tune::tests::needed_decimals_integers_need_zero ... ok
[INFO] [stdout] test tune::tests::needed_decimals_step_values ... ok
[INFO] [stdout] test tune::tests::pv_canvas_coords_truncate_to_window ... ok
[INFO] [stdout] test tune::tests::scale_ruler_debug_render ... ignored, manual debug render; run with --ignored --nocapture
[INFO] [stdout] test tune::tests::scale_ruler_cadence_every_other_row ... ok
[INFO] [stdout] test tune::tests::scale_ruler_cadence_every_row ... ok
[INFO] [stdout] test tune::tests::pv_canvas_coords_oldest_left_newest_right ... ok
[INFO] [stdout] test tune::tests::scale_ruler_cadence_every_4th_row ... ok
[INFO] [stdout] test tune::tests::scale_ticks_multiples_of_step_are_brackets ... ok
[INFO] [stdout] test tune::tests::pv_trend_arrow_when_history_rises ... ok
[INFO] [stdout] test tune::tests::spark_data_flat_series_is_visible_mid_line ... ok
[INFO] [stdout] test tune::tests::scale_ticks_k_modulo_classification_correct ... ok
[INFO] [stdout] test tune::tests::spark_data_spanning_series_normalized ... ok
[INFO] [stdout] test tune::tests::spark_marker_row_pipe_overwrites_dot ... ok
[INFO] [stdout] test tune::tests::spark_marker_row_places_pipe_at_tick_column ... ok
[INFO] [stdout] test tune::tests::spark_marker_row_time_dots_at_multiples_of_10 ... ok
[INFO] [stdout] test tune::tests::sparkline_constraints_use_fill ... ok
[INFO] [stdout] test tune::tests::scale_ruler_no_row_collisions_when_ticks_are_sparse ... ok
[INFO] [stdout] test tune::tests::scale_ticks_base_steps_are_consistent_at_fractional_values ... ok
[INFO] [stdout] test tune::tests::scale_ticks_empty_on_zero_span ... ok
[INFO] [stdout] test tune::tests::step_125_up_sequence ... ok
[INFO] [stdout] test tune::tests::step_125_down_sequence ... ok
[INFO] [stdout] test tune::tests::gains_always_visible_at_minimum_height ... ok
[INFO] [stdout] test tune::tests::sparklines_collapse_at_small_height ... ok
[INFO] [stdout] test tune::tests::process_info_visible_at_standard_height ... ok
[INFO] [stdout] test tune::tests::sparklines_visible_at_comfortable_height ... ok
[INFO] [stdout] test tune::tests::scale_ruler_cadence_every_other_row_perturbed ... ok
[INFO] [stdout] test tune::tests::wide_terminal_renders_without_panic ... ok
[INFO] [stdout] test tune::tests::scale_ruler_cadence_every_row_perturbed ... ok
[INFO] [stdout] test tune::tests::scale_ruler_interior_ticks_always_rendered ... ok
[INFO] [stdout] test tune::tests::expand_scale_leaves_wide_range_unchanged ... ok
[INFO] [stdout] test tune::tests::expand_scale_widens_tiny_range ... ok
[INFO] [stdout] test tune::tests::scale_ruler_cadence_every_4th_row_perturbed ... ok
[INFO] [stderr]      Running tests/requirements.rs (/opt/rustwide/target/debug/deps/requirements-0546055c3d0f5512)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 42 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.13s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 172 tests
[INFO] [stdout] test harness_smoke ... ok
[INFO] [stdout] test req_autotune::autotune_rejects_relay_low_below_out_min ... ok
[INFO] [stdout] test req_cv_sink::multiple_cv_sinks_rejected ... ok
[INFO] [stdout] test req_cv_sink::once_cv_cmd_failure_exits_5 ... ok
[INFO] [stdout] test req_cv_sink::once_cv_cmd_url_substitution ... ok
[INFO] [stdout] test req_dry_run::once_dry_run_does_not_require_cv_sink ... ok
[INFO] [stdout] test req_cv_write_policy::once_exits_5_on_cv_write_failure ... ok
[INFO] [stdout] test req_dry_run::once_dry_run_does_not_write_cv_file ... ok
[INFO] [stdout] test req_cv_sink::pipe_rejects_cv_cmd ... ok
[INFO] [stdout] test req_dry_run::pipe_dry_run_rejected ... ok
[INFO] [stdout] test req_dry_run::once_dry_run_emits_json_with_computed_cv ... ok
[INFO] [stdout] test req_dry_run::once_dry_run_saves_state ... ok
[INFO] [stdout] test req_autotune::autotune_rejects_bias_above_out_max ... ok
[INFO] [stdout] test req_autotune::autotune_rejects_relay_high_exceeds_out_max ... ok
[INFO] [stdout] test req_autotune::autotune_rejects_zero_amp ... ok
[INFO] [stdout] test req_autotune::autotune_rejects_negative_amp ... ok
[INFO] [stdout] test req_autotune::autotune_rejects_duration_too_short ... ok
[INFO] [stdout] test req_cv_sink::once_cv_cmd_failure_includes_stderr_hint ... ok
[INFO] [stdout] test req_feedforward::once_ff_field_in_json_when_nonzero ... ok
[INFO] [stdout] test req_cv_sink::once_cv_cmd_substitutes_cv ... ok
[INFO] [stdout] test req_fail_after::fail_after_emits_pv_fail_after_reached_json_event ... ok
[INFO] [stdout] test req_feedforward::once_multiple_ff_sources_is_error ... ok
[INFO] [stdout] test req_flag_precedence::cli_flags_override_state_file_values ... ok
[INFO] [stdout] test req_flag_precedence::setpoint_required_when_absent_from_cli_and_state ... ok
[INFO] [stdout] test req_cv_sink::once_cv_cmd_respects_precision ... ok
[INFO] [stdout] test req_feedforward::loop_ff_value_is_rejected ... ok
[INFO] [stdout] test req_flag_validation::anti_windup_back_calc_accepted ... ok
[INFO] [stdout] test req_feedforward::once_ff_from_file_contributes_correctly ... ok
[INFO] [stdout] test req_feedforward::once_ff_field_absent_in_json_when_zero ... ok
[INFO] [stdout] test req_flag_precedence::state_file_gains_used_when_cli_flags_omitted ... ok
[INFO] [stdout] test req_feedforward::once_ff_value_and_gain_adds_to_cv ... ok
[INFO] [stdout] test req_flag_validation::anti_windup_invalid_value_rejected ... ok
[INFO] [stdout] test req_fail_after::fail_after_invalid_value_exits_3 ... ok
[INFO] [stdout] test req_fail_after::fail_after_writes_safe_cv_before_exit ... ok
[INFO] [stdout] test req_fail_after::fail_after_exits_2_after_n_consecutive_pv_failures ... ok
[INFO] [stdout] test req_flag_validation::duplicate_pv_flags_rejected ... ok
[INFO] [stdout] test req_flag_validation::anti_windup_clamp_accepted ... ok
[INFO] [stdout] test req_flag_validation::anti_windup_none_accepted ... ok
[INFO] [stdout] test req_flag_validation::pipe_rejects_dry_run ... ok
[INFO] [stdout] test req_flag_validation::ramp_rate_accepted_as_slew_rate_alias ... ok
[INFO] [stdout] test req_locking::lock_acquired_when_state_configured ... ok
[INFO] [stdout] test req_flag_validation::scale_multiplies_raw_pv_before_pid ... ok
[INFO] [stdout] test req_flag_validation::multiple_cv_sinks_rejected ... ok
[INFO] [stdout] test req_cv_sink::cv_cmd_sink_timeout_via_adapter ... ok
[INFO] [stdout] test req_flag_validation::cv_precision_controls_output_decimal_places ... ok
[INFO] [stdout] test req_flag_validation::anti_windup_tt_accepted ... ok
[INFO] [stdout] test req_flag_validation::pipe_rejects_pv_literal_flag ... ok
[INFO] [stdout] test req_loop::loop_log_appends_ndjson ... ignored, timing-sensitive: kill after N ms may not produce stable log line count
[INFO] [stdout] test req_flag_validation::pipe_rejects_cv_file ... ok
[INFO] [stdout] test req_loop::loop_requires_pv_source ... ok
[INFO] [stdout] test req_loop::loop_rejects_literal_pv ... ok
[INFO] [stdout] test req_loop::loop_requires_cv_sink ... ok
[INFO] [stdout] test req_once_pipe::once_format_json_with_cv_file ... ok
[INFO] [stdout] test req_once_pipe::once_basic_pv_computation ... ok
[INFO] [stdout] test req_once_pipe::once_state_persistence ... ok
[INFO] [stdout] test req_once_pipe::once_name_appears_in_json_output ... ok
[INFO] [stdout] test req_once_pipe::pipe_log_writes_iteration_records ... ok
[INFO] [stdout] test req_once_pipe::pipe_blank_lines_skipped ... ok
[INFO] [stdout] test req_loop::loop_requires_interval ... ok
[INFO] [stdout] test req_once_pipe::pipe_with_scale ... ok
[INFO] [stdout] test req_pv_source::multiple_pv_sources_rejected ... ok
[INFO] [stdout] test req_once_pipe::pipe_basic_stream ... ok
[INFO] [stdout] test req_pv_source::once_pv_cmd_reads_value ... ok
[INFO] [stdout] test req_pv_source::once_pv_file_missing_exits_1 ... ok
[INFO] [stdout] test req_pv_source::once_pv_file_reads_value ... ok
[INFO] [stdout] test req_pv_source::once_pv_file_trims_whitespace ... ok
[INFO] [stdout] test req_pv_source::pipe_rejects_pv_file ... ok
[INFO] [stdout] test req_fail_after::fail_after_counter_resets_on_success ... ok
[INFO] [stdout] test req_pv_source::pv_cmd_timeout_independent_of_cv_cmd_timeout ... ok
[INFO] [stdout] test req_pv_source::pv_cmd_timeout_invalid_value_exits_3 ... ok
[INFO] [stdout] test req_loop::loop_basic_iterations ... ok
[INFO] [stdout] test req_pv_stdin_verify_cv::file_cv_sink_no_verify_writes_successfully ... ok
[INFO] [stdout] test req_pv_stdin_verify_cv::file_cv_sink_verify_mismatch_returns_invalid_data ... ok
[INFO] [stdout] test req_pv_stdin_verify_cv::file_cv_sink_verify_returns_error_on_missing_file_after_write ... ok
[INFO] [stdout] test req_pv_source::pv_file_with_scale ... ok
[INFO] [stdout] test req_pv_stdin_verify_cv::file_cv_sink_verify_succeeds_on_correct_readback ... ok
[INFO] [stdout] test req_pv_stdin_verify_cv::loop_pv_stdin_timeout_without_pv_stdin_still_requires_pv_source ... ok
[INFO] [stdout] test req_loop::loop_cv_fail_after_exits_2 ... ok
[INFO] [stdout] test req_fail_after::without_fail_after_pv_failures_do_not_exit ... ok
[INFO] [stdout] test req_pv_stdin_verify_cv::stdin_pv_source_returns_error_when_no_data_available ... ok
[INFO] [stdout] test req_pv_stdin_verify_cv::once_rejects_pv_stdin ... ok
[INFO] [stdout] test req_pv_stdin_verify_cv::pipe_rejects_pv_stdin ... ok
[INFO] [stdout] test req_reliability::d_term_skipped_no_pv_prev_emitted_to_log_on_first_tick ... ok
[INFO] [stdout] test req_loop::loop_accepts_safe_cv_flag ... ok
[INFO] [stdout] test req_loop::loop_accepts_log_flag ... ok
[INFO] [stdout] test req_reliability::once_cv_write_failure_emits_cv_write_failed_json_event ... ok
[INFO] [stdout] test req_loop::loop_quiet_flag_accepted ... ok
[INFO] [stdout] test req_replay::replay_diff_mode_prints_json_summary ... ok
[INFO] [stdout] test req_replay::replay_diff_mode_zero_diff_for_same_gains ... ok
[INFO] [stdout] test req_replay::replay_empty_log_exits_ok ... ok
[INFO] [stdout] test req_cv_sink::once_cv_cmd_timeout_enforced ... ok
[INFO] [stdout] test req_replay::replay_output_log_writes_to_file ... ok
[INFO] [stdout] test req_replay::replay_output_has_required_fields ... ok
[INFO] [stdout] test req_replay::replay_rejects_diff_with_output_log ... ok
[INFO] [stdout] test req_replay::replay_rejects_iteration_record_missing_dt ... ok
[INFO] [stdout] test req_replay::replay_rejects_iteration_record_missing_pv ... ok
[INFO] [stdout] test req_replay::replay_rejects_malformed_json_in_log ... ok
[INFO] [stdout] test req_replay::replay_rejects_missing_kp ... ok
[INFO] [stdout] test req_replay::replay_rejects_nonexistent_log ... ok
[INFO] [stdout] test req_reliability::cv_write_failure_policy_matches_mode_once_loop_pipe ... ok
[INFO] [stdout] test req_pv_source::pv_cmd_read_respects_cmd_timeout ... ok
[INFO] [stdout] test req_replay::replay_skips_event_lines ... ok
[INFO] [stdout] test req_replay::replay_rejects_missing_log ... ok
[INFO] [stdout] test req_pv_source::once_pv_cmd_uses_cmd_timeout_when_pv_cmd_timeout_absent ... ok
[INFO] [stdout] test req_pv_source::once_pv_cmd_timeout_overrides_cmd_timeout ... ok
[INFO] [stdout] test req_pv_source::loop_pv_cmd_timeout_flag_accepted ... ok
[INFO] [stdout] test req_pv_stdin_verify_cv::loop_verify_cv_succeeds_with_regular_file ... ok
[INFO] [stdout] test req_socket::test_cli_set_missing_flags ... ok
[INFO] [stdout] test req_socket::test_socket_already_running ... ok
[INFO] [stdout] test req_socket::test_cli_save_no_state ... ok
[INFO] [stdout] test req_socket::test_socket_mode_permissions ... ok
[INFO] [stdout] test req_reliability::loop_dt_skip_updates_state_timestamp_without_advancing_iter ... ok
[INFO] [stdout] test req_socket::test_cli_set_kp ... ok
[INFO] [stdout] test req_socket::test_cli_hold_and_resume ... ok
[INFO] [stdout] test req_socket::test_socket_ready_event_emitted_on_stderr ... ok
[INFO] [stdout] test req_reliability::loop_pv_failure_safe_cv_updates_last_cv_in_state ... ok
[INFO] [stdout] test req_socket::test_socket_save_without_state_returns_error ... ok
[INFO] [stdout] test req_socket::test_socket_save ... ok
[INFO] [stdout] test req_socket::test_cli_reset ... ok
[INFO] [stdout] test req_socket::test_socket_unknown_command ... ok
[INFO] [stdout] test req_socket::test_socket_hold_resume ... ok
[INFO] [stdout] test req_socket::test_socket_save_with_state_returns_ok ... ok
[INFO] [stdout] test req_flag_validation::verbose_flag_accepted ... ok
[INFO] [stdout] test req_state_commands::init_creates_fresh_state ... ok
[INFO] [stdout] test req_state_commands::init_requires_state_flag ... ok
[INFO] [stdout] test req_state_commands::purge_clears_runtime_preserves_config ... ok
[INFO] [stdout] test req_socket::test_socket_stale_cleanup ... ok
[INFO] [stdout] test req_state_commands::purge_requires_state_flag ... ok
[INFO] [stdout] test req_state_commands::purge_fails_when_locked ... ok
[INFO] [stdout] test req_state_commands::status_requires_state_flag ... ok
[INFO] [stdout] test req_state_schema::first_run_populates_created_at_and_updated_at ... ok
[INFO] [stdout] test req_state_schema::output_limits_round_trip_when_present ... ok
[INFO] [stdout] test req_state_schema::state_snapshot_includes_schema_version ... ok
[INFO] [stdout] test req_state_schema::subsequent_run_preserves_created_at_and_advances_updated_at ... ok
[INFO] [stdout] test req_state_schema::unknown_fields_ignored_on_load ... ok
[INFO] [stdout] test req_socket::test_socket_set_kp ... ok
[INFO] [stdout] test req_state_write_interval::pipe_state_write_interval_default_is_1s ... ok
[INFO] [stdout] test req_state_write_interval::state_fail_after_escalates_to_prominent_warning ... ok
[INFO] [stdout] test req_state_write_interval::state_fail_after_flag_accepted ... ok
[INFO] [stdout] test req_socket::test_socket_status ... ok
[INFO] [stdout] test req_state_commands::status_prints_state_json ... ok
[INFO] [stdout] test req_socket::test_socket_set_sp ... ok
[INFO] [stdout] test req_socket::test_socket_reset ... ok
[INFO] [stdout] test req_state_write_interval::state_write_interval_flag_accepted ... ok
[INFO] [stdout] test req_socket::test_socket_unknown_param ... ok
[INFO] [stdout] test req_stdout_contract::cv_stdout_rejects_format_json ... ok
[INFO] [stdout] test req_stdout_contract::pipe_rejects_format_json ... ok
[INFO] [stdout] test req_stdout_contract::loop_cv_stdout_rejects_format_json ... ok
[INFO] [stdout] test req_tune::tune_history_flag_parses ... ok
[INFO] [stdout] test req_replay::replay_roundtrip_same_gains_matches_original ... ok
[INFO] [stdout] test req_replay::replay_different_gains_produces_different_cv ... ok
[INFO] [stdout] test req_tune::tune_rejects_format_json ... ok
[INFO] [stdout] test req_tune::tune_rejects_pv_stdin ... ok
[INFO] [stdout] test req_tune::tune_rejects_quiet ... ok
[INFO] [stdout] test req_socket::test_status_via_socket ... ok
[INFO] [stdout] test req_tune::tune_rejected_on_pipe_with_plan_message ... ok
[INFO] [stdout] test req_tune::tune_rejected_on_once_with_plan_message ... ok
[INFO] [stdout] test req_state_write_interval::force_flush_at_shutdown_writes_final_state ... ok
[INFO] [stdout] test req_socket::test_status_socket_fallback ... ok
[INFO] [stdout] test req_state_write_interval::state_write_interval_coalesces_disk_writes ... ok
[INFO] [stdout] test req_state_write_interval::state_write_failures_are_never_fatal ... ok
[INFO] [stdout] test req_tune_pty::loop_tune_pty_quit_prints_export_and_exits_zero ... ok
[INFO] [stdout] test req_state_write_interval::state_write_interval_loop_default_is_max_interval_100ms ... ok
[INFO] [stdout] test req_tune_pty::loop_tune_pty_sigint_prints_export_and_exits_zero ... ok
[INFO] [stdout] test req_tune_pty::loop_tune_pty_standard_terminal_shows_all_sections ... ok
[INFO] [stdout] test req_tune_pty::loop_tune_pty_tiny_terminal_shows_gains_not_history ... ok
[INFO] [stdout] test req_tune_pty::loop_tune_pty_wide_terminal_renders_ok ... ok
[INFO] [stdout] test req_sim_loop::loop_pid_ctl_sim_smoke_no_crash ... ok
[INFO] [stdout] test req_autotune::autotune_writes_state_with_suggested_gains ... ok
[INFO] [stdout] test req_autotune::autotune_emits_relay_flip_events ... ok
[INFO] [stdout] test req_autotune::autotune_e2e_first_order_produces_valid_ku_tu ... ok
[INFO] [stdout] test req_reliability::pv_read_failure_invokes_safe_cv_or_hold_last_per_plan ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/pid_ctl_core-286ab42279c704a6)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 171 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 6.52s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/requirements.rs (/opt/rustwide/target/debug/deps/requirements-e3de3273e84f8110)
[INFO] [stdout] 
[INFO] [stdout] running 85 tests
[INFO] [stdout] test harness_smoke ... ok
[INFO] [stdout] test req_anti_windup::anti_windup_inactive_when_ki_zero ... ok
[INFO] [stdout] test req_anti_windup::anti_windup_strategy_none_allows_unconstrained_integral_accumulation ... ok
[INFO] [stdout] test req_anti_windup::anti_windup_strategy_clamp_behaves_differently_from_back_calc ... ok
[INFO] [stdout] test req_anti_windup::auto_tt_clamped_to_dt_and_upper_bound ... ok
[INFO] [stdout] test req_anti_windup::back_calculation_uses_prev_applied_cv_from_step_input ... ok
[INFO] [stdout] test req_anti_windup::default_back_calculation_reduces_integral_windup_when_saturated ... ok
[INFO] [stdout] test req_anti_windup::tt_when_kd_positive_is_sqrt_kd_over_ki ... ok
[INFO] [stdout] test req_anti_windup::integral_contribution_not_promised_to_match_raw_i_acc_units ... ok
[INFO] [stdout] test req_anti_windup::tt_when_kd_zero_is_kp_over_ki ... ok
[INFO] [stdout] test req_anti_windup::manual_anti_windup_tt_override_bypasses_auto_tt_clamp ... ok
[INFO] [stdout] test req_config_validation::rejects_negative_deadband ... ok
[INFO] [stdout] test req_config_validation::accepts_default_infinite_limits ... ok
[INFO] [stdout] test req_config_validation::rejects_negative_slew_rate ... ok
[INFO] [stdout] test req_config_validation::rejects_out_min_greater_than_out_max ... ok
[INFO] [stdout] test req_config_validation::rejects_pv_filter_alpha_at_or_above_one ... ok
[INFO] [stdout] test req_config_validation::rejects_pv_filter_alpha_below_zero ... ok
[INFO] [stdout] test req_controller_form::integral_path_uses_i_acc_and_error_dt ... ok
[INFO] [stdout] test req_controller_form::p_term_matches_kp_times_error ... ok
[INFO] [stdout] test req_controller_form::step_result_exposes_term_diagnostics_matching_definitions ... ok
[INFO] [stdout] test req_controller_form::v1_is_position_form_absolute_cv_per_tick ... ok
[INFO] [stdout] test req_core_step::one_step_integrates_filter_pid_clamp_slew_and_windup ... ok
[INFO] [stdout] test req_d_on_measurement::after_live_integrator_reset_d_term_zeroed_and_pv_seeded ... ok
[INFO] [stdout] test req_d_on_measurement::after_simulated_dt_gap_d_term_zeroes_and_pv_seeds_like_post_dt_skip ... ok
[INFO] [stdout] test req_d_on_measurement::derivative_uses_pv_rate_not_error_rate ... ok
[INFO] [stdout] test req_config_validation::rejects_negative_setpoint_ramp_rate ... ok
[INFO] [stdout] test req_d_on_measurement::first_tick_or_no_prior_pv_zeroes_d_and_seeds_last_pv ... ok
[INFO] [stdout] test req_controller_form::d_term_matches_negative_kd_times_pv_rate ... ok
[INFO] [stdout] test req_d_on_measurement::diagnostic_or_flag_reflects_d_term_skipped_reason_when_applicable ... ok
[INFO] [stdout] test req_d_on_measurement::p_and_i_still_compute_normally_when_d_is_zeroed ... ok
[INFO] [stdout] test req_d_on_measurement::setpoint_step_without_pv_step_does_not_spike_d_via_error ... ok
[INFO] [stdout] test req_deadband::d_term_remains_measurement_based_under_deadband ... ok
[INFO] [stdout] test req_d_on_measurement::kd_zero_always_yields_zero_d_term ... ok
[INFO] [stdout] test req_deadband::integral_does_not_accumulate_when_effective_error_is_zero_due_to_deadband ... ok
[INFO] [stdout] test req_error_convention::error_is_setpoint_minus_pv_when_no_ramp ... ok
[INFO] [stdout] test req_error_convention::negative_error_implies_pv_above_target ... ok
[INFO] [stdout] test req_error_convention::positive_error_implies_pv_below_target ... ok
[INFO] [stdout] test req_error_convention::error_uses_effective_sp_when_setpoint_ramp_active ... ok
[INFO] [stdout] test req_deadband::when_error_within_deadband_p_and_i_use_zero_effective_error ... ok
[INFO] [stdout] test req_deadband::small_error_suppresses_p_i_actuation_without_stale_state_hazards ... ok
[INFO] [stdout] test req_feedforward::ff_alone_exceeds_out_max_anti_windup_clamp_prevents_integral_runaway ... ok
[INFO] [stdout] test req_deadband::deadband_applies_to_error_from_effective_sp ... ok
[INFO] [stdout] test req_dt::fixed_dt_override_semantics_match_scalar_input ... ok
[INFO] [stdout] test req_feedforward::ff_adds_to_pid_output ... ok
[INFO] [stdout] test req_feedforward::ff_respects_output_limits ... ok
[INFO] [stdout] test req_feedforward::ff_term_equals_gain_times_raw_value ... ok
[INFO] [stdout] test req_filter::alpha_zero_is_no_filtering ... ok
[INFO] [stdout] test req_filter::ema_matches_plan_recurrence ... ok
[INFO] [stdout] test req_filter::filtered_pv_used_for_pid_and_recorded_for_next_tick ... ok
[INFO] [stdout] test req_dt::tests_can_run_arbitrary_many_steps_without_sleep ... ok
[INFO] [stdout] test req_dt::step_uses_explicit_dt_for_all_per_second_scaling ... ok
[INFO] [stdout] test req_feedforward::ff_zero_gain_has_no_effect ... ok
[INFO] [stdout] test req_gains_runtime::ki_set_to_zero_freezes_i_acc_at_current_value ... ok
[INFO] [stdout] test req_filter::first_tick_without_prior_last_pv_seeds_filter ... ok
[INFO] [stdout] test req_gains_runtime::two_independent_controllers_do_not_share_state ... ok
[INFO] [stdout] test req_known_answer_vectors::hand_worked_deadband_ramp_and_filter_sequence_matches_exact_outputs ... ok
[INFO] [stdout] test req_gains_runtime::frozen_i_acc_only_cleared_by_explicit_reset_not_by_ki_zero ... ok
[INFO] [stdout] test req_known_answer_vectors::hand_worked_output_clamp_and_slew_sequence_matches_exact_outputs ... ok
[INFO] [stdout] test req_gains_runtime::gain_change_mid_run_affects_next_step_output ... ok
[INFO] [stdout] test req_feedforward::ff_integral_winds_down_when_ff_closes_the_gap ... ok
[INFO] [stdout] test req_known_answer_vectors::hand_worked_position_form_pid_sequence_matches_exact_outputs ... ok
[INFO] [stdout] test req_multi_step::d_term_uses_previous_ticks_pv_not_default ... ok
[INFO] [stdout] test req_multi_step::integral_accumulates_across_multiple_ticks ... ok
[INFO] [stdout] test req_multi_step::filter_state_carries_between_steps ... ok
[INFO] [stdout] test req_output_and_limits::final_cv_clamped_to_out_min_out_max ... ok
[INFO] [stdout] test req_multi_step::multi_tick_step_response_converges_toward_setpoint ... ok
[INFO] [stdout] test req_output_and_limits::slew_rate_limits_per_tick_change_using_dt ... ok
[INFO] [stdout] test req_output_and_limits::u_unclamped_pre_clamp_value_exposed_for_diagnostics ... ok
[INFO] [stdout] test req_setpoint_ramp::effective_sp_moves_toward_target_at_ramp_rate_times_dt ... ok
[INFO] [stdout] test req_output_and_limits::infinite_limits_mean_cv_equals_u_unclamped_and_not_saturated ... ok
[INFO] [stdout] test req_setpoint_ramp::first_tick_no_ramp_when_no_prior_state ... ok
[INFO] [stdout] test req_output_and_limits::saturated_true_when_u_unclamped_outside_limits ... ok
[INFO] [stdout] test req_setpoint_ramp::preloaded_effective_sp_resumes_ramp_from_that_value ... ok
[INFO] [stdout] test req_setpoint_ramp::step_result_includes_effective_sp_for_diagnostics_when_ramping ... ok
[INFO] [stdout] test req_setpoint_ramp::when_ramp_disabled_effective_equals_setpoint_field ... ok
[INFO] [stdout] test req_step_input_output::reset_integral_clears_accumulator_for_subsequent_steps ... ok
[INFO] [stdout] test req_output_and_limits::slew_applies_after_or_alongside_clamp_per_plan_order ... ok
[INFO] [stdout] test req_setpoint_ramp::mid_ramp_target_change_updates_target_but_effective_continues_from_current ... ok
[INFO] [stdout] test req_setpoint_ramp::when_effective_reaches_target_ramp_has_no_further_effect ... ok
[INFO] [stdout] test req_step_input_output::same_inputs_produce_same_outputs_deterministically ... ok
[INFO] [stdout] test req_step_input_output::set_gains_updates_behavior_without_global_singleton ... ok
[INFO] [stdout] test req_step_input_output::step_accepts_scaled_pv_dt_and_prev_applied_cv ... ok
[INFO] [stdout] test req_step_input_output::step_returns_cv_and_unclamped_and_terms_and_i_acc ... ok
[INFO] [stdout] test req_controller_form::u_unclamped_is_sum_of_p_i_d_contributions ... ok
[INFO] [stdout] test req_core_step::property_output_bounded_when_gains_and_limits_favor_bounded_cv ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 85 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/pid_ctl_sim-230dfa9bdfdca97c)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test plant::tests::first_order_converges_to_gain_times_cv ... ok
[INFO] [stdout] test plant::tests::thermal_heats_toward_setpoint_when_ambient_below ... ok
[INFO] [stdout] test state::tests::apply_cv_returns_sim_error_for_bad_dt ... ok
[INFO] [stdout] test plant::tests::fan_reaches_nonlinear_steady_state ... ok
[INFO] [stdout] test state::tests::sim_error_implements_std_error ... ok
[INFO] [stdout] test state::tests::serde_roundtrip_each_plant_kind ... ok
[INFO] [stdout] test state::tests::validate_returns_sim_error_validation_on_bad_params ... ok
[INFO] [stdout] test state::tests::validate_returns_sim_error_validation_on_wrong_schema_version ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/pid_ctl_sim-2b44f9dc24f4d9cb)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/cli.rs (/opt/rustwide/target/debug/deps/cli-750ded98ff255a48)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test rejects_bad_schema_version ... ok
[INFO] [stdout] test apply_cv_accepts_negative_value ... ok
[INFO] [stdout] test init_print_apply_roundtrip_first_order ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests pid_ctl
[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.01s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests pid_ctl_core
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests pid_ctl_sim
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "8727cc57df81b7fae9fbf1cdb519cad83c4f88836ce792c2c1656d269a44e474", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8727cc57df81b7fae9fbf1cdb519cad83c4f88836ce792c2c1656d269a44e474", kill_on_drop: false }`
[INFO] [stdout] 8727cc57df81b7fae9fbf1cdb519cad83c4f88836ce792c2c1656d269a44e474
