Main gained a single typed GatewayEventMap sourced from the tui_gateway emitters (test_gateway_event_contract), so the six display.* notifications this PR emits must be listed there or the contract test and the desktop typecheck both fail. The native Windows/macOS dispatch test (#109505) ran on a runner with no approver, where the approval gate blocks click/type before dispatch; it now stubs `_request_approval` exactly like the capture-fence tests.