Skip to content

fix: stabilize microphone handoff and dock changes (v1.3.2) - #14

Merged
ygivenx merged 2 commits into
mainfrom
codex/microphone-crash-v1.3.2
Oct 7, 2026
Merged

ygivenx merged 2 commits into
mainfrom
codex/microphone-crash-v1.3.2

Conversation

@ygivenx

@ygivenx ygivenx commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

FreeWispr can crash or retain inconsistent recording/transcription state when Teams changes the default microphone or a dock carrying the Yeti and monitors disconnects. This consolidates the relevant fixes from #3 and #13 on top of the configuration-change recovery already merged in #6, and prepares version 1.3.2.

Changes

  • Open a fresh microphone engine for each recording, use its live format, retry startup once, and convert native Objective-C audio exceptions into recoverable errors.
  • Restore the busy-microphone guard: while another app uses the default input, show a temporary busy message. Retry after that app releases the mic.
  • Deliver route-change callbacks on the main queue, ignore previous sessions, discard interrupted audio, and reset the recording UI.
  • Isolate recorder, transcriber, and indicator state to the main actor; reserve the pipeline before scheduling transcription and prevent overlapping inference/model switches.
  • Clean up configuration observers and hotkey event taps; reposition the indicator after screen changes; start setup from the app lifecycle.
  • Feed each buffer to the converter once. Add hardware-free regression tests, a native exception fixture, and a PR unit-test workflow with coverage.
  • Notarize/staple/verify the DMG as well as the app in both release workflows, run unit tests before packaging, and assess Gatekeeper only after notarization in the local script.
  • Validate stable release tags against VERSION and Info.plist; correct the arm64-only download requirements and add a release/distribution guide.
  • Bump VERSION and both bundle version fields to 1.3.2 and update the changelog/architecture notes. Correct the existing model-validation test fixture to use the little-endian GGML header already required by production code.

Validation

  • Debug build and optimized arm64 release build passed.
  • GitHub unit suite with coverage passed: 53 tests, zero failures, including all eight microphone regression cases (repeated failure recovery, busy-mic recovery, interruption/stale-session handling, format changes, late callbacks, and native exception recovery).
  • All eight microphone cases also passed locally using a standalone runner; full local XCTest execution is unavailable because the installed command-line tools lack XCTest.

Release integration audit

  • Downloaded v1.3.1: SHA-256 matched GitHub, app signature validated, Gatekeeper accepted the app as Notarized Developer ID, and the artifact's signing certificate expires February 1, 2027.
  • The v1.3.1 DMG itself was rejected as Unnotarized Developer ID despite a valid signature. The new DMG notarization/assessment steps must be proven with a signed testing release before stable publication.
  • All eight Hugging Face model/encoder URLs returned HTTP 200 for HEAD requests.
  • Workflow YAML, every workflow shell block, and the local packaging script passed syntax checks; version validation accepted v1.3.2 and rejected mismatched/prerelease tags.
  • Required signing/notarization secret names are configured. Gumroad product/content/customer-flow verification awaits the product URL; no Gumroad repository integration was found.

Hardware verification

  1. With the Yeti connected through the dock and active in Teams, trigger FreeWispr: it should show a busy message and remain running.
  2. End the call and retry dictation after Teams releases the microphone.
  3. Disconnect/reconnect the dock during dictation: the recording should stop, the indicator should clear, and incomplete text should not be pasted.
  4. Repeat hotkey presses and model-selection attempts while transcription is active.

The exact Teams/Yeti/dock setup has not been reproduced locally. Related: #3, #6, #13; the earlier PRs remain open for separate review.

@ygivenx
ygivenx merged commit 05131d8 into main Oct 7, 2026
1 check passed
@ygivenx
ygivenx deleted the codex/microphone-crash-v1.3.2 branch October 7, 2026 05:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant