The launcher previously began peer cancellation only after the frontend had
finished draining its pending invokes and the Tauri process emitted Exit. A
pending acknowledgement could therefore keep the close handler waiting while
the peer still owned the work needed to complete that acknowledgement.
Close admission and unrar cancellation now begin on the native main-window
CloseRequested event. A tracked application task signals the currently owned
peer runtime early, while the existing Exit handler still waits for all
admitted invokes, takes and joins the runtime, and drains background tasks.
An atomic latch keeps repeated close and exit notifications from scheduling
multiple shutdown requests, and a runtime that is being created remains owned
by its in-flight invoke until the final join boundary.
Test Plan:
- `just fmt` -- passed
- `just test` -- passed (796 Rust tests)
- `just frontend-test` -- passed (98 tests)
- `just clippy` -- passed
- `just build` -- passed
- `git diff --check` -- passed
- Native window-close timing was not available in the automated UI surface.