[Bug]: Desktop becomes unresponsive after activating microphone on macOS arm64 (0.1.9)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 45/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- electron, typescript
- Domain
- audio-video-rtc, desktop
Research direction
Start in apps/desktop and inspect the voice input path, especially the installed bundle’s useEnvironmentSpeechInput-C8qzzg6U.js, which sequences backend preparation, microphone access, and AudioWorklet setup. Try to identify which startup stage can remain pending and how it can be reproduced; the report does not establish a root cause or name source files or tests. Done means isolating the freeze and restoring responsiveness or showing an actionable error, with a reproducible check.
Written by the indexing model from the issue text.
Description
T3 desktop becomes unresponsive after activating microphone (macOS arm64, 0.1.9)
Area
apps/desktop (voice input)
Steps to reproduce (user-reported; not independently reproduced)
- Use the T3 Code desktop app on an Apple Silicon iMac.
- Activate microphone/voice input.
- The user reports that T3 becomes unresponsive immediately afterwards.
This incident was reported on 2026-11-12 around 07:51 UTC. The exact click time, selected audio device, voice destination/provider, duration, and whether the entire window or only the voice/composer controls stopped responding are not established. No deliberate reproduction or microphone recording was performed during diagnosis.
Expected behavior
Voice input starts, or shows an actionable error; the app remains responsive and the operation can be cancelled.
Actual behavior / impact
User-reported freeze after enabling the microphone, interrupting interaction. Root cause is not established.
Version and environment
- T3 Code (Beta) 0.1.9, packaged commit 24e77473ecf4.
- macOS 15.3.1 (24D70), arm64.
- Bundled Electron framework CFBundleVersion: 44.10.1.
- Main and renderer processes had been running since approximately 23:03 local time the previous evening, about 9 hours 49 minutes at sampling.
- Approximately 44 GiB free on the data volume at diagnosis.
Read-only observations
- Main, renderer and backend processes were still alive. Server traces continued to be written. This does not prove that the UI or voice operation was responsive.
- No T3/Electron-named crash or hang report was found in the user or system DiagnosticReports directories.
- Two-second samples of the existing main and renderer processes, taken approximately 07:52:44 and 07:52:47 UTC, mainly show event-loop waits rather than a CPU-bound loop. They do not establish a deadlock or exclude an unresolved asynchronous operation.
- Sanitized main-thread stack excerpt:
NSApplication run -> CFRunLoopRunSpecific -> __CFRunLoopServiceMachPort -> mach_msg -> mach_msg2_trap. - Renderer main thread: 1482 of 1483 sampled paths end in
mach_msg2_trap; stripped Electron symbols limit interpretation. - Desktop trace window 07:45–07:52 UTC contains 100 spans and zero Failure exits. Server failures exist, but no causal link to voice was established. No voice-specific runtime error was found in the inspected trace records; there is no confirmed error message to quote.
Voice path inspected in the installed bundle
useEnvironmentSpeechInput-C8qzzg6U.js prepares the transcription backend, then uses navigator.mediaDevices.getUserMedia, AudioContext, audioWorklet.addModule, and AudioWorkletNode("t3-pcm-capture") for capture. The startup path sets phase preparing before awaiting preparation/permission/capture.
Hypothesis only: an unresolved startup promise (backend preparation, media access, or AudioWorklet initialization) could leave voice controls pending without a busy native main thread. In the inspected getUserMedia wrapper, cancellation is wired through AbortSignal, but no explicit local timeout is visible. This is a suggested investigation point, not a demonstrated cause or a proposed confirmed fix. The selected backend and the precise stalled stage remain unknown.
Previous report / duplicate search
The account's confirmed previous report in this repository is #33235 (CLI delegated subagents), which is unrelated. Searches of authored/involved issues and microphone/freeze/dictation-hang issues did not identify a matching earlier microphone-freeze report. The user recalls an earlier T3 report; its identity could not be established, so this is not asserted to be a regression of a particular issue.
Raw logs, process sample files, conversation content, audio, user filesystem paths, credentials and device identifiers are intentionally not attached. No app restart/termination, permission change or configuration change was performed.
- Dominant language
- TypeScript
- Stars
- 24.8k
- Forks
- 6.4k
- Avg merge
- 4h 16m
- Merged PRs (30d)
- 352
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from pingdotgg/t3code
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
All issues in pingdotgg/t3code
Similar issues
-
Autocomplete still accepts an option after becoming disabledPossibly taken @Xapollon430 claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
reduxjs/react-redux#2416 · 1 comment ·