[INFO] fetching crate opencode-voice 0.1.4... [INFO] testing opencode-voice-0.1.4 against master#562dee4820c458d823175268e41601d4c060588a for pr-154210-2 [INFO] extracting crate opencode-voice 0.1.4 into /workspace/builds/worker-3-tc1/source [INFO] started tweaking crates.io crate opencode-voice 0.1.4 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate opencode-voice 0.1.4 [INFO] tweaked toml for crates.io crate opencode-voice 0.1.4 written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate opencode-voice 0.1.4 on toolchain 562dee4820c458d823175268e41601d4c060588a [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate opencode-voice 0.1.4 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" "+562dee4820c458d823175268e41601d4c060588a" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded tokio-macros v2.6.1 [INFO] [stderr] Downloaded core-graphics v0.19.2 [INFO] [stderr] Downloaded evdev v0.12.2 [INFO] [stderr] Downloaded home v0.5.12 [INFO] [stderr] Downloaded alsa-sys v0.3.1 [INFO] [stderr] Downloaded mach2 v0.4.3 [INFO] [stderr] Downloaded coreaudio-rs v0.11.3 [INFO] [stderr] Downloaded block v0.1.6 [INFO] [stderr] Downloaded cocoa v0.22.0 [INFO] [stderr] Downloaded windows-core v0.54.0 [INFO] [stderr] Downloaded core-graphics v0.21.0 [INFO] [stderr] Downloaded num_enum v0.7.5 [INFO] [stderr] Downloaded memoffset v0.6.5 [INFO] [stderr] Downloaded coreaudio-sys v0.2.17 [INFO] [stderr] Downloaded oboe-sys v0.6.1 [INFO] [stderr] Downloaded x11 v2.21.0 [INFO] [stderr] Downloaded ndk-context v0.1.1 [INFO] [stderr] Downloaded num_enum_derive v0.7.5 [INFO] [stderr] Downloaded rdev v0.5.3 [INFO] [stderr] Downloaded bindgen v0.69.5 [INFO] [stderr] Downloaded whisper-rs v0.13.2 [INFO] [stderr] Downloaded oboe v0.6.1 [INFO] [stderr] Downloaded tokio v1.50.0 [INFO] [stderr] Downloaded whisper-rs-sys v0.11.1 [INFO] [stderr] Downloaded ndk v0.8.0 [INFO] [stderr] Downloaded ndk-sys v0.5.0+25.2.9519653 [INFO] [stderr] Downloaded alsa v0.9.1 [INFO] [stderr] Downloaded nix v0.23.2 [INFO] [stderr] Downloaded cpal v0.15.3 [INFO] [stderr] Downloaded windows v0.54.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] e714ee88ad9af300dfa5ae57a5605a094fc0eeaf443ba147cbc88c7f69b37cf3 [INFO] running `Command { std: "docker" "start" "-a" "e714ee88ad9af300dfa5ae57a5605a094fc0eeaf443ba147cbc88c7f69b37cf3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "e714ee88ad9af300dfa5ae57a5605a094fc0eeaf443ba147cbc88c7f69b37cf3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e714ee88ad9af300dfa5ae57a5605a094fc0eeaf443ba147cbc88c7f69b37cf3", kill_on_drop: false }` [INFO] [stdout] e714ee88ad9af300dfa5ae57a5605a094fc0eeaf443ba147cbc88c7f69b37cf3 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 2f61589a02627c684a1bb5d8219d147075b20bd3ea344b1b73bb4c8fd6bee8c5 [INFO] running `Command { std: "docker" "start" "-a" "2f61589a02627c684a1bb5d8219d147075b20bd3ea344b1b73bb4c8fd6bee8c5", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.183 [INFO] [stderr] Compiling find-msvc-tools v0.1.9 [INFO] [stderr] Compiling itoa v1.0.17 [INFO] [stderr] Compiling linux-raw-sys v0.4.15 [INFO] [stderr] Compiling glob v0.3.3 [INFO] [stderr] Compiling lock_api v0.4.14 [INFO] [stderr] Compiling prettyplease v0.2.37 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling litemap v0.8.1 [INFO] [stderr] Compiling minimal-lexical v0.2.1 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling memchr v2.8.0 [INFO] [stderr] Compiling regex-syntax v0.8.10 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling writeable v0.6.2 [INFO] [stderr] Compiling http v1.4.0 [INFO] [stderr] Compiling libloading v0.8.9 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Compiling icu_properties_data v2.1.2 [INFO] [stderr] Compiling bindgen v0.69.5 [INFO] [stderr] Compiling home v0.5.12 [INFO] [stderr] Compiling icu_normalizer_data v2.1.1 [INFO] [stderr] Compiling itertools v0.12.1 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling rustc-hash v1.1.0 [INFO] [stderr] Compiling lazy_static v1.5.0 [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Compiling clang-sys v1.8.1 [INFO] [stderr] Compiling lazycell v1.3.0 [INFO] [stderr] Compiling fs_extra v1.3.0 [INFO] [stderr] Compiling native-tls v0.2.18 [INFO] [stderr] Compiling memoffset v0.6.5 [INFO] [stderr] Compiling alsa-sys v0.3.1 [INFO] [stderr] Compiling nom v7.1.3 [INFO] [stderr] Compiling radium v0.7.0 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling openssl-probe v0.2.1 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling anstyle-parse v0.2.7 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling sync_wrapper v1.0.2 [INFO] [stderr] Compiling anstyle v1.0.13 [INFO] [stderr] Compiling colorchoice v1.0.4 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling tap v1.0.1 [INFO] [stderr] Compiling http-body v1.0.1 [INFO] [stderr] Compiling portable-atomic v1.13.1 [INFO] [stderr] Compiling http-body-util v0.1.3 [INFO] [stderr] Compiling wyz v0.5.1 [INFO] [stderr] Compiling anstream v0.6.21 [INFO] [stderr] Compiling cmake v0.1.57 [INFO] [stderr] Compiling iri-string v0.7.10 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling funty v2.0.0 [INFO] [stderr] Compiling indexmap v2.13.0 [INFO] [stderr] Compiling clap_lex v1.0.0 [INFO] [stderr] Compiling zeroize v1.8.2 [INFO] [stderr] Compiling whisper-rs v0.13.2 [INFO] [stderr] Compiling cpal v0.15.3 [INFO] [stderr] Compiling bitvec v1.0.1 [INFO] [stderr] Compiling clap_builder v4.5.60 [INFO] [stderr] Compiling rustls-pki-types v1.14.0 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Compiling dasp_sample v0.11.0 [INFO] [stderr] Compiling openssl v0.10.75 [INFO] [stderr] Compiling hound v3.5.1 [INFO] [stderr] Compiling which v4.4.2 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling socket2 v0.6.3 [INFO] [stderr] Compiling cexpr v0.6.0 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling nix v0.23.2 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling dirs-sys v0.5.0 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling alsa v0.9.1 [INFO] [stderr] Compiling console v0.15.11 [INFO] [stderr] Compiling crossterm v0.28.1 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling uuid v1.22.0 [INFO] [stderr] Compiling dirs v6.0.0 [INFO] [stderr] Compiling indicatif v0.17.11 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling futures-macro v0.3.32 [INFO] [stderr] Compiling tokio-macros v2.6.1 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling tokio v1.50.0 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Compiling evdev v0.12.2 [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.60 [INFO] [stderr] Compiling icu_provider v2.1.1 [INFO] [stderr] Compiling icu_properties v2.1.2 [INFO] [stderr] Compiling icu_normalizer v2.1.1 [INFO] [stderr] Compiling serde_urlencoded v0.7.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 whisper-rs-sys v0.11.1 [INFO] [stderr] Compiling futures-executor v0.3.32 [INFO] [stderr] Compiling futures v0.3.32 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling tokio-native-tls v0.3.1 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling h2 v0.4.13 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling hyper-tls v0.6.0 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling opencode-voice v0.1.4 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 05s [INFO] running `Command { std: "docker" "inspect" "2f61589a02627c684a1bb5d8219d147075b20bd3ea344b1b73bb4c8fd6bee8c5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "2f61589a02627c684a1bb5d8219d147075b20bd3ea344b1b73bb4c8fd6bee8c5", kill_on_drop: false }` [INFO] [stdout] 2f61589a02627c684a1bb5d8219d147075b20bd3ea344b1b73bb4c8fd6bee8c5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e431b09158073e8258de16c2eb0faed0b77b7c0324a857b88b87679af13fe2d6 [INFO] running `Command { std: "docker" "start" "-a" "e431b09158073e8258de16c2eb0faed0b77b7c0324a857b88b87679af13fe2d6", kill_on_drop: false }` [INFO] [stderr] Compiling opencode-voice v0.1.4 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 4.69s [INFO] running `Command { std: "docker" "inspect" "e431b09158073e8258de16c2eb0faed0b77b7c0324a857b88b87679af13fe2d6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e431b09158073e8258de16c2eb0faed0b77b7c0324a857b88b87679af13fe2d6", kill_on_drop: false }` [INFO] [stdout] e431b09158073e8258de16c2eb0faed0b77b7c0324a857b88b87679af13fe2d6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 4ce75149ad0e172f1d1b84158a8bdc5dfd660bfccd7f161dac345a2304949639 [INFO] running `Command { std: "docker" "start" "-a" "4ce75149ad0e172f1d1b84158a8bdc5dfd660bfccd7f161dac345a2304949639", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.31s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/opencode_voice-1bd1a9b9fb0c5a7c) [INFO] [stdout] [INFO] [stdout] running 253 tests [INFO] [stdout] test app::recording::tests::test_handle_push_to_talk_start_ignores_recording ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/rejecttest app::approval::tests::test_permission_asked_transitions_to_approval_pending ... ok [INFO] [stdout] ? Question pending● Ready [Space] — Press to speaktest app::approval::tests::test_question_replied_removes_from_queue ... ok [INFO] [stdout] test app::recording::tests::test_handle_push_to_talk_start_ignores_transcribing ... ok [INFO] [stdout] ? Question pending● Ready [Space] — Press to speaktest app::approval::tests::test_question_rejected_removes_from_queue ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject⚠ Approval needed (+1 more): bash —  [INFO] [stdout] Say: allow/always/reject[voice] Session became busy — clearing pending approvals (answered externally). [INFO] [stdout] ● Ready [Space] — Press to speaktest app::recording::tests::test_handle_push_to_talk_stop_ignores_idle ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject[voice] Session idle — clearing stale approvals. [INFO] [stdout] ⠋ Transcribing...● Ready [Space] — Press to speaktest app::approval::tests::test_session_busy_clears_pending_approvals ... ok [INFO] [stdout] test app::approval::tests::test_session_idle_does_not_change_transcribing_state ... ok [INFO] [stdout] test app::recording::tests::test_handle_push_to_talk_stop_no_recorder_returns_to_idle ... ok [INFO] [stdout] test app::approval::tests::test_session_idle_no_op_without_pending ... ok [INFO] [stdout] test app::approval::tests::test_session_busy_no_op_without_pending ... ok [INFO] [stdout] ? Question pendingtest app::approval::tests::test_question_asked_transitions_to_approval_pending ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject● Ready [Space] — Press to speaktest app::approval::tests::test_permission_replied_removes_from_queue_and_returns_to_idle ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject⚠ Approval needed (+1 more): bash —  [INFO] [stdout] Say: allow/always/reject? Question pending● Ready [Space] — Press to speak⚠ Approval needed: bash —  [INFO] [stdout] test app::approval::tests::test_multiple_approvals_stay_pending_until_all_cleared ... ok [INFO] [stdout] Say: allow/always/reject[voice] Session idle — clearing stale approvals. [INFO] [stdout] ● Ready [Space] — Press to speaktest app::approval::tests::test_session_idle_clears_stale_approvals ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject[voice] Session became busy — clearing pending approvals (answered externally). [INFO] [stdout] ● REC 0.0stest app::approval::tests::test_session_busy_does_not_change_recording_state ... ok [INFO] [stdout] ● REC 0.0stest app::recording::tests::test_handle_toggle_approval_pending_to_recording ... ok [INFO] [stdout] ✗ Error: Failed to reply to permission: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...✗ Error: Failed to reply to permission: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...test app::recording::tests::test_try_handle_approval_permission_match_removes_item_and_returns_true ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/rejecttest app::tests::test_recover_from_error_transitions_to_idle ... ok [INFO] [stdout] test app::recording::tests::test_return_to_approval_pending_when_queue_has_items ... ok [INFO] [stdout] test app::recording::tests::test_try_handle_approval_empty_queue_returns_false ... ok [INFO] [stdout] ● REC 0.0stest app::recording::tests::test_handle_toggle_idle_to_recording ... ok [INFO] [stdout] ⠋ Transcribing...test app::recording::tests::test_handle_toggle_recording_to_transcribing ... ok [INFO] [stdout] test approval::matcher::tests::test_always_all_patterns ... ok [INFO] [stdout] test approval::matcher::tests::test_always_allow_all ... ok [INFO] [stdout] test approval::matcher::tests::test_always_always ... ok [INFO] [stdout] test approval::matcher::tests::test_always_always_allow ... ok [INFO] [stdout] test approval::matcher::tests::test_always_case_insensitive ... ok [INFO] [stdout] test approval::matcher::tests::test_always_takes_priority_over_once ... ok [INFO] [stdout] test approval::matcher::tests::test_always_trust ... ok [INFO] [stdout] test approval::matcher::tests::test_always_trust_it ... ok [INFO] [stdout] test approval::matcher::tests::test_no_match ... ok [INFO] [stdout] test approval::matcher::tests::test_no_match_empty ... ok [INFO] [stdout] test approval::matcher::tests::test_no_match_random_text ... ok [INFO] [stdout] test app::recording::tests::test_try_handle_approval_question_no_match_returns_false ... ok [INFO] [stdout] test approval::matcher::tests::test_normalize_extra_whitespace ... ok [INFO] [stdout] test approval::matcher::tests::test_normalize_internal_punctuation_preserved ... ok [INFO] [stdout] test approval::matcher::tests::test_normalize_mixed_case ... ok [INFO] [stdout] test approval::matcher::tests::test_normalize_multiple_trailing_punctuation ... ok [INFO] [stdout] test approval::matcher::tests::test_normalize_punctuation ... ok [INFO] [stdout] test approval::matcher::tests::test_not_allowed_exact_reject ... ok [INFO] [stdout] test approval::matcher::tests::test_once_accept ... ok [INFO] [stdout] test approval::matcher::tests::test_once_all_patterns ... ok [INFO] [stdout] test approval::matcher::tests::test_once_allow ... ok [INFO] [stdout] test approval::matcher::tests::test_no_match_whitespace_only ... ok [INFO] [stdout] test approval::matcher::tests::test_once_allow_once ... ok [INFO] [stdout] test approval::matcher::tests::test_once_allow_this ... ok [INFO] [stdout] test approval::matcher::tests::test_once_allow_it ... ok [INFO] [stdout] test approval::matcher::tests::test_once_approve ... ok [INFO] [stdout] test approval::matcher::tests::test_once_approve_it ... ok [INFO] [stdout] test approval::matcher::tests::test_once_approve_once ... ok [INFO] [stdout] test approval::matcher::tests::test_once_approve_this ... ok [INFO] [stdout] test approval::matcher::tests::test_once_case_insensitive ... ok [INFO] [stdout] test approval::matcher::tests::test_once_do_it ... ok [INFO] [stdout] test approval::matcher::tests::test_once_execute ... ok [INFO] [stdout] test approval::matcher::tests::test_once_go_ahead ... ok [INFO] [stdout] test approval::matcher::tests::test_once_go_for_it ... ok [INFO] [stdout] test approval::matcher::tests::test_once_ok ... ok [INFO] [stdout] test approval::matcher::tests::test_once_okay ... ok [INFO] [stdout] test approval::matcher::tests::test_once_permit ... ok [INFO] [stdout] test approval::matcher::tests::test_once_proceed ... ok [INFO] [stdout] test approval::matcher::tests::test_once_run_it ... ok [INFO] [stdout] test approval::matcher::tests::test_once_sure ... ok [INFO] [stdout] test approval::matcher::tests::test_once_with_punctuation ... ok [INFO] [stdout] test approval::matcher::tests::test_once_yep ... ok [INFO] [stdout] test approval::matcher::tests::test_once_yes ... ok [INFO] [stdout] test approval::matcher::tests::test_question_custom_answer ... ok [INFO] [stdout] test approval::matcher::tests::test_question_custom_answer_preserves_text ... ok [INFO] [stdout] test approval::matcher::tests::test_question_empty_questions_no_match ... ok [INFO] [stdout] test approval::matcher::tests::test_question_exact_label ... ok [INFO] [stdout] test approval::matcher::tests::test_question_exact_label_case_insensitive ... ok [INFO] [stdout] test approval::matcher::tests::test_question_label_in_text ... ok [INFO] [stdout] test approval::matcher::tests::test_question_no_match_no_custom ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_option_1 ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_option_2 ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_option_3 ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_out_of_range_no_custom ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_out_of_range_with_custom ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_word_first ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_word_one ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_word_second ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_word_two ... ok [INFO] [stdout] test app::tests::test_voice_app_new_approval_queue_empty ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_cancel ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_dismiss ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_nevermind ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_none ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_skip ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_all_patterns ... ok [INFO] [stdout] ● Ready [Space] — Press to speaktest approval::matcher::tests::test_reject_block ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_cancel ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_case_insensitive ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_decline ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_deny ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_dismiss ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_do_not ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_dont ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_dont_do_it ... ok [INFO] [stdout] test app::recording::tests::test_return_to_idle_when_no_pending ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_nah ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_no ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_nope ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_refuse ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_reject ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_skip ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_stop ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_with_message ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_with_message_cancel_prefix ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_with_message_deny_prefix ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_with_message_no_space_separator ... ok [INFO] [stdout] test approval::queue::tests::test_add_question_and_peek ... ok [INFO] [stdout] test approval::queue::tests::test_add_permission_and_peek ... ok [INFO] [stdout] test approval::queue::tests::test_clear_empties_queue ... ok [INFO] [stdout] test approval::queue::tests::test_clear_on_empty_queue ... ok [INFO] [stdout] test approval::queue::tests::test_clear_then_reuse ... ok [INFO] [stdout] test approval::queue::tests::test_default_creates_empty_queue ... ok [INFO] [stdout] test approval::queue::tests::test_fifo_ordering ... ok [INFO] [stdout] test approval::queue::tests::test_has_pending_tracks_state ... ok [INFO] [stdout] test approval::queue::tests::test_insertion_order_preserved ... ok [INFO] [stdout] test approval::queue::tests::test_len_increments_correctly ... ok [INFO] [stdout] test approval::queue::tests::test_mixed_permission_and_question_types ... ok [INFO] [stdout] test approval::queue::tests::test_new_queue_is_empty ... ok [INFO] [stdout] test approval::queue::tests::test_peek_does_not_remove ... ok [INFO] [stdout] test approval::queue::tests::test_remove_found ... ok [INFO] [stdout] test approval::queue::tests::test_remove_last_item_leaves_empty ... ok [INFO] [stdout] test approval::queue::tests::test_remove_middle_item ... ok [INFO] [stdout] test approval::queue::tests::test_remove_not_found ... ok [INFO] [stdout] test approval::queue::tests::test_remove_not_found_does_not_change_len ... ok [INFO] [stdout] test approval::queue::tests::test_remove_preserves_fifo_order ... ok [INFO] [stdout] test audio::wav::tests::test_create_temp_wav_path_has_uuid ... ok [INFO] [stdout] test audio::wav::tests::test_create_temp_wav_path_in_temp_dir ... ok [INFO] [stdout] test audio::wav::tests::test_drop_no_panic_when_file_missing ... ok [INFO] [stdout] test audio::wav::tests::test_write_and_delete ... ok [INFO] [stdout] test audio::wav::tests::test_write_wav_creates_valid_file ... ok [INFO] [stdout] test bridge::events::tests::test_backoff_calculation ... ok [INFO] [stdout] test bridge::events::tests::test_parse_connected ... ok [INFO] [stdout] test bridge::events::tests::test_parse_empty_data ... ok [INFO] [stdout] test bridge::events::tests::test_parse_heartbeat_ignored ... ok [INFO] [stdout] test bridge::events::tests::test_parse_ignored_message_events_return_none ... ok [INFO] [stdout] test bridge::events::tests::test_parse_ignored_misc_events_return_none ... ok [INFO] [stdout] test bridge::events::tests::test_parse_ignored_session_events_return_none ... ok [INFO] [stdout] test bridge::events::tests::test_parse_malformed_json ... ok [INFO] [stdout] test bridge::events::tests::test_parse_missing_properties ... ok [INFO] [stdout] test bridge::events::tests::test_parse_no_type_field ... ok [INFO] [stdout] test bridge::events::tests::test_parse_permission_asked ... ok [INFO] [stdout] test bridge::events::tests::test_parse_permission_replied ... ok [INFO] [stdout] test bridge::events::tests::test_parse_question_rejected ... ok [INFO] [stdout] test bridge::events::tests::test_parse_question_replied ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_busy ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_idle ... ok [INFO] [stdout] test bridge::events::tests::test_parse_question_asked ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_retry ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_snake_case_session_id ... ok [INFO] [stdout] test bridge::events::tests::test_parse_truly_unknown_event_returns_none ... ok [INFO] [stdout] test bridge::events::tests::test_parse_unknown_type ... ok [INFO] [stdout] test config::tests::test_app_config_default_field_values ... ok [INFO] [stdout] test config::tests::test_app_config_opencode_port ... ok [INFO] [stdout] test config::tests::test_get_data_dir_contains_app_name ... ok [INFO] [stdout] test config::tests::test_get_data_dir_ends_with_opencode_voice ... ok [INFO] [stdout] test config::tests::test_get_data_dir_is_absolute ... ok [INFO] [stdout] test config::tests::test_model_size_default ... ok [INFO] [stdout] test config::tests::test_model_size_display ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_missing_status_field ... ok [INFO] [stdout] test config::tests::test_model_size_display_base_en ... ok [INFO] [stdout] test config::tests::test_model_size_display_small_en ... ok [INFO] [stdout] test config::tests::test_model_size_display_tiny_en ... ok [INFO] [stdout] test approval::matcher::tests::test_once_yeah ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_never_mind ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_roundtrip_base ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_roundtrip_small ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_roundtrip_tiny ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_short_aliases_are_multilingual ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_unknown_returns_error ... ok [INFO] [stdout] test app::recording::tests::test_handle_toggle_ignores_transcribing_state ... ok [INFO] [stdout] test config::tests::test_model_size_is_multilingual ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_key_map_has_60_plus_entries ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_alias_right_alt ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_caps_lock ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_escape ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_f1 ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_hex_number ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_left_command ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_modifiers ... ok [INFO] [stdout] ✗ Error: test error [INFO] [stdout] Recovering...test app::tests::test_handle_error_sets_error_state ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_right_option ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_space ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_unknown ... ok [INFO] [stdout] test app::tests::test_voice_app_shutdown_cancels_token ... ok [INFO] [stdout] test input::hotkey::tests::test_format_key_name_f13 ... ok [INFO] [stdout] test input::hotkey::tests::test_format_key_name_numpad_enter ... ok [INFO] [stdout] test input::hotkey::tests::test_format_key_name_right_option ... ok [INFO] [stdout] test input::hotkey::tests::test_format_key_name_space ... ok [INFO] [stdout] test input::hotkey::tests::test_key_map_has_60_plus_entries ... ok [INFO] [stdout] test input::hotkey::tests::test_list_key_names_includes_numpad_clear ... ok [INFO] [stdout] test input::hotkey::tests::test_list_key_names_sorted ... ok [INFO] [stdout] test transcribe::engine::tests::test_is_model_valid_nonexistent ... ok [INFO] [stdout] test transcribe::engine::tests::test_is_model_valid_small_file ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_hallucinations_blank_audio ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_decimal_number ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_hallucinations_case_insensitive ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_hallucinations_mixed ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_hallucinations_preserves_real_text ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_timestamps_no_timestamps ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_timestamps_with_arrow ... ok [INFO] [stdout] test transcribe::setup::tests::test_get_model_path ... ok [INFO] [stdout] test transcribe::setup::tests::test_get_model_path_contains_model_size ... ok [INFO] [stdout] ✗ Error: Failed to reply to question: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...✗ Error: Failed to reply to question: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...test app::recording::tests::test_try_handle_approval_question_match_removes_item_and_returns_true ... ok [INFO] [stdout] test transcribe::setup::tests::test_is_whisper_ready_small_file ... ok [INFO] [stdout] test transcribe::setup::tests::test_is_whisper_ready_valid_file ... ok [INFO] [stdout] test ui::display::tests::test_all_states_produce_distinct_output ... ok [INFO] [stdout] test ui::display::tests::test_all_states_produce_output ... ok [INFO] [stdout] test ui::display::tests::test_display_default ... ok [INFO] [stdout] test ui::display::tests::test_display_new_initial_state ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_bash ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_edit ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_empty_metadata ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_read ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_unknown_fallback ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_write ... ok [INFO] [stdout] test ui::display::tests::test_render_level_clamps_above_one ... ok [INFO] [stdout] test ui::display::tests::test_render_level_empty ... ok [INFO] [stdout] test ui::display::tests::test_render_level_full ... ok [INFO] [stdout] test ui::display::tests::test_render_level_half ... ok [INFO] [stdout] test ui::display::tests::test_render_level_width_zero ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_multiple_count ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_no_approval ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_permission ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_question ... ok [INFO] [stdout] test config::tests::test_model_size_from_str ... ok [INFO] [stdout] test ui::display::tests::test_render_state_error ... ok [INFO] [stdout] test ui::display::tests::test_render_state_error_default_message ... ok [INFO] [stdout] test ui::display::tests::test_render_state_idle_no_transcript ... ok [INFO] [stdout] test ui::display::tests::test_render_state_idle_transcript_truncated ... ok [INFO] [stdout] test ui::display::tests::test_render_state_idle_with_transcript ... ok [INFO] [stdout] test ui::display::tests::test_render_state_injecting ... ok [INFO] [stdout] test ui::display::tests::test_render_state_recording ... ok [INFO] [stdout] test ui::display::tests::test_render_state_recording_no_level ... ok [INFO] [stdout] test ui::display::tests::test_render_state_transcribing ... ok [INFO] [stdout] test app::recording::tests::test_try_handle_approval_permission_no_match_returns_false ... ok [INFO] [stdout] test input::hotkey::tests::test_list_key_names_includes_section ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_timestamps_preserves_non_timestamp_brackets ... ok [INFO] [stdout] test config::tests::test_model_size_from_str_invalid ... ok [INFO] [stdout] test app::tests::test_voice_app_new_initializes_idle_state ... ok [INFO] [stdout] test app::tests::test_voice_app_new_not_shutting_down ... ok [INFO] [stdout] test app::tests::test_voice_app_shutdown_idempotent ... ok [INFO] [stdout] test app::tests::test_voice_app_shutdown_sets_flag ... ok [INFO] [stdout] test app::tests::test_voice_app_event_channel_works ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_f13 ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_numpad ... ok [INFO] [stdout] test transcribe::setup::tests::test_is_whisper_ready_missing_file ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_question_empty ... ok [INFO] [stdout] test app::tests::test_voice_app_new_whisper_none_when_model_missing ... ok [INFO] [stdout] ✗ Error: Failed to reject question: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...✗ Error: Failed to reject question: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...test app::recording::tests::test_try_handle_approval_question_reject_removes_item_and_returns_true ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 253 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.00s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/opencode_voice-b24e23cdf44a80c8) [INFO] [stdout] [INFO] [stdout] running 258 tests [INFO] [stdout] ? Question pending● Ready [Space] — Press to speak⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject● Ready [Space] — Press to speak⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject⚠ Approval needed (+1 more): bash —  [INFO] [stdout] Say: allow/always/reject[voice] Session became busy — clearing pending approvals (answered externally). [INFO] [stdout] ● Ready [Space] — Press to speak⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject[voice] Session idle — clearing stale approvals. [INFO] [stdout] ● Ready [Space] — Press to speaktest app::approval::tests::test_question_replied_removes_from_queue ... ok [INFO] [stdout] test app::approval::tests::test_permission_replied_removes_from_queue_and_returns_to_idle ... ok [INFO] [stdout] test app::approval::tests::test_session_busy_clears_pending_approvals ... ok [INFO] [stdout] test app::recording::tests::test_handle_push_to_talk_start_ignores_recording ... ok [INFO] [stdout] test app::approval::tests::test_session_idle_clears_stale_approvals ... ok [INFO] [stdout] ● Ready [Space] — Press to speaktest app::recording::tests::test_handle_push_to_talk_stop_no_recorder_returns_to_idle ... ok [INFO] [stdout] test app::approval::tests::test_session_busy_no_op_without_pending ... ok [INFO] [stdout] test app::approval::tests::test_session_idle_no_op_without_pending ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject⚠ Approval needed (+1 more): bash —  [INFO] [stdout] Say: allow/always/reject? Question pending● Ready [Space] — Press to speaktest app::approval::tests::test_multiple_approvals_stay_pending_until_all_cleared ... ok [INFO] [stdout] ? Question pending⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject[voice] Session idle — clearing stale approvals. [INFO] [stdout] ⠋ Transcribing...test app::approval::tests::test_question_asked_transitions_to_approval_pending ... ok [INFO] [stdout] test app::approval::tests::test_session_idle_does_not_change_transcribing_state ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/reject[voice] Session became busy — clearing pending approvals (answered externally). [INFO] [stdout] ● REC 0.0s? Question pending● Ready [Space] — Press to speaktest app::approval::tests::test_session_busy_does_not_change_recording_state ... ok [INFO] [stdout] test app::recording::tests::test_handle_push_to_talk_stop_ignores_idle ... ok [INFO] [stdout] test app::approval::tests::test_question_rejected_removes_from_queue ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/rejecttest app::approval::tests::test_permission_asked_transitions_to_approval_pending ... ok [INFO] [stdout] test app::recording::tests::test_handle_push_to_talk_start_ignores_transcribing ... ok [INFO] [stdout] ● REC 0.0stest app::recording::tests::test_handle_toggle_idle_to_recording ... ok [INFO] [stdout] ✗ Error: test error [INFO] [stdout] Recovering...test app::tests::test_handle_error_sets_error_state ... ok [INFO] [stdout] test app::tests::test_voice_app_event_channel_works ... ok [INFO] [stdout] ⠋ Transcribing...test app::recording::tests::test_try_handle_approval_empty_queue_returns_false ... ok [INFO] [stdout] test app::recording::tests::test_handle_toggle_recording_to_transcribing ... ok [INFO] [stdout] ● Ready [Space] — Press to speaktest app::recording::tests::test_return_to_idle_when_no_pending ... ok [INFO] [stdout] ● REC 0.0stest app::recording::tests::test_handle_toggle_approval_pending_to_recording ... ok [INFO] [stdout] test approval::matcher::tests::test_always_all_patterns ... ok [INFO] [stdout] ⚠ Approval needed: bash —  [INFO] [stdout] Say: allow/always/rejecttest approval::matcher::tests::test_always_allow_all ... ok [INFO] [stdout] test app::recording::tests::test_try_handle_approval_permission_no_match_returns_false ... ok [INFO] [stdout] test app::recording::tests::test_return_to_approval_pending_when_queue_has_items ... ok [INFO] [stdout] test approval::matcher::tests::test_always_always_allow ... ok [INFO] [stdout] ✗ Error: Failed to reply to permission: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...✗ Error: Failed to reply to permission: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...test app::recording::tests::test_try_handle_approval_permission_match_removes_item_and_returns_true ... ok [INFO] [stdout] test approval::matcher::tests::test_always_trust ... ok [INFO] [stdout] test approval::matcher::tests::test_always_trust_it ... ok [INFO] [stdout] test approval::matcher::tests::test_no_match ... ok [INFO] [stdout] test approval::matcher::tests::test_no_match_empty ... ok [INFO] [stdout] test approval::matcher::tests::test_no_match_random_text ... ok [INFO] [stdout] test approval::matcher::tests::test_no_match_whitespace_only ... ok [INFO] [stdout] ✗ Error: Failed to reject question: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...✗ Error: Failed to reject question: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...test approval::matcher::tests::test_normalize_extra_whitespace ... ok [INFO] [stdout] test approval::matcher::tests::test_normalize_internal_punctuation_preserved ... ok [INFO] [stdout] test approval::matcher::tests::test_always_always ... ok [INFO] [stdout] test approval::matcher::tests::test_always_case_insensitive ... ok [INFO] [stdout] test approval::matcher::tests::test_always_takes_priority_over_once ... ok [INFO] [stdout] test approval::matcher::tests::test_normalize_multiple_trailing_punctuation ... ok [INFO] [stdout] test approval::matcher::tests::test_normalize_punctuation ... ok [INFO] [stdout] test approval::matcher::tests::test_not_allowed_exact_reject ... ok [INFO] [stdout] test approval::matcher::tests::test_once_accept ... ok [INFO] [stdout] test approval::matcher::tests::test_once_all_patterns ... ok [INFO] [stdout] test approval::matcher::tests::test_once_allow_it ... ok [INFO] [stdout] test app::recording::tests::test_try_handle_approval_question_reject_removes_item_and_returns_true ... ok [INFO] [stdout] test approval::matcher::tests::test_once_allow_once ... ok [INFO] [stdout] test approval::matcher::tests::test_once_allow_this ... ok [INFO] [stdout] test approval::matcher::tests::test_once_approve ... ok [INFO] [stdout] test approval::matcher::tests::test_once_approve_it ... ok [INFO] [stdout] test approval::matcher::tests::test_once_approve_once ... ok [INFO] [stdout] test approval::matcher::tests::test_once_approve_this ... ok [INFO] [stdout] test approval::matcher::tests::test_once_case_insensitive ... ok [INFO] [stdout] test approval::matcher::tests::test_once_do_it ... ok [INFO] [stdout] test approval::matcher::tests::test_once_execute ... ok [INFO] [stdout] test approval::matcher::tests::test_once_go_ahead ... ok [INFO] [stdout] test approval::matcher::tests::test_once_go_for_it ... ok [INFO] [stdout] test approval::matcher::tests::test_once_ok ... ok [INFO] [stdout] test approval::matcher::tests::test_once_okay ... ok [INFO] [stdout] test approval::matcher::tests::test_once_permit ... ok [INFO] [stdout] test approval::matcher::tests::test_once_proceed ... ok [INFO] [stdout] test approval::matcher::tests::test_once_run_it ... ok [INFO] [stdout] test approval::matcher::tests::test_once_sure ... ok [INFO] [stdout] test approval::matcher::tests::test_once_with_punctuation ... ok [INFO] [stdout] test approval::matcher::tests::test_once_yeah ... ok [INFO] [stdout] test approval::matcher::tests::test_once_allow ... ok [INFO] [stdout] test approval::matcher::tests::test_once_yep ... ok [INFO] [stdout] test approval::matcher::tests::test_question_custom_answer_preserves_text ... ok [INFO] [stdout] test approval::matcher::tests::test_question_empty_questions_no_match ... ok [INFO] [stdout] test approval::matcher::tests::test_question_exact_label ... ok [INFO] [stdout] test approval::matcher::tests::test_question_exact_label_case_insensitive ... ok [INFO] [stdout] test approval::matcher::tests::test_question_label_in_text ... ok [INFO] [stdout] test approval::matcher::tests::test_question_no_match_no_custom ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_option_2 ... ok [INFO] [stdout] test approval::matcher::tests::test_once_yes ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_option_3 ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_option_1 ... ok [INFO] [stdout] test approval::matcher::tests::test_question_custom_answer ... ok [INFO] [stdout] test approval::matcher::tests::test_normalize_mixed_case ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_word_first ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_word_one ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_word_second ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_word_two ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_cancel ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_dismiss ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_never_mind ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_none ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_skip ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_all_patterns ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_block ... ok [INFO] [stdout] test approval::matcher::tests::test_question_reject_nevermind ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_case_insensitive ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_decline ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_cancel ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_dismiss ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_do_not ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_dont ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_dont_do_it ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_deny ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_no ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_nope ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_nah ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_out_of_range_no_custom ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_refuse ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_reject ... ok [INFO] [stdout] test approval::matcher::tests::test_question_numeric_out_of_range_with_custom ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_skip ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_stop ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_with_message ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_with_message_deny_prefix ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_with_message_no_space_separator ... ok [INFO] [stdout] test approval::queue::tests::test_add_permission_and_peek ... ok [INFO] [stdout] test approval::queue::tests::test_add_question_and_peek ... ok [INFO] [stdout] test approval::queue::tests::test_clear_empties_queue ... ok [INFO] [stdout] test approval::queue::tests::test_fifo_ordering ... ok [INFO] [stdout] test approval::queue::tests::test_has_pending_tracks_state ... ok [INFO] [stdout] test approval::queue::tests::test_insertion_order_preserved ... ok [INFO] [stdout] test approval::queue::tests::test_len_increments_correctly ... ok [INFO] [stdout] test approval::queue::tests::test_mixed_permission_and_question_types ... ok [INFO] [stdout] test approval::queue::tests::test_new_queue_is_empty ... ok [INFO] [stdout] test approval::queue::tests::test_peek_does_not_remove ... ok [INFO] [stdout] test approval::queue::tests::test_remove_found ... ok [INFO] [stdout] test approval::queue::tests::test_remove_last_item_leaves_empty ... ok [INFO] [stdout] test approval::queue::tests::test_remove_middle_item ... ok [INFO] [stdout] test approval::queue::tests::test_remove_not_found ... ok [INFO] [stdout] test approval::queue::tests::test_remove_not_found_does_not_change_len ... ok [INFO] [stdout] test approval::queue::tests::test_remove_preserves_fifo_order ... ok [INFO] [stdout] test audio::wav::tests::test_create_temp_wav_path_has_uuid ... ok [INFO] [stdout] test audio::wav::tests::test_create_temp_wav_path_in_temp_dir ... ok [INFO] [stdout] test audio::wav::tests::test_drop_no_panic_when_file_missing ... ok [INFO] [stdout] test audio::wav::tests::test_write_and_delete ... ok [INFO] [stdout] test audio::wav::tests::test_write_wav_creates_valid_file ... ok [INFO] [stdout] test approval::queue::tests::test_default_creates_empty_queue ... ok [INFO] [stdout] test bridge::events::tests::test_parse_connected ... ok [INFO] [stdout] test bridge::events::tests::test_parse_empty_data ... ok [INFO] [stdout] test bridge::events::tests::test_parse_heartbeat_ignored ... ok [INFO] [stdout] test bridge::events::tests::test_parse_ignored_message_events_return_none ... ok [INFO] [stdout] test bridge::events::tests::test_parse_ignored_misc_events_return_none ... ok [INFO] [stdout] test bridge::events::tests::test_parse_ignored_session_events_return_none ... ok [INFO] [stdout] test bridge::events::tests::test_parse_malformed_json ... ok [INFO] [stdout] test bridge::events::tests::test_parse_missing_properties ... ok [INFO] [stdout] test bridge::events::tests::test_parse_no_type_field ... ok [INFO] [stdout] test bridge::events::tests::test_backoff_calculation ... ok [INFO] [stdout] test approval::matcher::tests::test_reject_with_message_cancel_prefix ... ok [INFO] [stdout] test approval::queue::tests::test_clear_on_empty_queue ... ok [INFO] [stdout] test approval::queue::tests::test_clear_then_reuse ... ok [INFO] [stdout] test bridge::events::tests::test_parse_permission_asked ... ok [INFO] [stdout] test app::recording::tests::test_try_handle_approval_question_no_match_returns_false ... ok [INFO] [stdout] test bridge::events::tests::test_parse_permission_replied ... ok [INFO] [stdout] test bridge::events::tests::test_parse_question_replied ... ok [INFO] [stdout] test bridge::events::tests::test_parse_question_asked ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_idle ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_retry ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_snake_case_session_id ... ok [INFO] [stdout] test bridge::events::tests::test_parse_truly_unknown_event_returns_none ... ok [INFO] [stdout] test bridge::events::tests::test_parse_unknown_type ... ok [INFO] [stdout] test config::tests::test_app_config_default_field_values ... ok [INFO] [stdout] test config::tests::test_app_config_opencode_port ... ok [INFO] [stdout] test config::tests::test_get_data_dir_contains_app_name ... ok [INFO] [stdout] test config::tests::test_get_data_dir_ends_with_opencode_voice ... ok [INFO] [stdout] test config::tests::test_get_data_dir_is_absolute ... ok [INFO] [stdout] test config::tests::test_model_size_default ... ok [INFO] [stdout] test config::tests::test_model_size_display ... ok [INFO] [stdout] test config::tests::test_model_size_display_base_en ... ok [INFO] [stdout] test config::tests::test_model_size_display_small_en ... ok [INFO] [stdout] test config::tests::test_model_size_display_tiny_en ... ok [INFO] [stdout] test config::tests::test_model_size_from_str ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_busy ... ok [INFO] [stdout] test config::tests::test_model_size_from_str_invalid ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_roundtrip_base ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_short_aliases_are_multilingual ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_unknown_returns_error ... ok [INFO] [stdout] test config::tests::test_model_size_is_multilingual ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_key_map_has_60_plus_entries ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_alias_right_alt ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_caps_lock ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_decimal_number ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_escape ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_f1 ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_f13 ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_hex_number ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_roundtrip_small ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_left_command ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_modifiers ... ok [INFO] [stdout] test bridge::events::tests::test_parse_question_rejected ... ok [INFO] [stdout] test bridge::events::tests::test_parse_session_status_missing_status_field ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_right_option ... ok [INFO] [stdout] test input::hotkey::tests::test_format_key_name_f13 ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_space ... ok [INFO] [stdout] test input::hotkey::tests::test_format_key_name_right_option ... ok [INFO] [stdout] test input::hotkey::tests::test_format_key_name_numpad_enter ... ok [INFO] [stdout] test input::hotkey::tests::test_format_key_name_space ... ok [INFO] [stdout] test input::hotkey::tests::test_key_map_has_60_plus_entries ... ok [INFO] [stdout] test input::hotkey::tests::test_list_key_names_includes_section ... ok [INFO] [stdout] test input::hotkey::tests::test_list_key_names_sorted ... ok [INFO] [stdout] test tests::test_format_key_name_via_main ... ok [INFO] [stdout] test tests::test_get_data_dir_contains_app_name ... ok [INFO] [stdout] test tests::test_list_key_names_non_empty ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_unknown ... ok [INFO] [stdout] test transcribe::engine::tests::test_is_model_valid_nonexistent ... ok [INFO] [stdout] ✗ Error: Failed to reply to question: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...✗ Error: Failed to reply to question: Cannot connect to OpenCode at http://localhost:4096. Make sure OpenCode is running with --port flag: opencode --port  [INFO] [stdout] Recovering...test input::hotkey::tests::test_list_key_names_includes_numpad_clear ... ok [INFO] [stdout] test transcribe::engine::tests::test_is_model_valid_small_file ... ok [INFO] [stdout] test app::recording::tests::test_try_handle_approval_question_match_removes_item_and_returns_true ... ok [INFO] [stdout] test tests::test_model_size_display_in_main ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_hallucinations_blank_audio ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_hallucinations_case_insensitive ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_hallucinations_preserves_real_text ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_timestamps_preserves_non_timestamp_brackets ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_timestamps_with_arrow ... ok [INFO] [stdout] test transcribe::setup::tests::test_get_model_path ... ok [INFO] [stdout] test transcribe::setup::tests::test_get_model_path_contains_model_size ... ok [INFO] [stdout] test transcribe::setup::tests::test_is_whisper_ready_missing_file ... ok [INFO] [stdout] test transcribe::setup::tests::test_is_whisper_ready_small_file ... ok [INFO] [stdout] test ui::display::tests::test_all_states_produce_distinct_output ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_hallucinations_mixed ... ok [INFO] [stdout] test transcribe::engine::tests::test_strip_timestamps_no_timestamps ... ok [INFO] [stdout] test ui::display::tests::test_display_default ... ok [INFO] [stdout] test transcribe::setup::tests::test_is_whisper_ready_valid_file ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_bash ... ok [INFO] [stdout] test ui::display::tests::test_display_new_initial_state ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_edit ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_read ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_unknown_fallback ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_write ... ok [INFO] [stdout] test ui::display::tests::test_render_level_clamps_above_one ... ok [INFO] [stdout] test ui::display::tests::test_render_level_empty ... ok [INFO] [stdout] test ui::display::tests::test_render_level_full ... ok [INFO] [stdout] test ui::display::tests::test_render_level_half ... ok [INFO] [stdout] test ui::display::tests::test_render_level_width_zero ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_multiple_count ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_no_approval ... ok [INFO] [stdout] test ui::display::tests::test_all_states_produce_output ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_permission ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_question ... ok [INFO] [stdout] test ui::display::tests::test_render_state_approval_pending_question_empty ... ok [INFO] [stdout] test ui::display::tests::test_render_state_error_default_message ... ok [INFO] [stdout] test ui::display::tests::test_render_state_idle_no_transcript ... ok [INFO] [stdout] test ui::display::tests::test_render_state_idle_transcript_truncated ... ok [INFO] [stdout] test ui::display::tests::test_render_state_idle_with_transcript ... ok [INFO] [stdout] test ui::display::tests::test_render_state_error ... ok [INFO] [stdout] test ui::display::tests::test_render_state_injecting ... ok [INFO] [stdout] test ui::display::tests::test_render_state_recording ... ok [INFO] [stdout] test ui::display::tests::test_render_state_transcribing ... ok [INFO] [stdout] test ui::display::tests::test_render_state_recording_no_level ... ok [INFO] [stdout] test app::tests::test_voice_app_shutdown_idempotent ... ok [INFO] [stdout] test app::tests::test_voice_app_new_approval_queue_empty ... ok [INFO] [stdout] test config::tests::test_model_size_fromstr_roundtrip_tiny ... ok [INFO] [stdout] test ui::display::tests::test_format_permission_detail_empty_metadata ... ok [INFO] [stdout] test input::hotkey::platform::tests::test_resolve_key_numpad ... ok [INFO] [stdout] test app::tests::test_voice_app_new_initializes_idle_state ... ok [INFO] [stdout] test app::tests::test_recover_from_error_transitions_to_idle ... ok [INFO] [stdout] test tests::test_list_devices_does_not_panic ... ok [INFO] [stdout] test app::tests::test_voice_app_new_whisper_none_when_model_missing ... ok [INFO] [stdout] test app::tests::test_voice_app_shutdown_cancels_token ... ok [INFO] [stdout] test app::recording::tests::test_handle_toggle_ignores_transcribing_state ... ok [INFO] [stdout] test app::tests::test_voice_app_shutdown_sets_flag ... ok [INFO] [stdout] test app::tests::test_voice_app_new_not_shutting_down ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 258 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.37s [INFO] [stdout] [INFO] [stderr] Running tests/bridge_test.rs (/opt/rustwide/target/debug/deps/bridge_test-bb893201be462b16) [INFO] [stdout] [INFO] [stdout] running 11 tests [INFO] [stdout] test test_reply_permission_sends_correct_request ... ok [INFO] [stdout] test test_no_auth_header_when_no_password ... ok [INFO] [stdout] test test_append_prompt_with_query_params ... ok [INFO] [stdout] test test_auth_header_sent_when_password_set ... ok [INFO] [stdout] test test_get_base_url ... ok [INFO] [stdout] test test_reject_question_sends_correct_request ... ok [INFO] [stdout] test test_reply_permission_always_with_message ... ok [INFO] [stdout] test test_get_base_url_trailing_slash_stripped ... ok [INFO] [stdout] test test_is_connected_returns_true_when_server_running ... ok [INFO] [stdout] test test_append_prompt_sends_correct_request ... ok [INFO] [stdout] test test_is_connected_returns_false_when_server_not_running ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.83s [INFO] [stdout] [INFO] [stderr] Running tests/sse_test.rs (/opt/rustwide/target/debug/deps/sse_test-8a9131707c203e60) [INFO] [stdout] [INFO] [stdout] running 16 tests [INFO] [stdout] test test_backoff_cap_is_exactly_30s ... ok [INFO] [stdout] test test_backoff_individual_steps ... ok [INFO] [stdout] test test_blank_data_value_is_skipped ... ok [INFO] [stdout] test test_malformed_json_is_skipped ... ok [INFO] [stdout] test test_heartbeat_produces_no_event ... ok [INFO] [stdout] test test_permission_replied_parses_correctly ... ok [INFO] [stdout] test test_question_replied_parses_correctly ... ok [INFO] [stdout] test test_unknown_event_type_is_ignored ... ok [INFO] [stdout] test test_missing_type_field_is_ignored ... ok [INFO] [stdout] test test_permission_asked_parses_correctly ... ok [INFO] [stdout] test test_server_connected_parses_correctly ... ok [INFO] [stdout] test test_multiline_sse_block_finds_data_line ... ok [INFO] [stdout] test test_question_asked_parses_correctly ... ok [INFO] [stdout] test test_backoff_doubles_and_caps_at_30s ... ok [INFO] [stdout] test test_question_rejected_parses_correctly ... ok [INFO] [stdout] test test_empty_data_line_is_skipped ... ok [INFO] [stderr] Doc-tests opencode_voice [INFO] [stdout] [INFO] [stdout] test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s [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" "4ce75149ad0e172f1d1b84158a8bdc5dfd660bfccd7f161dac345a2304949639", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4ce75149ad0e172f1d1b84158a8bdc5dfd660bfccd7f161dac345a2304949639", kill_on_drop: false }` [INFO] [stdout] 4ce75149ad0e172f1d1b84158a8bdc5dfd660bfccd7f161dac345a2304949639