scanOutcomes

Emits the outcome of every scan attempt that did not yield a usable fix — no candidates, a rejected outlier, a frame-quality skip, a stalled camera, and so on.

A discrete event stream: each outcome is a distinct fact about one scan, so none are conflated away. Note that a skipped tick — the movement-aware cadence gate deciding it is not yet worth scanning — emits nothing at all, so silence here is ambiguous between "holding off" and "stopped"; use scanStatuses to tell those apart.