PreviewError subclasses carry a concise short label for UI, a full log message, backend name, and metadata fields (OnlyOffice code/status/url, backend stage, timeout seconds, cancel reason). Exceptions travel across the worker pool wire pickled in the binary response payload (ok=False) and are re-raised with their original type on the caller side. Combined pipelines such as pdf+pyvips tag the failing stage.