← Commit history

pup-user-foreground: OFF-SCREEN is the third way to break a taskbar click. When 'prove it is safe' fails, the fallback must still be a state the user can reach.

John Lauer ·3f1ca1cc87 ·2mo ago ·parent 0021d33
1 file changed +16
dev-skills/pup-user-foreground/SKILL.md+16
@@ -74,6 +74,22 @@ loaded gun pointed at the user's click.    The re-show restores the state we FOUND: `SW_SHOWMINNOACTIVE` for a window the user had    minimized, `SW_SHOWNOACTIVATE` otherwise. The old code always used the latter, so every nudge    silently un-minimized windows John had deliberately put away.+   **OFF-SCREEN is the third way to break a taskbar click, and it is the one that keeps coming back**+   (v2.0.258). Rule 1 has said "never off-screen" since v1.9.133, and the launch park still had FOUR+   paths that moved a window off-screen whenever z-bottom could not be PROVEN, each logging+   "self-heal will retry". That is a guaranteed permanent harm (the user can never open their window)+   traded for a possible transient one (it might briefly sit above their work) — backwards. Worse,+   the confirmation feeds the failure: `zConfirmedBelow` looks the hwnd up in ab's window enumeration+   and returns false when it is absent, and an off-screen window may not be enumerated at all, so+   once there it can never confirm its way out. John hit this live: an `ab ralph` window parked at+   -21845,-21845 behind a working taskbar button. All four paths now place ON-SCREEN at best-effort+   bottom, and `moveOffScreen()` is deleted — do not reintroduce a helper whose job is moving the+   user's window where they cannot click it. **When "prove it is safe" fails, the fallback must still+   be a state the user can reach.**+   The sweep covers all three states (hidden, off-screen, and it leaves MINIMIZED alone because that+   one is the user's own choice), judging position from the RESTORE rect since a minimized window+   legitimately reports the -32000 placeholder. It runs every 30s: two minutes of an unopenable+   window is not a safety net, it is the bug with a longer fuse.    **Why the repair is unconditionally safe** (and why it needs no `userIsUsingWindow` check, and    is deliberately NOT `minimalTouch`-gated): a human can minimize a window but a human can never    HIDE one. A hidden pup window is therefore always pup's own mess, and re-showing it can only