On a hybrid box, picking a GPU in the web console whose vendor contradicts a
host.env PUNKTFUNK_ENCODER pin produced an unrecoverable session: the pin won
backend selection while the adapter followed the console, the wrong-vendor
encoder failed deterministically at submit, the reset ladder burned its 5
in-place rebuilds on it, and the client reconnected into the identical wall
forever (~10 s per cycle, no visible reason).
Three legs:
- windows_resolved_backend() now reconciles: a hardware pin whose vendor
contradicts the selected GPU is overridden by the adapter-derived backend
(capture + encode share one adapter, so honoring the pin can only fail);
open_video warns loudly when a pin loses. The reconciliation is a pure,
unit-tested table (resolve_windows_backend).
- the QSV wrong-adapter bind is typed TerminalEncoderError, and the stream
loop's reset ladder ends the session immediately on it instead of feeding a
deterministic config error 5 futile rebuilds.
- the un-pinned path was already correct (verified on-glass: NVIDIA preference
+ no pin = stable AV1 10-bit HDR on NVENC), so the override simply takes the
conflict case onto that path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>