A composable may be called at any time, skipped, or called every frame (How Recomposition Works), a bad home for anything that must run once or outlive the screen:
Lifetime. remember state dies with a configuration change; rememberSaveable survives it but is limited to Bundle-sized values. Configuration Changes measured this: after a rotation a remember counter restarted at 0. BookNest's cart would vanish the same way.
Work in flight. A load started in LaunchedEffect is cancelled when the composable leaves, including during a rotation, and starts again from scratch when the new activity composes.
Testing. Logic inside a composable can only be tested through the UI.
The fix splits the screen in two. A state holder owns the data and rules (what the cart holds, how search filters, when to load); the UI turns state into pixels and reports what the user did. Screen-level state belongs in a ViewModel, the Jetpack 234 class built to survive configuration changes and to own coroutines that outlive a composition.