fix: detect Zoom calls using non-default input devices#331
Conversation
|
Someone is attempting to deploy a commit to the evil genius laboratory Team on Vercel. A member of the Team first needs to authorize it. |
|
This is excellent work, Caleb. Filing #330 with a clean repro and then fixing it with CoreAudio active-input-PID attribution is exactly the right approach, and the descendant-expansion handling for Zoom helpers is thoughtful. I want to merge it. One blocker and two smaller things first. Blocker: the attribution-unavailable fallback reopens #244. In let mic_live = active_input_pids.as_ref().map(|p| !p.is_empty()).unwrap_or_else(is_mic_in_use);and the native-app loops fall back with: let native_active = match (processes, active_input_pids) {
(Some(processes), Some(active_input_pids)) => native_app_has_active_input(...),
_ => native_app_matches_running_process(config_app, running),
};When Suggested fix: once attribution is unavailable, native-app detection should not fall back to 'process exists plus generic mic active.' Either return no detection for native apps until PIDs are available (degraded, logged), or keep the all-device mic scan strictly as a liveness gate for the browser-tab probe path, never as the native trigger. Concretely, the Two smaller items:
Take whatever you have learned from the local crash reports into account too. Happy to talk through the fallback approach if useful. I think closing that one path is all this needs. |
|
I'll honestly attribute 100% of the credit for the fixes to codex and GPT, I'm just trying to use the app and throwing codex at any bugs I find while I'm at it to try and use the great framework you've built here 😂. |
|
Ha, all good. Credit can land wherever it likes. The only bar here is that the code is correct, and the review exists exactly so it doesn't matter whether a fix came from you, Codex, GPT, or a Ouija board. Funny enough the blocker above came out of a Codex adversarial pass on my end, so it was robots checking robots, and that is fine by me. You are finding real bugs in a tool you actually use and reporting them with clean repros, which is the most useful kind of contribution there is. Keep them coming. |
|
Added two follow-up commits to address the review feedback:
So I believe the blocker and the test gap from the review are now covered. |
|
This nails it. I verified the fix end to end:
One housekeeping thing before I merge: main moved a fair bit today (a couple of releases plus a microphone permission gate), and your branch now shows conflicts. The likely spot is |
b3b49d8 to
d16acd2
Compare
|
Rebased this onto latest Local checks are green:
GitHub now reports the branch as mergeable. CI has restarted; Vercel still appears to be the external authorization gate. |
Summary
Fixes #330.
This makes macOS native call detection work when Zoom is actively using a non-default input device, without broadening the generic mic gate in a way that would worsen #244.
Changes:
mic_checkfrommic_check.swiftduring Tauri builds;mic_checkto expose CoreAudio active-input PIDs via--active-input-pids;ZoomHybridConfin Zoom's attributed process family.Why this is not a #244 regression
#244 happens because generic mic activity can be caused by another app, such as a dictation tool, while an idle call app is merely running.
This PR avoids using broadened generic mic activity as the native app trigger when process attribution is available. The detector now checks whether the active input PID belongs to the configured native call app process family. A regression test covers idle
zoom.usplus activesuperwhisperand expects no detection.Tests
cargo test -p minutes-app -- --test-threads=1— 211 passedxcrun swiftc tauri/src-tauri/src/mic_check.swift -o /tmp/minutes-mic-check-test && /tmp/minutes-mic-check-test && /tmp/minutes-mic-check-test --active-input-pidsINSTALL_DIR=/Applications ./scripts/install-dev-app.sh --no-opencodesign --verify --strict --verbose=2 /Applications/Minutes\ Dev.appScope
This branch is intentionally limited to macOS call detection and the bundled
mic_checkhelper. It does not include MLX, Sherpa ONNX, transcription backend, or dependency changes.