{"record":{"id":"0a7c25a8d9b49f72","repo":"pbakaus/impeccable","slug":"impeccable-voice-recognition-error","errorCode":null,"errorMessage":"[impeccable.voice] recognition error:","messagePattern":"\\[impeccable\\.voice\\] recognition error:","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"skill/scripts/live-browser.js","lineNumber":10626,"sourceCode":"\n    rec.onstart = () => {\n      syncVoiceUi(true);\n    };\n\n    rec.onresult = (event) => {\n      if (!voiceCtx?.input) return;\n      let transcript = '';\n      for (let i = 0; i < event.results.length; i++) {\n        transcript += event.results[i][0]?.transcript || '';\n      }\n      voiceCtx.input.value = (voiceInterimBase + transcript).trim();\n      if (voiceCtx.mode === 'steer') syncPageChatVisual();\n      else syncConfigureInputChrome();\n    };\n\n    rec.onerror = (event) => {\n      const code = event.error || 'unknown';\n      console.warn('[impeccable.voice] recognition error:', code);\n      const message = steerVoiceErrorMessage(code);\n      stopVoice({ suppressSubmit: true, message: message || undefined });\n    };\n\n    rec.onend = () => {\n      if (voiceRecognition !== rec) return;\n      finishVoiceSession();\n    };\n\n    voiceRecognition = rec;\n    try {\n      rec.start();\n    } catch (err) {\n      console.warn('[impeccable.voice] start failed:', err);\n      stopVoice({\n        suppressSubmit: true,\n        message: err?.message?.includes('already started')\n          ? 'Voice input already running'","sourceCodeStart":10608,"sourceCodeEnd":10644,"githubUrl":"https://github.com/pbakaus/impeccable/blob/2bc2879276c1f321a53c4ca99d3371e411329b52/skill/scripts/live-browser.js#L10608-L10644","documentation":"The Web Speech API SpeechRecognition instance used by impeccable's voice mode fired its onerror handler. The raw browser error code (e.g. 'not-allowed', 'no-speech', 'network', 'audio-capture', 'aborted', 'service-not-allowed') is logged, then the recognition is stopped with a user-facing message derived by steerVoiceErrorMessage. It indicates the voice recognition session ended due to a browser/speech-service error rather than a transcript.","triggerScenarios":"rec.onerror fires during a live-mode voice (steer/configure) session — microphone permission denied ('not-allowed'/'service-not-allowed'), no speech detected within the timeout ('no-speech'), speech-service network failure ('network'), no microphone ('audio-capture'), or recognition aborted.","commonSituations":"Browser lacks microphone permission or the site was blocked; using a browser without a supported speech backend (Firefox); offline or corporate proxy blocking the speech service; mic in use by another app; user stayed silent past the no-speech timeout.","solutions":["Grant the site microphone permission (padlock icon > Microphone > Allow) and retry voice mode.","Use Chrome or Edge — Web Speech recognition needs a supporting engine.","Check network access to the browser's speech service (proxies/VPN can block it; 'network' code).","Verify a microphone is connected and not exclusively captured by another application ('audio-capture').","For transient 'no-speech' or 'aborted', simply restart the voice session and speak promptly."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// before starting recognition, check support and permission\nif (!('webkitSpeechRecognition' in window) && !('SpeechRecognition' in window)) {\n  showToast('Voice recognition is not supported in this browser');\n}\nconst perms = await navigator.permissions.query({ name: 'microphone' }).catch(() => null);\nif (perms && perms.state === 'denied') showToast('Microphone permission is blocked');","typeGuard":"function isSpeechErrorEvent(event) {\n  return event && typeof event.error === 'string';\n}","tryCatchPattern":"rec.onerror = (event) => {\n  const code = isSpeechErrorEvent(event) ? event.error : 'unknown';\n  console.warn('[impeccable.voice] recognition error:', code);\n  const message = steerVoiceErrorMessage(code);\n  stopVoice({ suppressSubmit: true, message: message || undefined }); // degrade gracefully, never throw\n};","preventionTips":["Grant microphone access to the dev origin before using voice mode.","Use Chrome/Edge; Web Speech recognition is unreliable or absent in Firefox.","Ensure the speech service is reachable (VPN/proxy can cause 'network' errors).","Close other apps holding an exclusive capture on the microphone.","Retry the session on transient codes like 'no-speech' or 'aborted'."],"tags":["voice","websites-speech-api","microphone","browser","permissions"],"backgroundTag":"microphone-permission-denied","analyzedSha":"2bc2879276c1f321a53c4ca99d3371e411329b52","analyzedAt":"2026-09-08T04:51:14.109Z","contentChangedAt":"2026-09-08T04:51:14.109Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}