Date: 2026-08-09 Verdict: Two defects found, both fixed and reverified. The layout is otherwise sound.
The first pass since the interface was rebuilt. It was carried as debt: the redesign had changed every line of interface code without a single window ever having been displayed.
About this edition. The original record of this pass is an internal working document, in French. This is a full English edition prepared for publication, faithful to it and adding nothing. The original is archived unchanged.
This pass was requested as the session on a real Windows machine that the task list had been waiting for. It is not one. The environment is a sandbox again, and that has to be said before the results are read rather than buried at the end.
| Account | the sandbox utility account |
| Machine model | a virtual machine |
| Display adapter | a remote display adapter |
| Display | 2560 x 1407 at 32 Hz, one mode, one screen |
| Scaling | 96 DPI only |
So the five items the task list holds open remain untested. Refresh rate preserved across a real change, a genuine driver rejection, how long the interface freezes during a real switch, rendering at 125 and 150 percent, and restoring native on a display that actually moved. None of the five is closed by this report. They still need real hardware, which report 06 eventually provided.
What this pass could do, and did: display the windows, drive them with real input, measure the layout, and exercise the paths the virtual driver happens to make reachable.
| Check | Result |
|---|---|
| The interface displays | Pass. 426 pixels wide with the frame. Nothing clipped. |
| Tile proportions | Pass. No collision between the glyph and the resolution label. |
| The identity glyph | Pass. A 16:9 tile fills its outline, a 4:3 tile leaves the gap visible. Readable at a glance. |
| Wordmark alignment | Pass. Centred on the first draw. It sets the window width, not the tile grid. |
| The heavy display font | Pass. Resolves, and the wordmark renders as intended. |
| FAQ scrollbar | Pass. Rendered, dark, consistent. |
| FAQ pack order | Pass. Scrollbar and Close both mapped, wheel works, last entry reachable. |
| Dark title bar | Fail, defect D9. Light on both windows. Fixed. |
| Status strip reserved height | Fail, defect D10. Fits at 100 percent with one pixel to spare, overflows at 125 and 150. Fixed. |
| Read back after a change | Pass, and conclusively. The driver accepted and did nothing, and the app said so. |
| Input rule | Pass, nine cases of nine. |
| Restore native | Pass. Green message, mode read back correctly. |
| Invariants | Pass. Five imports, no network, process or file access. |
Symptom. Both windows displayed with a white title bar over fully dark content.
What the task list assumed. That it might need reapplying after the window is shown, or hiding and reshowing the window to force a redraw.
The conclusion was right. The reason was not. This is not a redraw problem.
The real cause, measured. The toolkit creates a temporary native window when the app asks a hidden window for its handle, then destroys it and creates a different one when the window is actually shown. The handle captured during initialisation is therefore already dead by the time anybody sees the window, and the attribute went with it.
A dedicated probe, reproducing the app's initialisation order exactly:
handle while hidden : one value
set the dark attribute : succeeded
read it back : applied
handle after showing : a different value, it changed
read the attribute back : invalid handle error
set on the live handle : succeeded
read on the live handle : applied
The error returned is the one Windows gives for a handle that no longer refers to anything. The window the attribute had been given to does not exist any more.
A control test first. The same call made from an outside process against the app's already visible window returns success and darkens the bar immediately. The API works in this environment, so this was never a sandbox limitation. Establishing that before blaming the code is what made the diagnosis possible.
The fix. The call before the window is shown is kept, for the Windows builds where the handle does survive and the bar is therefore dark from the first frame. A second call was added once the window is mapped, against a freshly resolved handle. In this environment the first does nothing and the second does the work.
Verified. Relaunched from source. Dark title bar on the main window and on the FAQ, produced by the app itself with no outside intervention.
Symptom. Not visible here, because the sandbox offers 96 DPI only. Found by measuring, which is what the task list had explicitly asked for.
The strip is a fixed height frame of 52 scaled pixels that does not resize to its content, and the label inside wraps at 288.
The measurement. Height the label needs for the longest message the app can produce, at three scales:
| Scale | Box reserved | Height needed | Verdict |
|---|---|---|---|
| 100 percent | 52 px | 51 px | fits, one pixel spare |
| 125 percent | 65 px | 66 px | clipped |
| 150 percent | 78 px | 81 px | clipped |
The cause is not a scaling error. At a wrap width of 288 the message runs to four lines, and line height climbs in font sized steps while the box climbs continuously. The ratio degrades at every step.
The message in question is the one that tells the user their resolution is not registered with their graphics driver, and to go and add it. It is the most useful message the application produces, because it is the only one that tells a user how to fix their own problem, and it was the one being cut.
The fix. The wrap width goes from 288 to 320. The usable width inside the window is 378, set by the wordmark rather than by the tile grid, so the room exists.
The same message then falls to three lines:
| Scale | Box reserved | Height needed | Margin |
|---|---|---|---|
| 100 percent | 52 px | 36 px | 16 px |
| 125 percent | 65 px | 46 px | 19 px |
| 150 percent | 78 px | 56 px | 22 px |
A full sweep across all thirteen messages the app can produce, at all three scales, finds none that overflow. The reserved height was not touched, so the geometry at 100 percent is unchanged.
The limit of this verification. The figures at 125 and 150 percent come from forcing the toolkit's scaling factor and asking the widget how tall it wants to be. That is a measurement, not a capture of a display genuinely set to those scales. The task list item stays open. Report 06 later closed it on real displays, and found the fix holds.
The virtual driver accepts everything and applies nothing. That is exactly the condition the read back check exists to catch, and this time it was exercised by a real click on a real tile rather than by calling the function directly.
Clicking the 1920 x 1080 tile, with the display at 2560 x 1407:
The driver accepted 1920 x 1080 but the display is still 2560 x 1407.
in the error colour. The driver had returned success.
An independent check through a separate system interface, before and after the click, without going through the app's code at all:
before : 2560 x 1407 at 32 Hz
after : 2560 x 1407 at 32 Hz
Two independent sources agree. The app did not lie. This confirms the original defect a second time, now through the complete interface rather than an isolated call.
The refresh rate reading is correct too. The app displays 32 Hz and the independent check reports 32. It did not fall back to 60. That does not replace testing preservation across an effective change, which remains impossible here.
Direct verification of the pattern used by the custom resolution handler.
| Input | Expected | Got |
|---|---|---|
1440x1080 |
accepted | accepted |
1440 1080 |
accepted | accepted |
1440,1080 |
accepted | accepted |
1440X1080 |
accepted | accepted |
| Full width digits | rejected | rejected |
| Arabic-Indic digits | rejected | rejected |
| Extended Arabic-Indic digits | rejected | rejected |
1440x |
rejected | rejected |
999999x1080 |
rejected | rejected |
Nine of nine. And the control that justifies the rule: with the Unicode aware shorthand in place of the ASCII pattern, all three non ASCII forms are accepted.
After both fixes, against the source:
Neither fix touches the resolution setting function, the display mode structure, the field flags, or the pack order.
Beyond the seven standing limitations of the sandbox: