Skip to content

v0.9.10

Choose a tag to compare

@NikitaHerndlhofer NikitaHerndlhofer released this 25 May 22:51
· 7 commits to main since this release

v0.9.10: broaden stop-popup trigger (HIGH → MEDIUM debounce)

v0.9.9's per-process audio listener fix relied on kAudioProcessProperty* populating the mic-owners list so we could subtract our own recorder PID. In production on macOS Tahoe 26 some users observe owners=[] while mic_in_use=true, which puts the detector in degraded mode — raw mic_in_use is held true for the duration of the recording, so the HIGH → NONE edge the stop popup logic depended on never commits.

v0.9.10 broadens the trigger. While recording, the stop banner now fires on:

  • any edge to NONE (unchanged) — clean mic release in non-degraded mode
  • HIGH → MEDIUM after a 30 s grace window — covers the degraded-owners case where the mic side can't be the trigger (closing a Meet tab in Comet while we still hold the mic drops browser_url match, committing the HIGH → MEDIUM edge)

The grace window absorbs brief tab/app switches during a real meeting; recovery to HIGH inside the window cancels. The banner defaults to keep on dismiss / timeout, so false positives are recoverable. The pending timer is cancelled on manual stop, popup-driven save, and daemon shutdown.

Test coverage

  • HIGH → MEDIUM with active recording fires the popup after the grace window
  • HIGH → MEDIUM → HIGH inside the window cancels (no popup)
  • HIGH → MEDIUM with no active recording is a no-op
  • HIGH → MEDIUM → NONE: the NONE edge supersedes the timer (single popup, no double-fire)
  • record_stop cancels a pending timer

419 tests pass / 0 fail. Typecheck clean. Build clean.

Full Changelog: v0.9.9...v0.9.10