startScan

fun startScan(): Flow<ScannerState>

Cancels any in-progress scan, then starts a new one.

Returns a Flow backed by a MutableSharedFlow — multiple collectors are safe, and late subscribers receive the most recent state immediately via replay.

Emission sequence: Scanning(0f) → Scanning(k/n) … → Scanning(1f) → Complete(result) or ScannerState.Error if no semantics nodes are available.