Skip to content

Surface terminal transcription failures instead of swallowing them - #34

Merged
pratikbodkhe merged 1 commit into
mainfrom
fix/terminal-transcription-errors
Jul 20, 2026
Merged

pratikbodkhe merged 1 commit into
mainfrom
fix/terminal-transcription-errors

Conversation

@pratikbodkhe

Copy link
Copy Markdown
Contributor

The client half of the prod transcription outage. app.getminutia.com returned 403 FEATURE_UNAVAILABLE from the transcription routes for weeks and the app never told anyone: segment registration treated it as a quiet no, the stop path converted any transcribe failure into a silent success, and startup recovery only ran on a sign-in transition and swallowed every error, so an orphaned capture retried invisibly forever.

  • One classified response seam (classify(status:body:)): 403 + FEATURE_UNAVAILABLE code is terminal and surfaced; bare 401 keeps the token-refresh path; 403 with an unparseable body is terminal rather than auth-retry, so a proxy-mangled response cannot degrade into ~1000 silent retries.
  • Stop path rethrows every transcribe failure into the error state with Retry and a host-named message; audio is never deleted on any failure path.
  • Mid-recording entitlement failure shows one banner per recording while capture and uploads continue.
  • Recovery runs on every launch after session restore, persists an attempt counter in the capture manifest (backward-compatible decode), notifies once per directory, and after five failed attempts notifies and stops sweeping, keeping the audio.

Tests 263 → 286. Two independent reviews (correctness, silent-failure hunt); all findings fixed and re-verified. Rebased over #33; full suite green post-rebase.

The cloud instance returned 403 FEATURE_UNAVAILABLE from the
transcription routes for weeks and the app never told anyone: segment
registration treated it as a quiet no, the stop path converted any
transcribe failure into a silent success, and startup recovery only ran
on a sign-in transition and swallowed every error, so an orphaned
capture retried invisibly forever.

Responses now flow through one classified seam: 403 with the
FEATURE_UNAVAILABLE code is terminal and surfaced (host-named stop
error, once-per-recording banner while capture continues, one recovery
notification per directory); bare 401 keeps the token-refresh path; a
403 with an unparseable body is terminal rather than an auth retry so a
proxy-mangled response cannot degrade into a thousand silent retries.
The stop path rethrows every transcribe failure into the error state
with Retry. Recovery runs on every launch after session restore,
persists an attempt counter in the capture manifest, and after five
failed attempts notifies once and stops sweeping, keeping the audio.
Audio is never deleted on any of these paths.

Tests 263 -> 286.
@pratikbodkhe
pratikbodkhe merged commit 0abaf8e into main Jul 20, 2026
2 checks passed
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