effects
The optional one-shot effect stream (non-nav side effects; snackbar/toast/haptic). If absent, emptyFlow(). A route-explicit effect handler consumes it via ObserveEffects only while STARTED → there is NO observer on a covered or STOPPED entry.
Backing contract (losslessness): a buffered source is required so that an effect emitted while there is no observer is NOT LOST. RECOMMENDED: GezginEffects (Channel(UNLIMITED) .receiveAsFlow()). The MutableSharedFlow(replay = 0) + tryEmit pattern SILENTLY drops an effect while there is no observer (see the rationale in the GezginEffects KDoc). The returned Flow must also be a stable instance (a single val — NOT a get() that calls receiveAsFlow() on every access), otherwise ObserveEffects's LaunchedEffect key changes on every recomposition and restarts the collector.