← Commit history

v2.0.681 (insiders): A window is restored only when its browser is GONE (crash, sleep, upgrade). If the browser is alive and does not have the window, the window was CLOSED and pup forgets it. Before, any missing window read as a crash to repair, so windows the user closed while pup was restarting came back at the next boot (John, AdomLapper, 2026-09-23).

John Lauer ·de266102e3 ·1mo ago ·parent 901c044
3 files changed +27−13
rust/Cargo.lock+12−12
@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"  [[package]] name = "adom-pup-bridge"-version = "2.0.680"+version = "2.0.681" dependencies = [  "pup-browser",  "pup-cdp",@@ -655,7 +655,7 @@ dependencies = [  [[package]] name = "pup-browser"-version = "2.0.680"+version = "2.0.681" dependencies = [  "pup-core",  "pup-host",@@ -667,7 +667,7 @@ dependencies = [  [[package]] name = "pup-cdp"-version = "2.0.680"+version = "2.0.681" dependencies = [  "serde_json",  "thiserror",@@ -677,7 +677,7 @@ dependencies = [  [[package]] name = "pup-core"-version = "2.0.680"+version = "2.0.681" dependencies = [  "serde",  "serde_json",@@ -687,7 +687,7 @@ dependencies = [  [[package]] name = "pup-dashboard"-version = "2.0.680"+version = "2.0.681" dependencies = [  "pup-cdp",  "pup-core",@@ -700,7 +700,7 @@ dependencies = [  [[package]] name = "pup-host"-version = "2.0.680"+version = "2.0.681" dependencies = [  "serde",  "serde_json",@@ -709,14 +709,14 @@ dependencies = [  [[package]] name = "pup-host-mac"-version = "2.0.680"+version = "2.0.681" dependencies = [  "pup-host", ]  [[package]] name = "pup-host-win"-version = "2.0.680"+version = "2.0.681" dependencies = [  "pup-core",  "pup-host",@@ -726,7 +726,7 @@ dependencies = [  [[package]] name = "pup-identity"-version = "2.0.680"+version = "2.0.681" dependencies = [  "fontdue",  "image",@@ -736,7 +736,7 @@ dependencies = [  [[package]] name = "pup-session"-version = "2.0.680"+version = "2.0.681" dependencies = [  "pup-core",  "serde",@@ -746,7 +746,7 @@ dependencies = [  [[package]] name = "pup-vault"-version = "2.0.680"+version = "2.0.681" dependencies = [  "pup-core",  "pup-host",@@ -757,7 +757,7 @@ dependencies = [  [[package]] name = "pup-verbs"-version = "2.0.680"+version = "2.0.681" dependencies = [  "base64",  "png 0.17.16",
rust/Cargo.toml+1−1
@@ -4,7 +4,7 @@ members = ["core", "host", "host-win", "host-mac", "cdp", "browser", "session",  # One version for the whole bridge, in lockstep with src/BRIDGE_VERSION (tools/ship.sh bumps both). [workspace.package]-version = "2.0.680"+version = "2.0.681" edition = "2021" license = "MIT" 
rust/verbs/src/recovery.rs+14
@@ -144,6 +144,20 @@ pub fn relaunch_from_file(ctx: &Ctx, f: &Value) {             }         }     }+    // 2.0.681 (John, 2026-09-23: "i fucking closed those windows on purpose cuz i don't fucking need them anymore").+    // A window is only RESTORED when its browser is GONE (a crash, a sleep, an upgrade). If the lane browser is alive+    // and simply does not have this window, the window was CLOSED — by the user, or by the page — and pup must forget+    // it. Before, any missing window was treated as a crash to repair, so windows the user closed while pup was+    // restarting (an install landed in that exact second on his laptop) came back at the next boot, twice.+    {+        let _scope = ProfileScope::enter(&profile);+        if crate::extdrive::alive(ctx) && !crate::extdrive_pids().is_empty() {+            pup_core::log(format!("[recovery] \"{id}\": its browser is running and does not have this window, so it was CLOSED, not lost; forgetting it (never restored)"));+            ctx.sessions.delete_file(&id);+            RELAUNCHES.lock().unwrap().retain(|(s, _)| *s != id);+            return;+        }+    }     let attempts = { let mut m = RELAUNCHES.lock().unwrap(); match m.iter_mut().find(|(s, _)| *s == id) { Some(e) => { e.1 += 1; e.1 } None => { m.push((id.clone(), 1)); 1 } } };     if attempts > 2 { pup_core::log(format!("[recovery] \"{id}\" failed to come back twice — giving up on it (the page itself may be crashing Chrome); removing its file")); ctx.sessions.delete_file(&id); crate::push_cleanup_report(format!("pup could NOT auto-recover the \"{id}\" window: it crashed again on relaunch ({url}). Open it again yourself with pup_open_window if you still need it.")); return; }     // (2.0.588: a window still on glass is never relaunched; that check now runs before the attempt counter.)