app
Pup - the AI's own browser
Public Made by Adomby adom
pup gives your AI a real browser on your desktop that it drives completely, in the background, signed in as you: windows that never jump in front of your work, one shared profile that learns your logins, and every window labeled on the taskbar with its AI thread's name.
← 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.
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