diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 9ae3ed27..34447de5 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -24,6 +24,38 @@ What does NOT go here: - Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending. - Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed. +## #407 — Windowed resolution offering starves on RDP/virtual displays (video-mode gating) + +**Status:** OPEN (Campaign CC gate round 1, 2026-08-16) +**Severity:** MEDIUM (windowed usability on remote/virtual displays) + +Found live during the CC gate over RDP: the Config Resolution dropdown +offered exactly two entries — `1920x1080` and the desktop's own +`2056x1290` — because the RDP virtual display's driver advertises only +those two video modes (measured via `EnumDisplaySettings`: the physical +2560x1440 monitor's mode list is not visible to the remote session at +all; the two secondary virtual displays expose only `800x600`). +`DisplayModeCatalog` (#391) honestly curates what the monitor +enumerates — the defect is the DESIGN conflation: the WINDOWED size +offering is gated on fullscreen-capable video modes, but a windowed +client needs no video mode — any size that fits the desktop is +displayable. On a physical monitor the conflation is invisible (rich +mode list); on RDP it collapses to nothing below 1920. + +Fix direction: split the offering by target state. The dropdown offers +(static modern ladder entries that fit the desktop) ∪ (curated hardware +modes), ascending; the windowed apply (a plain Size write) accepts any +offered entry ≤ desktop; the fullscreen apply keeps the hardware-catalog +validation + `GlfwDisplayModeSwitcher`'s monitor-mode-list hard guard +UNCHANGED (a fullscreen pick of a non-hardware mode refuses safely, +log-and-stay per #388 — the #392 apply-result seam is that family's +existing follow-up). #391's "an offered mode is by construction a +supported one" invariant narrows to the fullscreen half and must be +re-documented; register IA-22 (user-directed curation) gets the same +amendment. Immediate workaround (confirmed live): drag-resize the +windowed client — resize events rebuild the swapchain (#387) and the +retail UI rescales from its 800x600 authored canvas. + ## #406 — Launcher records a crashed client as `exited{code:0,reason:"graceful"}` **Status:** OPEN (Campaign CC gate round 1, 2026-08-16)