async fn execute_switch(
app: &AppHandle,
db: &Arc<RusqliteService>,
repository_manager: &State<'_, RepositoryManagerWrapper>,
session_poller: &State<'_, SessionPollerWrapper>,
from: Option<&str>,
to: &str,
) -> Result<(), String>Expand description
Run a switch plan.
The ordering comes from crate::profiles::switch::plan rather than being
written out here, because the ordering is the invariant worth testing and an
end-to-end switch needs two real accounts on a real server to exercise.
One step is deliberately not executed here: BuildRepository. Repository
handles are created by the frontend (repository_create) because building
one needs the token and URL it already assembles at login, so the
profile-switched event is the signal to do it. What stays in Rust is the
part that matters — that the old handle is destroyed before the active user
flips, so nothing can write under the wrong id in between.
TRACES: UR-082 | DR-270