ci / bun-nix (pull_request) Successful in 1m42s
ci / web (pull_request) Successful in 3m41s
ci / rust-arm64 (pull_request) Successful in 6m2s
android / android (pull_request) Successful in 7m12s
ci / docs-site (pull_request) Successful in 7m45s
ci / rust (pull_request) Successful in 23m56s
A bare-spawn gamescope session is its own headless compositor, so it was the one Linux route that never consulted effective_topology(): on a KDE desktop box the physical panel kept showing the idle desktop for the whole stream while the policy said exclusive. The KWin route's mechanism (disable the physicals) is closed on this route — KWin refuses a configuration with zero enabled outputs and no output on that desktop is ours to leave enabled — so the honest translation is DPMS: the desktop stays exactly where it is, the panels go dark, local input wakes them, and stream input never does (it enters gamescope's own EIS socket, not KWin's libinput). New kwin_dpms module drives the vendored org_kde_kwin_dpms protocol in-process over the desktop's own Wayland (the kwin_output_mgmt stack and rationale), with a kscreen-doctor --dpms fallback on kwin.rs's shared verdict/budget. The darken is refcounted host-wide rather than floated through the registry's per-group restore, because every gamescope spawn is its own group — the float alone would re-light the panel when the first of two concurrent spawns ends. Each exclusive spawn registers the release as its per-display topology restore, so the registry still times every release (§6.1) and the last one out re-lights only what the first darken actually turned off. Crash-safe by construction: DPMS is non-persistent, so a dead host leaves nothing to journal — the panel re-lights on the next local input. Managed and Attach are deliberately untouched: managed's takeover already stopped the desktop, and attach may be mirroring a gamescope that is itself driving the physical panel.