Retry a dictation that failed
When a transcription fails, the clip you just recorded is kept in memory for five minutes. The mic turns into a retry arrow, and one tap sends the same clip again.
Why you would use it
The service was restarting, the tunnel dropped, or your login had expired. You said the words once; the retry sends the same recording rather than making you say them again.
How to use it
A failed transcription shows a toast:
<what failed> — tap the mic to retry.
The mic (
#mic) becomes a retry arrow, labelledRetry the transcription that failed.
Tap it on the tab you recorded in. The kept clip goes again. Nothing is recorded by that tap. On every other open tab the mic is dimmed and disabled, labelled
Dictating in another tab. If the recording tab was closed, the tab in front takes the retry and the words land there.If it fails again, the clip is kept again and the arrow stays.
Starting a new recording is not possible while a clip is kept — the tap sends the kept clip, and the other tabs' mics are disabled until it goes. To drop it, wait five minutes, or let a successful transcription clear it.
What you see
Messages that can reach the toast, each followed by — tap the mic to retry:
the voice service is not answering— the transcription service is down, unreachable, or took more than 60 seconds.the voice service refused the clip (400)and the service's own wording for 400, 413, 415 and 422.dictation accepts audio/webm, video/webm, audio/mp4, video/mp4, audio/x-m4a, audio/ogg, audio/wav, not <type>— the browser recorded a container the server does not take.the voice service answered without a transcript.
When the five minutes pass with no retry, the button goes back to the plain mic icon on its own.
An expired login is not a failed transcription: the sign-in card comes up instead, and the clip survives that too.
Options and settings
| Option | Default | What it changes |
|---|---|---|
RETRY_TTL_MS in public/voice.js |
300000 (5 minutes) |
How long a failed clip is offered for a retry. Not configurable |
REQUEST_TIMEOUT_MS in lib/voice.js |
60000 |
How long VCode waits on the transcription service before calling it unreachable |
UPLOAD_TIMEOUT_MS in public/net.js |
120000 |
How long the phone waits for VCode to return the text |
Limits and known gaps
- One clip is kept at a time. A new recording replaces it, and a successful transcription clears it.
- The clip is held in memory only. A page reload, a closed tab or a killed app loses it.
- There is no automatic retry and no outbox. Speech is not worth sending an hour
late, so
store.transcribe()is deliberately not an outbox item. - A refused microphone is not retryable this way: it is toasted once and no clip exists.
- The tap is still refused while the app is offline, with
offline — dictation needs the server.
Related
- dictate-a-message — the recording itself
- dictate-while-you-switch-tabs — the tab a held clip belongs to
- point-dictation-at-another-service — when every clip fails, check the URL
- errors-and-retry — the same idea for a turn that failed
- log-in-with-the-token — the sign-in card an expired session shows
- toasts — where the failure message appears