← Commit history

Dev skill: raise-interception hole closed in AD 1.9.124 (issue #163 verified + closed); forensics note retained

John Lauer ·7298283f53 · ·parent 961d48d
1 file changed +9−6
dev-skills/pup-bridge-dev/SKILL.md+9−6
@@ -459,12 +459,15 @@ not the work. Raise-time: refused (`foreground_reason_required`). Granted foregr `lastForeground {ts,verb,reason}` in status. Mirrors abe's `userRequestedForeground`+`foregroundReason` (also accepted as an arg alias) so the contract is identical across Adom's browser surfaces. -**⚠ KNOWN HOLE (adom/adom-desktop issue #163):** AD-core INTERCEPTS `browser_raise_os_window` /-`browser_focus_window` natively (response shape `{raised, hwnd, resolvedBy}`) and never forwards them-to pup — so pup's raise gate is bypassed until AD forwards the verbs or applies the same gate. The-open-time gate is NOT affected (open always reaches pup). This is exactly how a thread foregrounded a-window with no reason and no audit trail on 2026-07-15 (forensics needed the in-page focus-latch-timestamp `window.__pupFocusTs` — which remains the ground-truth "when did this window gain focus").+**HOLE CLOSED (AD 1.9.124, issue #163):** AD-core used to INTERCEPT `browser_raise_os_window` /+`browser_focus_window` natively (a pre-extraction fossil, flagged ~July 10 and finally deleted+2026-07-15) — which bypassed pup's raise gate entirely and let a thread foreground a window with no+reason and no audit trail. As of AD 1.9.124 those verbs relay to pup like every other `browser_*`+verb, so the gate + audit trail hold everywhere (verified: reasonless raise → pup's+foreground_reason_required refusal; granted raise → `[foreground] GRANTED` log + lastForeground in+status). If a reasonless raise EVER succeeds again, suspect a reintroduced AD interceptor first —+the in-page focus latch `window.__pupFocusTs` remains the ground-truth "when did this window gain+focus" for forensics. Desktops on AD ≤1.9.123 still have the ungated native path until they update.  ## The taskbar flash — pulse vs. the persistent tint (clearing it programmatically)