From fdf0e211b826c65684fd23a2bef3e19b24177c87 Mon Sep 17 00:00:00 2001 From: vetcoders-agents Date: Thu, 9 Jul 2026 17:26:29 -0700 Subject: [PATCH 1/3] fix(ci): pin Rust Quality jobs to macOS self-hosted runner Workspace depends on objc2 (Apple-only); bare self-hosted label can route the job to a Linux runner where the build fails with compile_error. Pin both jobs to macOS runners. --- .github/workflows/rust.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 93e80370..a41623b0 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -24,7 +24,7 @@ env: jobs: format: name: Format Check - runs-on: self-hosted + runs-on: [self-hosted, macOS] steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 @@ -37,7 +37,7 @@ jobs: quality: name: Clippy + Tests - runs-on: self-hosted + runs-on: [self-hosted, macOS] steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 From dd34cf6c079cd43a53b3a21136aeece9752f8a02 Mon Sep 17 00:00:00 2001 From: vetcoders-agents Date: Thu, 9 Jul 2026 17:53:08 -0700 Subject: [PATCH 2/3] test(audio): skip no-speech corpus artifacts in VAD segmentation test --- core/audio/streaming_recorder.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/audio/streaming_recorder.rs b/core/audio/streaming_recorder.rs index b8a81f05..57db8637 100644 --- a/core/audio/streaming_recorder.rs +++ b/core/audio/streaming_recorder.rs @@ -784,6 +784,11 @@ mod tests { for entry in entries.flatten() { let p = entry.path(); if p.extension().and_then(|s| s.to_str()) == Some("wav") { + let fname = p.file_name().unwrap_or_default().to_string_lossy(); + // Failed-recording artifacts genuinely have no speech; zero detection on them is correct, not a model issue. + if fname.contains("no-speech") || fname.ends_with("_failed.wav") { + continue; + } wavs.push(p); if wavs.len() >= 5 { break; From 60d1c5a35ab2348975bb69d84a0ccd9cbf4b09a1 Mon Sep 17 00:00:00 2001 From: Szowesgad Date: Thu, 9 Jul 2026 18:39:00 -0700 Subject: [PATCH 3/3] [codex/vc-review] test: cover skipped terminal audio artifacts --- core/audio/streaming_recorder.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/core/audio/streaming_recorder.rs b/core/audio/streaming_recorder.rs index 57db8637..d8340d15 100644 --- a/core/audio/streaming_recorder.rs +++ b/core/audio/streaming_recorder.rs @@ -476,6 +476,27 @@ mod tests { crate::config::Config::config_dir().join("transcriptions") } + fn is_terminal_no_speech_artifact(file_name: &str) -> bool { + file_name.contains("no-speech") || file_name.ends_with("_failed.wav") + } + + #[test] + fn terminal_no_speech_artifact_filter_is_name_bounded() { + assert!(is_terminal_no_speech_artifact( + "20260709_120000_no-speech_raw.wav" + )); + assert!(is_terminal_no_speech_artifact( + "20260709_120001_dictation_failed.wav" + )); + assert!(!is_terminal_no_speech_artifact( + "20260709_120002_failed-but-recovered_raw.wav" + )); + assert!(!is_terminal_no_speech_artifact( + "03_algorytm-ma-zlozonosc.wav" + )); + assert!(!is_terminal_no_speech_artifact("dictation_failed.m4a")); + } + fn collect_pairs( root: &Path, date_filter: Option<&str>, @@ -785,8 +806,8 @@ mod tests { let p = entry.path(); if p.extension().and_then(|s| s.to_str()) == Some("wav") { let fname = p.file_name().unwrap_or_default().to_string_lossy(); - // Failed-recording artifacts genuinely have no speech; zero detection on them is correct, not a model issue. - if fname.contains("no-speech") || fname.ends_with("_failed.wav") { + // Terminal failed/no-speech artifacts should not be scored as VAD segmentation misses. + if is_terminal_no_speech_artifact(&fname) { continue; } wavs.push(p);