What problem does it solve? Kotlin coroutines offer multiple stream types (Flow, StateFlow, SharedFlow, Channel) with subtle semantic differences, and choosing or combining them incorrectly causes dropped events, leaked callbacks, swallowed cancellations, and race conditions. This Skill audits existing flow code and enforces correct patterns for stream selection, operator usage, error handling, and lifecycle-safe collection in Android and KMP projects. ## Core Features & Use Cases - Type Selection Guidance: Decision tables for choosing between cold Flow, StateFlow, SharedFlow, and Channel based on state retention, collector count, and event delivery guarantees. - Channel Audit & Migration: Detects deprecated BroadcastChannel and ConflatedBroadcastChannel usage and distinguishes legitimate single-consumer Channel use from broadcast misuse. - Pattern Enforcement: Covers callback bridging with callbackFlow and awaitClose, operator selection (flatMapLatest, combine, debounce), StateFlow encapsulation, and lifecycle-safe collection with collectAsStateWithLifecycle and repeatOnLifecycle. - Use Case: While refactoring a ViewModel, the Skill flags a publicly exposed MutableStateFlow, replaces a manual Job cancellation pattern with flatMapLatest, and converts a SharedFlow event stream to Channel(BUFFERED).receiveAsFlow() so navigation events are never dropped. ## Quick Start Review my ViewModel's StateFlow and event handling code and fix any violations of correct Kotlin Flow patterns.