← Commit history

v2.0.719 (insiders): A window whose birth never finished (titled PUPBIRTH-... on the taskbar) is closed as an empty leftover instead of adopted as an ownerless pup window (John's taskbar, 2026-10-13). Includes 2.0.718. Gates on arav-rog and ConfRoomROG, both beside other threads' windows: smoke all pass, foreground pass, parity 55/56, jump list 11/14 (baseline; Close ALL skipped in shared mode).

John Lauer ·7fbd62398e ·28d ago ·parent f8523c1
3 files changed +31−17
rust/Cargo.lock+12−12
@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"  [[package]] name = "adom-pup-bridge"-version = "2.0.718"+version = "2.0.719" dependencies = [  "pup-browser",  "pup-cdp",@@ -655,7 +655,7 @@ dependencies = [  [[package]] name = "pup-browser"-version = "2.0.718"+version = "2.0.719" dependencies = [  "pup-core",  "pup-host",@@ -667,7 +667,7 @@ dependencies = [  [[package]] name = "pup-cdp"-version = "2.0.718"+version = "2.0.719" dependencies = [  "serde_json",  "thiserror",@@ -677,7 +677,7 @@ dependencies = [  [[package]] name = "pup-core"-version = "2.0.718"+version = "2.0.719" dependencies = [  "serde",  "serde_json",@@ -687,7 +687,7 @@ dependencies = [  [[package]] name = "pup-dashboard"-version = "2.0.718"+version = "2.0.719" dependencies = [  "pup-cdp",  "pup-core",@@ -700,7 +700,7 @@ dependencies = [  [[package]] name = "pup-host"-version = "2.0.718"+version = "2.0.719" dependencies = [  "serde",  "serde_json",@@ -709,14 +709,14 @@ dependencies = [  [[package]] name = "pup-host-mac"-version = "2.0.718"+version = "2.0.719" dependencies = [  "pup-host", ]  [[package]] name = "pup-host-win"-version = "2.0.718"+version = "2.0.719" dependencies = [  "pup-core",  "pup-host",@@ -726,7 +726,7 @@ dependencies = [  [[package]] name = "pup-identity"-version = "2.0.718"+version = "2.0.719" dependencies = [  "fontdue",  "image",@@ -736,7 +736,7 @@ dependencies = [  [[package]] name = "pup-session"-version = "2.0.718"+version = "2.0.719" dependencies = [  "pup-core",  "serde",@@ -746,7 +746,7 @@ dependencies = [  [[package]] name = "pup-vault"-version = "2.0.718"+version = "2.0.719" dependencies = [  "pup-core",  "pup-host",@@ -757,7 +757,7 @@ dependencies = [  [[package]] name = "pup-verbs"-version = "2.0.718"+version = "2.0.719" 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.718"+version = "2.0.719" edition = "2021" license = "MIT" 
rust/verbs/src/extdrive.rs+18−4
@@ -669,8 +669,10 @@ pub fn adopt_stray_windows(ctx: &Ctx) -> usize {     let mut n = 0;     let mut waiting = 0;     for (wid, wtabs) in wins {-        // about:blank-only windows are close_orphan_blank_windows' job-        if wtabs.iter().all(|t| { let u = t["url"].as_str().unwrap_or(""); u.is_empty() || u == "about:blank" }) { continue; }+        // about:blank-only windows and pup's own unfinished births (birth.html) are close_orphan_blank_windows' job.+        // 2.0.719: births too. A birth that never finished was adopted as "pup-window-2" with no thread and sat on John's+        // taskbar titled PUPBIRTH-... (2026-10-13).+        if wtabs.iter().all(|t| is_blank_or_birth(t["url"].as_str().unwrap_or(""))) { continue; }         let first = *seen.entry(wid).or_insert(now);         if now.saturating_sub(first) < 5000 { waiting += 1; continue; }         let ids: Vec<String> = wtabs.iter().filter_map(|t| t["tabId"].as_i64()).map(|i| i.to_string()).collect();@@ -709,7 +711,10 @@ pub fn adopt_stray_windows(ctx: &Ctx) -> usize {     n } -/// Close windows no session owns whose every tab is about:blank: the startup window a lane relaunch or a+/// An empty page, or pup's own birth page (a window being born, or one whose birth never finished).+fn is_blank_or_birth(u: &str) -> bool { u.is_empty() || u == "about:blank" || (u.starts_with("chrome-extension://") && u.contains("/birth.html")) }++/// Close windows no session owns whose every tab is about:blank (or pup's own unfinished birth page): the startup window a lane relaunch or a /// concurrent open leaves behind (John, 2026-09-14: a stray "about:blank - Google Chrome for Testing" on /// his desktop). The CDP lane does the same in close_orphan_blank_targets. `keep` is a window just /// created for a session that has not been recorded yet.@@ -728,7 +733,7 @@ pub(crate) fn close_orphan_blank_windows(ctx: &Ctx, keep: Option<i64>) -> usize     if wins.len() <= 1 { return 0; }     for (w, urls) in wins {         if Some(w) == keep || owned.contains(&w) || urls.is_empty() { continue; }-        if urls.iter().all(|u| u.is_empty() || u == "about:blank") {+        if urls.iter().all(|u| is_blank_or_birth(u)) {             if run(json!({ "action": "close", "windowId": w }), Duration::from_secs(10)).is_ok() { n += 1; pup_core::log(format!("[lane] closed orphan about:blank window {w} that no session owns")); }         }     }@@ -899,3 +904,12 @@ pub fn ext_handle() -> std::sync::Arc<crate::BrowserHandle> {     let h = std::sync::Arc::new(crate::BrowserHandle { cdp: pup_cdp::Cdp::via(via), launched: pup_browser::Launched { pid: 0, cdp_port: 0, candidate: pup_browser::Candidate { kind: "extension-lane".into(), source: "nbe driver".into(), executable_path: std::path::PathBuf::new(), build_id: None }, profile_dir: std::path::PathBuf::new(), reused: true } });     *g = Some(h.clone()); h }++#[cfg(test)]+mod tests {+    #[test] fn blank_or_birth() {+        assert!(super::is_blank_or_birth("")); assert!(super::is_blank_or_birth("about:blank"));+        assert!(super::is_blank_or_birth("chrome-extension://liomcaladmooagjiebkfgegciadapnpi/birth.html?token=b1y2"));+        assert!(!super::is_blank_or_birth("https://example.com/birth.html")); assert!(!super::is_blank_or_birth("https://wiki.adom.inc/adom/pup-bridge"));+    }+}