# RB-05 MAJOR: poll_inference treats IPC listener loss as session-fatal

**Severity:** MAJOR
**Path:** `src-tauri/src/commands/live.rs:721-813`
**Source:** [2026-04-22 code review](../code-review-2026-04-22.md)
**Labels:** release-blocker, major, ipc-lifecycle
**Status:** RESOLVED (2026-04-22)

## Resolution

`poll_inference` no longer propagates `result_channel.send(...)` with `?`.
Instead, live-result delivery is routed through a small helper that
tracks whether the frontend listener has already been lost:

- First send failure: mark the result listener as unavailable, log a
  warning, and best-effort send a `LiveStatusMessage::Warning`
  explaining that transcription will continue in the background until
  the user stops the session.
- Subsequent chunks: skip re-sending to the dead result channel and
  keep the worker running.

Crucially, this path is now separate from actual transcription failure:
inference errors still emit `LiveStatusMessage::Error` and stop the
session, while listener-loss just stops live preview delivery.

Regression test:

- `result_listener_loss_is_warned_once_and_not_treated_as_inference_failure`
  simulates a dead result channel, confirms the first processed chunk
  downgrades to a warning, and confirms a second chunk still processes
  successfully without a second warning.

## Problem

`result_channel.send(...)` propagates with `?`, so closing the listening frontend or reloading the webview terminates the whole live session — even when capture and inference are healthy. Tauri channel-lifecycle events are not transcription failures and should not kill the worker.

## Acceptance

- Channel-send errors log a warning and continue the session (if recoverable) or terminate gracefully (if the session was going to end anyway).
- The distinction between "transcription failed" and "no listener to report to" is explicit in the error handling.
- Regression test: simulate channel close mid-session, assert the worker keeps capturing and produces a valid WAV file.

## Fix scope

Medium. Isolated to `poll_inference` and its error handling; interacts with RB-04 (monolith refactor) since that restructures the same function family.

## Dependencies

- **Related:** RB-04.
