Skip to content

feat: surface silent transcription failures as user-visible indicators - #27

Merged
AzimovS merged 4 commits into
mainfrom
feat/surface-transcription-errors
Apr 10, 2026
Merged

feat: surface silent transcription failures as user-visible indicators#27
AzimovS merged 4 commits into
mainfrom
feat/surface-transcription-errors

Conversation

@AzimovS

@AzimovS AzimovS commented Apr 10, 2026

Copy link
Copy Markdown
Owner

Summary

  • Emit error on first model-not-loaded instead of silently skipping all chunks — triggers the existing model selector modal so users can fix the issue
  • Wire transcription-warning event to toast — per-chunk Whisper/Parakeet failures now show a warning (sanitized to avoid leaking remote endpoint URLs)
  • Wire recording-shutdown-progress to UI — replaces static "Finalizing transcription..." with actual stage messages ("Stopping audio capture...", "Processing remaining chunks...", etc.)
  • Wire transcript-chunk-loss-detected to toast — warns users when chunks are lost during shutdown instead of silently showing "no transcripts available"

Context

Users reported: no live transcription, "Processing recording" hangs for minutes, then "No transcripts available for summary." Investigation found the Rust backend emits 5+ diagnostic events that had zero frontend listeners — all failures were completely silent.

Most likely root cause: worker.rs:237-241 silently skips every chunk when the model isn't loaded, incrementing the "completed" counter without producing any output.

Test plan

  • Start recording, speak normally, stop → works as before (no regressions)
  • Switch to an undownloaded model in settings, start recording → model selector modal appears with error message
  • Start recording, stop → shutdown overlay shows actual progress stages instead of static text
  • Verify transcription-warning toast appears on chunk failures (check DevTools console for listener setup)

Post-Deploy Monitoring & Validation

No additional operational monitoring required: changes only surface existing Rust events to the frontend UI. No new backend logic, no database changes, no external API calls.

🤖 Generated with Claude Code

AzimovS and others added 4 commits April 8, 2026 17:07
- Emit transcription-error on first model-not-loaded detection instead
  of silently skipping all chunks (most likely root cause of reported issue)
- Add 15s no-transcript timer that warns user if no speech is detected
- Wire existing but unlistened transcription-warning event to toast
- Wire recording-shutdown-progress to show actual stages instead of
  static "Finalizing transcription..." text
- Wire transcript-chunk-loss-detected to warn about incomplete transcripts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The other 4 changes already cover all real failure modes:
- Model not loaded → transcription-error event
- Chunk failures → transcription-warning toast
- Shutdown hang → progress stages
- Chunk loss → chunk-loss toast

The 15s timer would false-positive when users start recording
before a meeting begins or during natural silence.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
P1: Guard recording-shutdown-progress handler to only update status
while still in STOPPING or PROCESSING_TRANSCRIPTS. Late events from
slow model unloading can no longer yank status back from SAVING.
Uses a ref to track current status without stale closures.

P2: Sanitize transcription-warning toast to show generic message for
EngineFailed errors instead of raw reqwest output that could leak
remote endpoint URLs during screen sharing.

Also merges the two shutdown useEffects into one (simplicity review).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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