pup is the AI's own browser: a real, full Chrome on the user's desktop that the AI fully controls (a sandbox, not the user's signed-in browser). Rides Bridge; pup_* verbs open windows and tabs, navigate, screenshot, and eval JS.
The stale-injection accumulation bug: evaluateOnNewDocument scripts from every prior bridge process persist on long-lived pages and run oldest-first, so the plain boolean guard let the oldest floaty win forever, which is why John kept seeing the big hover zone after reloads that faithfully re-ran ancient code. The floaty guard is now versioned with the bridge version: the newest module tears down any elder host and rebuilds, so a reload always lands the current behavior
The stale-injection accumulation bug: evaluateOnNewDocument scripts from every prior bridge process persist on long-lived pages and run oldest-first, so the plain boolean guard let the oldest floaty win forever, which is why John kept seeing the big hover zone after reloads that faithfully re-ran ancient code. The floaty guard is now versioned with the bridge version: the newest module tears down any elder host and rebuilds, so a reload always lands the current behavior
The stale-injection accumulation bug: evaluateOnNewDocument scripts from every prior bridge process persist on long-lived pages and run oldest-first, so the plain boolean guard let the oldest floaty win forever, which is why John kept seeing the big hover zone after reloads that faithfully re-ran ancient code. The floaty guard is now versioned with the bridge version: the newest module tears down any elder host and rebuilds, so a reload always lands the current behavior
The stale-injection accumulation bug: evaluateOnNewDocument scripts from every prior bridge process persist on long-lived pages and run oldest-first, so the plain boolean guard let the oldest floaty win forever, which is why John kept seeing the big hover zone after reloads that faithfully re-ran ancient code. The floaty guard is now versioned with the bridge version: the newest module tears down any elder host and rebuilds, so a reload always lands the current behavior