## Evidence

**Scope beyond the PR title:** L09 also corrects the display used after quitting a fullscreen session entered from an app-restored maximized window. Fullscreen itself is not restored. This behavior extends beyond the title “a maximized window reopens on the display it was last used on.” The minimized-quit rows also exercise preserving the maximized flag, not only display coordinates. **Exit limitation:** L10 remains unchanged: unmaximizing returns to display 1 on both revisions, so the matrix’s display-2 normal-mode expectation is not met. **L03s limitation:** Linux replaces straddling normal bounds on WM maximize, so the new maximized-straddling condition remains unverified here.

Captured **10/12 matrix rows**, including all eight affected Linux rows and both Linux controls. P01 (macOS) and P02 (Windows) remain unverified; reasons below. Before [689763a603][before-commit]; after [6fd7ae506e][after-commit]. All after runs are fresh at the requested head. No application source was changed; persisted settings were never seeded or patched by the driver.

**Rendering environment for every still and recording:** fs-29, Linux x86_64, real built Electron 44.9.3 desktop, Xorg dummy driver on `:47`, openbox; DPR 1; no font scaling. ImageMagick `import -window root` captures the full **3840×1080** root. ffmpeg x11grab records the same full root at 15 fps (H.264, CRF 20, cursor excluded). Display 1 is 1920×1080 at (0,0), primary; display 2 is 1920×1080 at (1920,0), except L04 where display 2 is 1280×720 at (1920,0), with the root kept 3840×1080. Black space is the unused root/display area. Each run has a fresh synthetic T3 home/database and a separate D-Bus session and unlocked keyring. No real server data is seeded.

**Still settling and diffs:** after the final relaunch, two full-root screenshots 500 ms apart must be pixel-identical. The uploaded still is that identical second frame. Every accepted run passed on its first pair. Diff0 = absolute RGB difference ×255, saturated, threshold **0/255**, so a one-level change is visible. DiffT8 = magenta where the maximum RGB channel difference is **>8/255**, black elsewhere. Diff comparisons use original full-resolution stills, before sheet resizing. All final stills, diffs and recording sheets were opened for visual review. Video zero follows the driver’s recording-start event by about 0.13 s; each run’s recording-timing.json preserves the offset estimated from ffmpeg’s input timestamp and the final event file mtime (millisecond event precision; 15 fps sampling). Action tables show video seek times and driver times; settings tables use driver times. Recording sheets are derived video frames, and accompany rather than replace the recordings.

**What else changed (all visible differences in the final still pairs):**

- **L01:** No visible difference; the full root is identical at zero threshold (0 changed pixels).
- **L02:** No visible difference; the full root is identical at zero threshold (0 changed pixels).
- **L03:** The maximized window moves from display 1 to display 2; the black unused display swaps sides. Content is identical at zero threshold after translating 1920 px.
- **L03s:** No visible difference in the final still pair; the full root is identical at zero threshold (0 changed pixels). The scripted normal window visibly straddles at (1800,150) on both sides before WM maximize.
- **L04:** No visible difference; the full-root final stills are identical at zero threshold (0 changed pixels). Both show the same maximized 1280×720 window on display 2 with black unused root space.
- **L09:** The final maximized window and black background exchange display sides. The window content is pixel-identical at zero threshold after a 1920 px translation. This also changes restart placement for the fullscreen path, beyond the title’s maximized-window wording.
- **L12:** Both windows are on display 2. After is maximized and 1 px wider/taller: its bottom/right black 1 px margins disappear; the titlebar maximize glyph changes to restore; caption buttons shift right; bottom sidebar icons shift down; centered prompt/button raster positions shift slightly with the size. No other differences were observed; 10,283 full-root pixels differ at zero threshold.
- **L12b:** Both windows are on display 2. After is maximized and 1 px wider/taller: its bottom/right black 1 px margins disappear; the titlebar maximize glyph changes to restore; caption buttons shift right; bottom sidebar icons shift down; centered prompt/button raster positions shift slightly with the size. No other differences were observed; 10,283 full-root pixels differ at zero threshold.
- **L13:** No visible difference; the full-root final stills are identical at zero threshold (0 changed pixels).
- **L10:** No visible difference; the full-root final stills are identical at zero threshold. Both show the same normal 1919×1079 window on display 1, with a 1 px black right/bottom edge.

**Drivers and exact state records:**

[capture.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/20ce791523f33298/capture.py)
[run.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8ab7aa25e67d859e/run.sh)
[capture-l12b.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7f4108788aa19aef/capture-l12b.py)
[run-l12b.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/04e23b15116b2b48/run-l12b.sh)
[capture-l03s.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/35d1ed99425712f3/capture-l03s.py)
[run-l03s.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/400d59dd75abbddd/run-l03s.sh)
[process-evidence.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/528bea8fe0fb9101/process-evidence.py)
[run-matrix.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a8e9c8637dea845d/run-matrix.py)
[sync-runs.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0cb8fd96d74c1fff/sync-runs.py)
[build-report.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c781e8b737b0ca04/build-report.py)
[upload-evidence.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/11c6b8467334cd2e/upload-evidence.py)
[archive-evidence.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fb0b3d499800e9e4/archive-evidence.py)
[audit-evidence.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3ae2702e428c6a1f/audit-evidence.py)
[restore-display.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/34dfc86d7d717a12/restore-display.py)
[environment.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b31fa98b16b63f7c/environment.json)
[evidence-audit.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0733868f49727bd1/evidence-audit.json)
[cleanup.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dbf162542d53a952/cleanup.json)
[dummy.conf](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3b73b151b2a51384/dummy.conf)
[matrix-v2.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/00da0275ac48fee0/matrix-v2.md)
[matrix-addendum.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/61b440d417e05e9c/matrix-addendum.md)
[synthetic-repro-records.zip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5483071f6051284f/synthetic-repro-records.zip)

Run one session at a time: `bash run.sh <checkout> <row> <before|after>`. L12b uses `bash run-l12b.sh <checkout> L12b <before|after>`. L03s uses `bash run-l03s.sh <checkout> L03s <before|after>`. Build each checkout at its linked SHA with `vp install`, `node apps/desktop/node_modules/electron/install.js`, then `vp run build:desktop`. The wrappers currently name the original scratch directory; update that literal `BASE` path if rebuilding elsewhere. `capture.py` is frozen for the original eight Linux rows; `capture-l12b.py` only adds the 250 ms minimized-maximized branch and is identical between the L12b before/after sessions. `capture-l03s.py` adds only the straddling-normal-bounds scenario and is identical on both sides. The archive includes every per-step desktop-settings snapshot, timing/geometry/WM-state event log, display layout, identical settle frames, and the scripts. There is no seed script: each side’s server creates its own fresh database.

One batch was interrupted during L01 after; its incomplete run is excluded. L01 after was rerun from a fresh home. All old-head after evidence was superseded and rerun at [6fd7ae506e](https://git.cafe/pingdotgg/t3code/commit/6fd7ae506e). Every subsequent session was launched individually; the same capture driver and scheduled timings were preserved.

### L01 — control: normal window moved to display 2 — D1 1920×1080+0+0; D2 1920×1080+1920+0; root 3840×1080; DPR 1; no font scaling

Pass: both sides reopen normal at (2300,150), 1100×780, on display 2.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.866 (1.001) | 0.861 (1.001) |
| dismiss-onboarding-close-button | 11.879 (12.014) | 11.880 (12.020) |
| move-normal-to-display2 | 13.865 (14.000) | 13.860 (14.000) |
| close-window | 19.865 (20.000) | 19.860 (20.000) |
| launch | 25.868 (26.003) | 25.862 (26.002) |
| final-still | 42.206 (42.341) | 42.248 (42.388) |
| close-window | 43.865 (44.000) | 43.860 (44.000) |

After process cleanup: the Electron PID was still alive two seconds after the close request; the shared driver sent SIGTERM at driver 22.016 s. The close request and subsequent relaunch retained their scheduled times.

| Before recording | After recording |
|---|---|
| [L01-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1d77c7c5ab597758/L01-before.mp4) | [L01-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ac7c16c4476c848c/L01-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L01-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9af12dc98fe3659e/L01-before-final.png) | ![L01-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0e696d18bb029dcc/L01-after-final.png) | ![L01-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d95616064ea6aa61/L01-diff0.png) | ![L01-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/da3cf22079ab2727/L01-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L01-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b90ab5a3b3ae6b23/L01-sheet.png)

**Recording review sheets (full root in every tile):**

![L01-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c92cf99057662300/L01-before-recording-sheet.png)
![L01-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/378ced58cefbd841/L01-after-recording-sheet.png)

Full-root pixels changed at zero: **0/4,147,200**; above 8/255: **0/4,147,200**; maximum channel delta: 0.

<details>
<summary>L01 persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.013 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.013 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.012 | 02-moved-normal | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 24.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 40.009 | 08-final-relaunch | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 47.001 | 09-final-quit | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.020 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.012 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.012 | 02-moved-normal | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 24.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 40.011 | 08-final-relaunch | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 47.001 | 09-final-quit | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |

</details>

### L02 — move normal to display 2, then maximize — D1 1920×1080+0+0; D2 1920×1080+1920+0; root 3840×1080; DPR 1; no font scaling

Pass: both sides reopen maximized at (1920,0), 1920×1080, on display 2. Linux reports maximized normal bounds on this WM-driven path.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.872 (1.003) | 0.874 (1.001) |
| dismiss-onboarding-close-button | 11.885 (12.016) | 11.887 (12.014) |
| move-normal-to-display2 | 13.869 (14.000) | 13.873 (14.000) |
| maximize-display2 | 19.869 (20.000) | 19.873 (20.000) |
| close-window | 25.869 (26.000) | 25.873 (26.000) |
| launch | 31.871 (32.002) | 31.874 (32.001) |
| final-still | 48.383 (48.514) | 48.371 (48.498) |
| close-window | 49.869 (50.000) | 49.873 (50.000) |

| Before recording | After recording |
|---|---|
| [L02-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b44349d64bc6acf7/L02-before.mp4) | [L02-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0589f35b51c82fc2/L02-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L02-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d43adc35cbc30030/L02-before-final.png) | ![L02-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a44484d8a1c1d29/L02-after-final.png) | ![L02-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/480b21f0cf241f30/L02-diff0.png) | ![L02-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a58d2fe38f3ed13e/L02-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L02-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2fa5de93d22a11cb/L02-sheet.png)

**Recording review sheets (full root in every tile):**

![L02-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0cab45ea72258747/L02-before-recording-sheet.png)
![L02-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a0ddfd1101ac385d/L02-after-recording-sheet.png)

Full-root pixels changed at zero: **0/4,147,200**; above 8/255: **0/4,147,200**; maximum channel delta: 0.

<details>
<summary>L02 persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.016 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.011 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.018 | 02-moved-normal | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 24.016 | 03-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 30.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 46.011 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 53.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.014 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.008 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.008 | 02-moved-normal | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 24.008 | 03-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 30.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 46.014 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 53.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

</details>

### L03 — app-restored maximized window moved to display 2 — D1 1920×1080+0+0; D2 1920×1080+1920+0; root 3840×1080; DPR 1; no font scaling

Pass: before reopens maximized on display 1; after reopens maximized on display 2.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.855 (1.002) | 0.870 (1.002) |
| dismiss-onboarding-close-button | 11.862 (12.009) | 11.881 (12.013) |
| maximize-display1 | 13.853 (14.000) | 13.868 (14.000) |
| close-window | 19.855 (20.002) | 19.868 (20.000) |
| launch | 26.134 (26.281) | 25.871 (26.003) |
| move-maximized-to-display2 | 41.853 (42.000) | 41.868 (42.000) |
| close-window | 47.853 (48.000) | 47.868 (48.000) |
| launch | 53.855 (54.002) | 53.874 (54.006) |
| final-still | 72.270 (72.417) | 72.335 (72.467) |
| close-window | 73.853 (74.000) | 73.868 (74.000) |

| Before recording | After recording |
|---|---|
| [L03-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ea561ca0d4c51e97/L03-before.mp4) | [L03-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ea811e2a0bead551/L03-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L03-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/194c41cf0b209329/L03-before-final.png) | ![L03-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7dd3b11cbba3c4b3/L03-after-final.png) | ![L03-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d0593a0d936de29f/L03-diff0.png) | ![L03-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5e82d9a82d9c0555/L03-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L03-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3825ea866ab69eb1/L03-sheet.png)

**Recording review sheets (full root in every tile):**

![L03-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aad84fae6eab3b0f/L03-before-recording-sheet.png)
![L03-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/19657173040645e8/L03-after-recording-sheet.png)

Full-root pixels changed at zero: **4,147,200/4,147,200**; above 8/255: **4,147,200/4,147,200**; maximum channel delta: 255.

The before display-1 window and after display-2 window are pixel-identical at zero threshold after a 1920 px translation. The full-root diffs highlight both display areas because the window and black background exchange places.

<details>
<summary>L03 persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.009 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.010 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.009 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.621 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.049 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.011 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 70.008 | 08-final-relaunch | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 77.001 | 09-final-quit | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.013 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.012 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.011 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.012 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.017 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 70.013 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 77.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

</details>

### L03s — normal bounds straddle the display boundary before maximize — D1 1920×1080+0+0; D2 1920×1080+1920+0; root 3840×1080; DPR 1; no font scaling

Linux-specific result: before saves (1800,150), 1100×780 while normal, then WM maximize replaces that with display-2 maximized bounds (1920,0), 1920×1080. It already reopens maximized on display 2 after the off-and-back transfer. The scripted straddling-normal fixture is captured, but Linux does not retain straddling getNormalBounds while maximized, so this cannot visually verify the new early-return branch’s native-platform case. After also reopens maximized on display 2, meeting its requested outcome. During the off-and-back sequence, after follows the temporary display-1 transfer in its saved bounds; before leaves the saved display-2 bounds unchanged. The final stills are identical.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.875 (1.009) | 0.873 (1.001) |
| dismiss-onboarding-close-button | 11.878 (12.012) | 11.882 (12.010) |
| move-normal-to-straddle-1800-150 | 13.866 (14.000) | 13.872 (14.000) |
| maximize-display2 | 19.866 (20.000) | 19.872 (20.000) |
| close-window | 25.866 (26.000) | 25.872 (26.000) |
| launch | 31.871 (32.005) | 31.874 (32.002) |
| move-app-maximized-to-display1 | 47.866 (48.000) | 47.872 (48.000) |
| move-app-maximized-back-to-display2 | 53.866 (54.000) | 53.872 (54.000) |
| close-window | 59.866 (60.000) | 59.872 (60.000) |
| launch | 65.868 (66.002) | 65.876 (66.004) |
| final-still | 84.313 (84.447) | 84.329 (84.457) |
| close-window | 85.866 (86.000) | 85.872 (86.000) |

| Before recording | After recording |
|---|---|
| [L03s-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e0ccec4b8e806fbb/L03s-before.mp4) | [L03s-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eb7b4707ceb3da24/L03s-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L03s-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e7635dccf1ef17d/L03s-before-final.png) | ![L03s-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cfc898bacdcc56a1/L03s-after-final.png) | ![L03s-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ca85dde3b6488ba1/L03s-diff0.png) | ![L03s-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/58e3897ad0b17682/L03s-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L03s-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f2376f515d1a6f0d/L03s-sheet.png)

**Recording review sheets (full root in every tile):**

![L03s-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8246755b3ba1e2ec/L03s-before-recording-sheet.png)
![L03s-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d6f1684f8c57bd52/L03s-after-recording-sheet.png)

Full-root pixels changed at zero: **0/4,147,200**; above 8/255: **0/4,147,200**; maximum channel delta: 0.

<details>
<summary>L03s persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.012 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.020 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.014 | 02-straddling-normal | `{"mainWindowBounds":{"x":1800,"y":150,"width":1100,"height":780}}` |
| 24.011 | 03-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 30.003 | 04-quit-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 45.009 | 05-app-restored | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.012 | 06-moved-display1 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 58.009 | 07-moved-back-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 64.001 | 08-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 82.011 | 09-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 89.001 | 10-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.009 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.008 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.015 | 02-straddling-normal | `{"mainWindowBounds":{"x":1800,"y":150,"width":1100,"height":780}}` |
| 24.012 | 03-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 30.001 | 04-quit-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 45.019 | 05-app-restored | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.013 | 06-moved-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 58.008 | 07-moved-back-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 64.001 | 08-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 82.010 | 09-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 89.001 | 10-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

</details>

### L04 — app-restored maximize moved to smaller display 2 — D1 1920×1080+0+0; D2 1280×720+1920+0; root 3840×1080; DPR 1; no font scaling

Actual Linux behavior: both sides reopen maximized on display 2 at (1920,0), 1280×720. The before window resizes on transfer and saves display-2 bounds, so the matrix’s predicted before failure does not reproduce on this smaller-display Openbox path.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.862 (1.001) | 0.881 (1.010) |
| dismiss-onboarding-close-button | 11.876 (12.015) | 11.880 (12.009) |
| maximize-display1 | 13.861 (14.000) | 13.871 (14.000) |
| close-window | 19.861 (20.000) | 19.871 (20.000) |
| launch | 25.862 (26.001) | 25.873 (26.002) |
| move-maximized-to-display2 | 41.861 (42.000) | 41.871 (42.000) |
| close-window | 47.861 (48.000) | 47.871 (48.000) |
| launch | 53.862 (54.001) | 53.872 (54.001) |
| final-still | 72.307 (72.446) | 72.247 (72.376) |
| close-window | 73.861 (74.000) | 73.871 (74.000) |

| Before recording | After recording |
|---|---|
| [L04-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/59139e631c2f22e5/L04-before.mp4) | [L04-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aaca77641edf629a/L04-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L04-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4c21f3fac34e0281/L04-before-final.png) | ![L04-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e0ae6a830ff05127/L04-after-final.png) | ![L04-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bca8d53966a9a7bc/L04-diff0.png) | ![L04-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ea175952e2bd951b/L04-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L04-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/164ba3a1946055ac/L04-sheet.png)

**Recording review sheets (full root in every tile):**

![L04-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/af29330a2bbecda8/L04-before-recording-sheet.png)
![L04-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/432ef62f872c5002/L04-after-recording-sheet.png)

Full-root pixels changed at zero: **0/4,147,200**; above 8/255: **0/4,147,200**; maximum channel delta: 0.

<details>
<summary>L04 persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.015 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.016 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.027 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.013 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 46.023 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1280,"height":720},"mainWindowMaximized":true}` |
| 52.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1280,"height":720},"mainWindowMaximized":true}` |
| 70.013 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1279,"height":719},"mainWindowMaximized":true}` |
| 77.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1279,"height":719},"mainWindowMaximized":true}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.009 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.011 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.010 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.017 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.013 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1280,"height":720},"mainWindowMaximized":true}` |
| 52.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1280,"height":720},"mainWindowMaximized":true}` |
| 70.009 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1279,"height":719},"mainWindowMaximized":true}` |
| 77.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1279,"height":719},"mainWindowMaximized":true}` |

</details>

### L09 — fullscreen on display 2 after app-restored maximize on display 1 — D1 1920×1080+0+0; D2 1920×1080+1920+0; root 3840×1080; DPR 1; no font scaling

Pass: before reopens maximized on display 1; after reopens maximized on display 2. Neither side restores fullscreen.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.873 (1.004) | 0.874 (1.001) |
| dismiss-onboarding-close-button | 11.882 (12.013) | 11.884 (12.011) |
| maximize-display1 | 13.869 (14.000) | 13.873 (14.000) |
| close-window | 19.869 (20.000) | 19.873 (20.000) |
| launch | 25.871 (26.002) | 25.874 (26.001) |
| move-maximized-to-display2 | 41.869 (42.000) | 41.873 (42.000) |
| fullscreen-display2 | 47.869 (48.000) | 47.873 (48.000) |
| close-window | 53.869 (54.000) | 53.873 (54.000) |
| launch | 59.871 (60.002) | 59.876 (60.003) |
| final-still | 78.312 (78.443) | 78.305 (78.432) |
| close-window | 79.869 (80.000) | 79.873 (80.000) |

| Before recording | After recording |
|---|---|
| [L09-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5921714253f3496c/L09-before.mp4) | [L09-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/546a62563d872d6e/L09-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L09-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e446c2b9181b3f9/L09-before-final.png) | ![L09-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/44c5c814dc30ae80/L09-after-final.png) | ![L09-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d011c2b7706c2091/L09-diff0.png) | ![L09-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c855f2fc1f098b00/L09-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L09-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e38bf754cad902b6/L09-sheet.png)

**Recording review sheets (full root in every tile):**

![L09-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/33129d2bfbd0af7a/L09-before-recording-sheet.png)
![L09-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aed54c6441aa3fd3/L09-after-recording-sheet.png)

Full-root pixels changed at zero: **4,147,200/4,147,200**; above 8/255: **4,147,200/4,147,200**; maximum channel delta: 255.

The before display-1 window and after display-2 window are pixel-identical at zero threshold after a 1920 px translation. The full-root diffs highlight both display areas because the window and black background exchange places.

<details>
<summary>L09 persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.013 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.010 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.010 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.016 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.008 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.009 | 06-fullscreen | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 58.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 76.009 | 08-final-relaunch | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 83.004 | 09-final-quit | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.011 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.009 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.009 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.008 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.009 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.009 | 06-fullscreen | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 58.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 76.010 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 83.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

</details>

### L12 — minimized quit six seconds after maximized transfer — D1 1920×1080+0+0; D2 1920×1080+1920+0; root 3840×1080; DPR 1; no font scaling

After meets the requested outcome: reopens maximized on display 2. Actual before behavior differs from the matrix prediction: Linux updates normal bounds on minimize and saves display 2, but loses mainWindowMaximized and reopens normal at (1920,0), 1919×1079. After preserves mainWindowMaximized:true and reopens maximized at (1920,0), 1920×1080. Move at 42 s; minimize at 48 s.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.871 (1.002) | 0.863 (1.002) |
| dismiss-onboarding-close-button | 11.882 (12.013) | 11.876 (12.015) |
| maximize-display1 | 13.869 (14.000) | 13.861 (14.000) |
| close-window | 19.879 (20.010) | 19.861 (20.000) |
| launch | 25.871 (26.002) | 25.863 (26.002) |
| move-maximized-to-display2 | 41.869 (42.000) | 41.861 (42.000) |
| minimize-after-6s | 47.869 (48.000) | 47.861 (48.000) |
| close-window | 53.869 (54.000) | 53.861 (54.000) |
| launch | 59.871 (60.002) | 59.862 (60.001) |
| final-still | 78.384 (78.515) | 78.357 (78.496) |
| close-window | 79.869 (80.000) | 79.861 (80.000) |

| Before recording | After recording |
|---|---|
| [L12-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ea13b48c01b82a41/L12-before.mp4) | [L12-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8cf9c2fa89e6e7ff/L12-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L12-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b311e79f3707631/L12-before-final.png) | ![L12-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/35ca59a1c1280272/L12-after-final.png) | ![L12-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/715bef6856d36576/L12-diff0.png) | ![L12-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3b9de0f524f2797e/L12-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L12-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/339301774664729a/L12-sheet.png)

**Recording review sheets (full root in every tile):**

![L12-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/764837df21df44d3/L12-before-recording-sheet.png)
![L12-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b035aa6b5ec476d4/L12-after-recording-sheet.png)

Full-root pixels changed at zero: **10,283/4,147,200**; above 8/255: **9,429/4,147,200**; maximum channel delta: 252.

<details>
<summary>L12 persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.013 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.019 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.012 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.011 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 46.009 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 52.026 | 06-minimized | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080}}` |
| 58.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080}}` |
| 76.015 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079}}` |
| 83.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079}}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.015 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.013 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.013 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.017 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.018 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.017 | 06-minimized | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 58.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 76.013 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 83.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

</details>

### L12b — maximized move to display 2, minimize 250 ms later, quit minimized — D1 1920×1080+0+0; D2 1920×1080+1920+0; root 3840×1080; DPR 1; no font scaling

After meets the requested outcome: reopens maximized on display 2. Actual before behavior differs from the matrix prediction: Linux refreshes normal bounds during minimize, saves display 2 but drops mainWindowMaximized, then reopens normal at (1920,0), 1919×1079. After retains mainWindowMaximized:true and reopens at (1920,0), 1920×1080. Both move-to-minimize intervals were 250 ms.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.870 (1.002) | 0.868 (1.002) |
| dismiss-onboarding-close-button | 11.878 (12.010) | 11.880 (12.014) |
| maximize-display1 | 13.868 (14.000) | 13.866 (14.000) |
| close-window | 19.868 (20.000) | 19.866 (20.000) |
| launch | 25.869 (26.001) | 25.868 (26.002) |
| move-maximized-to-display2 | 41.868 (42.000) | 41.866 (42.000) |
| minimize-250ms-after-maximized-move | 42.118 (42.250) | 42.116 (42.250) |
| close-window | 47.868 (48.000) | 47.866 (48.000) |
| launch | 53.869 (54.001) | 53.867 (54.001) |
| final-still | 72.324 (72.456) | 72.296 (72.430) |
| close-window | 73.868 (74.000) | 73.866 (74.000) |

| Before recording | After recording |
|---|---|
| [L12b-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1c833c77fb15f4eb/L12b-before.mp4) | [L12b-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e4c266166add55b7/L12b-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L12b-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c4c1a6052092e28f/L12b-before-final.png) | ![L12b-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/079d782465246e26/L12b-after-final.png) | ![L12b-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5b7f9958a8ea2155/L12b-diff0.png) | ![L12b-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d69a6eda8d58b580/L12b-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L12b-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ad4720de852f184c/L12b-sheet.png)

**Recording review sheets (full root in every tile):**

![L12b-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/962dbab5d6ae8bbb/L12b-before-recording-sheet.png)
![L12b-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8215e6ee514bd2c0/L12b-after-recording-sheet.png)

Full-root pixels changed at zero: **10,283/4,147,200**; above 8/255: **9,429/4,147,200**; maximum channel delta: 252.

<details>
<summary>L12b persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.010 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.010 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.009 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.008 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 42.109 | 05-moved-maximized-before-debounce | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.013 | 06-minimized | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080}}` |
| 52.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1920,"height":1080}}` |
| 70.010 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079}}` |
| 77.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079}}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.014 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.012 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.009 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.009 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 42.110 | 05-moved-maximized-before-debounce | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.019 | 06-minimized | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 70.022 | 08-final-relaunch | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 77.001 | 09-final-quit | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |

</details>

### L13 — normal move followed by minimize 250 ms later, quit minimized — D1 1920×1080+0+0; D2 1920×1080+1920+0; root 3840×1080; DPR 1; no font scaling

Pass: both sides reopen normal at (2300,150), 1100×780, on display 2. Both preserve the move when minimized before the 500 ms debounce.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.868 (1.001) | 0.881 (1.002) |
| dismiss-onboarding-close-button | 11.883 (12.016) | 11.888 (12.009) |
| move-normal-to-display2 | 13.868 (14.001) | 13.879 (14.000) |
| minimize-250ms-after-move | 14.117 (14.250) | 14.129 (14.250) |
| close-window | 19.867 (20.000) | 19.879 (20.000) |
| launch | 25.869 (26.002) | 25.881 (26.002) |
| final-still | 42.307 (42.440) | 42.301 (42.422) |
| close-window | 43.867 (44.000) | 43.879 (44.000) |

After process cleanup: the Electron PID was still alive two seconds after the close request; the shared driver sent SIGTERM at driver 46.006 s. The close request and subsequent relaunch retained their scheduled times.

| Before recording | After recording |
|---|---|
| [L13-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e4422878c0787eef/L13-before.mp4) | [L13-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f733c4e96314881f/L13-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L13-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ecad9f3cedb125d9/L13-before-final.png) | ![L13-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/60cf881123f3a8db/L13-after-final.png) | ![L13-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/831d56ef8ac3fe37/L13-diff0.png) | ![L13-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d8e4b378f376c4d2/L13-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L13-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f5d331f16837efc6/L13-sheet.png)

**Recording review sheets (full root in every tile):**

![L13-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d516f8e40564b0e6/L13-before-recording-sheet.png)
![L13-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/86f45aff1c24d59b/L13-after-recording-sheet.png)

Full-root pixels changed at zero: **0/4,147,200**; above 8/255: **0/4,147,200**; maximum channel delta: 0.

<details>
<summary>L13 persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.015 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.022 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 14.109 | 02-moved-normal-before-debounce | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.012 | 03-minimized | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 24.002 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 40.010 | 08-final-relaunch | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 47.001 | 09-final-quit | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.009 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.016 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 14.111 | 02-moved-normal-before-debounce | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.014 | 03-minimized | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 24.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 40.014 | 08-final-relaunch | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |
| 47.001 | 09-final-quit | `{"mainWindowBounds":{"x":2300,"y":150,"width":1100,"height":780}}` |

</details>

### L10 — exit control: unmaximize after the transfer — D1 1920×1080+0+0; D2 1920×1080+1920+0; root 3840×1080; DPR 1; no font scaling

Does not meet the matrix’s after expectation on Linux: Openbox unmaximizes to the original normal frame on display 1 on both revisions. Both save (0,0), 1919×1079 with mainWindowMaximized absent, and both reopen normal there. This is an unchanged observed limitation, not a new regression and not evidence of normal-mode restoration on display 2.

**Scripted actions and timestamps (video position; driver-clock time in parentheses):**

| Action | Before video s (driver s) | After video s (driver s) |
|---|---:|---:|
| launch | 0.880 (1.001) | 0.872 (1.002) |
| dismiss-onboarding-close-button | 11.889 (12.010) | 11.891 (12.021) |
| maximize-display1 | 13.879 (14.000) | 13.870 (14.000) |
| close-window | 19.879 (20.000) | 19.870 (20.000) |
| launch | 25.880 (26.001) | 25.871 (26.001) |
| move-maximized-to-display2 | 41.879 (42.000) | 41.870 (42.000) |
| unmaximize-display2 | 47.879 (48.000) | 47.870 (48.000) |
| close-window | 53.879 (54.000) | 53.870 (54.000) |
| launch | 59.880 (60.001) | 59.872 (60.002) |
| final-still | 78.263 (78.384) | 78.243 (78.373) |
| close-window | 79.879 (80.000) | 79.870 (80.000) |

| Before recording | After recording |
|---|---|
| [L10-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fb96b8151762a9a1/L10-before.mp4) | [L10-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e2500465de5c5385/L10-after.mp4) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] |

| Before | After | Diff0 | DiffT8 |
|---|---|---|---|
| ![L10-before-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d32d5688e42cfca7/L10-before-final.png) | ![L10-after-final.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cbd9234403ca4683/L10-after-final.png) | ![L10-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5ec05ea393ecee4f/L10-diff0.png) | ![L10-diffT8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/169474da3392849e/L10-diffT8.png) |
| [689763a603][before-commit] | [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] | [689763a603][before-commit] → [6fd7ae506e][after-commit] |

![L10-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/435b314698cd7c45/L10-sheet.png)

**Recording review sheets (full root in every tile):**

![L10-before-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/210cba115d7cd75d/L10-before-recording-sheet.png)
![L10-after-recording-sheet.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/073bb905170a078e/L10-after-recording-sheet.png)

Full-root pixels changed at zero: **0/4,147,200**; above 8/255: **0/4,147,200**; maximum channel delta: 0.

<details>
<summary>L10 persisted desktop-settings.json after every step (verbatim JSON values)</summary>

**Before — [689763a603][before-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.009 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.011 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.012 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.009 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.013 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.008 | 06-unmaximized | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079}}` |
| 58.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079}}` |
| 76.012 | 08-final-relaunch | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079}}` |
| 83.001 | 09-final-quit | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079}}` |

**After — [6fd7ae506e][after-commit]**

| Time (s) | Step | desktop-settings.json |
|---:|---|---|
| 12.020 | 01-first-launch | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 13.023 | 01b-onboarding-dismissed | `{"mainWindowBounds":{"x":410,"y":150,"width":1100,"height":780}}` |
| 18.009 | 02-maximized-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 24.001 | 03-quit-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1920,"height":1080},"mainWindowMaximized":true}` |
| 39.014 | 04-app-restored-display1 | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 46.014 | 05-moved-maximized-display2 | `{"mainWindowBounds":{"x":1920,"y":0,"width":1919,"height":1079},"mainWindowMaximized":true}` |
| 52.011 | 06-unmaximized | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079}}` |
| 58.001 | 07-quit-before-final-relaunch | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079}}` |
| 76.015 | 08-final-relaunch | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079}}` |
| 83.000 | 09-final-quit | `{"mainWindowBounds":{"x":0,"y":0,"width":1919,"height":1079}}` |

</details>

### Unverified rows and conditions

| Row | Status | Reason |
|---|---|---|
| P01 — macOS reporter platform | **Unverified; no capture** | This VM runs Linux/X11; no macOS Electron host is available in this task. Linux evidence does not verify macOS maximized/minimized state semantics. |
| P02 — Windows restore / -32000 minimized | **Unverified; no capture** | This VM runs Linux/X11; no Windows Electron host is available in this task. Linux evidence cannot produce Windows minimized -32000 coordinates. |

**L03s condition limitation:** the normal window visibly straddles before maximize, but Linux/Openbox replaces the saved normal bounds when WM-maximized. The maximized-straddling normal-bounds condition itself remains **unverified on this platform**, despite complete captures of the requested scripted row.

### Cleanup

Every tracked Electron, openbox, keyring and recorder process has stopped. Display 2 is restored to 1920×1080 at (1920,0). The shared original Xorg exited independently; its replacement uses the identical configuration and remains available on :47. The before worktree has been removed; the lead’s after worktree remains clean at the requested head. See cleanup.json for the exact process and layout record.

### Friction

FRICTION: infra | One long batch ended with SIGTERM during L01 after; one L09 launch exceeded the 10 s window deadline during the concurrent rebuild. Both incomplete runs were excluded and rerun from fresh homes. | Run individual capture sessions with builds stopped.

FRICTION: brief | The after head moved during capture; all after evidence was rebuilt and rerun. | Freeze the evidence head before capture.

FRICTION: infra | The shared Xorg process exited cleanly between sessions at 06:43 UTC; the next run failed before recording. An identical-config replacement restored the two-output layout; subsequent control stills matched their before side at zero threshold. | Keep the shared capture display alive for the evidence window.


[before-commit]: https://git.cafe/pingdotgg/t3code/commit/689763a603
[after-commit]: https://git.cafe/pingdotgg/t3code/commit/6fd7ae506e

