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 Complete(emptyResult) if there are no enabled rules or no nodes.