Operator observation: the recording is tied to Web Speech's own lifecycle (dictationRecorder.stop() is only called from Web Speech's own event handlers). If Web Speech gets confused mid-utterance and aborts or resets, the recording may stop with it — before the person finishes speaking. This means the audio itself could be truncated, not just missing a transcript. If true, "keep the audio" would only preserve a partial capture, not the full utterance.
This must be confirmed by code trace before the fix is scoped — does MediaRecorder actually stop when Web Speech aborts mid-recognition, or does it keep running independently until the session genuinely ends? The answer determines whether the fix is only "surface a Replay option on failure" or also "decouple the recorder's lifecycle from Web Speech's confusion-driven resets, so capture continues even when transcription stumbles."
When live dictation ends without a usable transcript (either failure sub-case), do not silently discard the recording or leave it running invisibly. Surface the failure to the Operator with a Replay option on the captured audio — the same in-memory-Blob playback mechanism as v0.4's pre-confirm Replay — so the Operator can listen and judge: was this meaningful speech the system couldn't transcribe, or genuinely nothing worth keeping. The Operator decides from there (e.g. discard, or manually type what was meant while keeping the audio as the original record).
If the second finding above is confirmed (capture truncates mid-speech), the fix must also ensure the full utterance is captured regardless of Web Speech's confusion — the recorder should not depend on Web Speech staying confident throughout.
No conflict. Directly required by Operator-authority: the system must surface what happened, not silently discard or hide it, and the Operator approves what happens next.
Any change to Web Speech's own recognition accuracy (out of this project's control). The two-button confirm design and post-confirm Replay (v0.3, unaffected).