← Commit history

v2.0.692 (insiders): An idle-browser cycle now counts saved windows still waiting to be re-adopted, so it can no longer end a browser right after a restart while its windows are on screen (one of John's windows did not come back, 2026-10-03). Plus everything in 2.0.691.

John Lauer ·7308a64197 ·18d ago ·parent 9346d00
4 files changed +26−15
rust/Cargo.lock+12−12
@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"  [[package]] name = "adom-pup-bridge"-version = "2.0.690"+version = "2.0.692" dependencies = [  "pup-browser",  "pup-cdp",@@ -655,7 +655,7 @@ dependencies = [  [[package]] name = "pup-browser"-version = "2.0.690"+version = "2.0.692" dependencies = [  "pup-core",  "pup-host",@@ -667,7 +667,7 @@ dependencies = [  [[package]] name = "pup-cdp"-version = "2.0.690"+version = "2.0.692" dependencies = [  "serde_json",  "thiserror",@@ -677,7 +677,7 @@ dependencies = [  [[package]] name = "pup-core"-version = "2.0.690"+version = "2.0.692" dependencies = [  "serde",  "serde_json",@@ -687,7 +687,7 @@ dependencies = [  [[package]] name = "pup-dashboard"-version = "2.0.690"+version = "2.0.692" dependencies = [  "pup-cdp",  "pup-core",@@ -700,7 +700,7 @@ dependencies = [  [[package]] name = "pup-host"-version = "2.0.690"+version = "2.0.692" dependencies = [  "serde",  "serde_json",@@ -709,14 +709,14 @@ dependencies = [  [[package]] name = "pup-host-mac"-version = "2.0.690"+version = "2.0.692" dependencies = [  "pup-host", ]  [[package]] name = "pup-host-win"-version = "2.0.690"+version = "2.0.692" dependencies = [  "pup-core",  "pup-host",@@ -726,7 +726,7 @@ dependencies = [  [[package]] name = "pup-identity"-version = "2.0.690"+version = "2.0.692" dependencies = [  "fontdue",  "image",@@ -736,7 +736,7 @@ dependencies = [  [[package]] name = "pup-session"-version = "2.0.690"+version = "2.0.692" dependencies = [  "pup-core",  "serde",@@ -746,7 +746,7 @@ dependencies = [  [[package]] name = "pup-vault"-version = "2.0.690"+version = "2.0.692" dependencies = [  "pup-core",  "pup-host",@@ -757,7 +757,7 @@ dependencies = [  [[package]] name = "pup-verbs"-version = "2.0.690"+version = "2.0.692" 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.690"+version = "2.0.692" edition = "2021" license = "MIT" 
rust/verbs/src/extdrive.rs+8−1
@@ -143,7 +143,14 @@ pub fn reload_stale_worker(ctx: &Ctx) {     // 2.0.690: never cycle a lane pup cannot end yet. Right after a restart the lane's processes and windows are     // re-attached a few seconds AFTER the worker's first hello; cycling in that gap killed 0 processes, marked the     // version done, and left John's laptop on the 2.0.686 extension under pup 2.0.689 with no retry (2026-10-03).-    if st().pids.lock().unwrap().is_empty() { return; }+    if st().pids.lock().unwrap().is_empty() {+        // a lane re-attached by its hello (not from lane.json) has a token but no process list: find the processes+        // running its profile folder, as the orphan sweep does. Still none: nothing pup can end yet.+        let found = crate::pup_browser_pids_by_profile(ctx).get(&cur_profile()).cloned().unwrap_or_default();+        if found.is_empty() { return; }+        pup_core::log(format!("[extdrive] the lane's process list was empty; found {} process(es) running profile \"{}\"", found.len(), cur_profile()));+        *st().pids.lock().unwrap() = found;+    }     let pending = ctx.sessions.read_files().iter().filter(|f| f["transport"].as_str() == Some("ext")).filter_map(|f| f["sessionId"].as_str().map(|x| x.to_string())).any(|id| !ctx.sessions.exists(&id));     if pending { return; }     let shim = crate::lane_shim(ctx);
rust/verbs/src/recovery.rs+5−1
@@ -569,7 +569,11 @@ pub fn health_tick(ctx: &Ctx) {     // (measured: worker.2-0-539 still serving under pup 2.0.541, so a brand rewrite shipped in .540 never     // ran). When no extension-lane window is open, end it; the next open stages the current extension.     if let Some((w, want)) = crate::extdrive::lane_worker_stale() {-        if crate::extdrive_browser_alive(ctx) && !ctx.sessions.all().iter().any(|s| crate::transport::is_ext(s)) {+        // 2.0.692: "idle" means no extension-lane window in memory AND none saved on disk waiting to be re-adopted.+        // Right after a restart both of John's windows were still waiting, the in-memory list was empty, and this+        // ended the browser with them on it; one did not come back (AdomLapper, 2026-10-03 13:02).+        let saved_ext = ctx.sessions.read_files().iter().any(|f| f["transport"].as_str() == Some("ext"));+        if crate::extdrive_browser_alive(ctx) && !saved_ext && !ctx.sessions.all().iter().any(|s| crate::transport::is_ext(s)) {             pup_core::log(format!("[lane] cycling the idle lane browser: it runs extension {} while pup is {}", w.replace('-', "."), want.replace('-', ".")));             crate::kill_extdrive(ctx);             crate::extdrive::reset_worker_version();