← Commit history

v2.0.690 (insiders): Upgrades really refresh the browser and the tiles: the stale-extension cycle waits until pup has re-attached its browser and re-adopted every window, and counts as done only once the old browser ended (it could fire too early, end nothing, and never retry, leaving a laptop on the 2.0.686 extension under 2.0.689); a window re-adopted across an upgrade is re-stamped once when its tile is from an older drawing. Plus everything in 2.0.689.

John Lauer ·61d3710f9b ·18d ago ·parent 6dcdf79
4 files changed +26−14
rust/Cargo.lock+12−12
@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"  [[package]] name = "adom-pup-bridge"-version = "2.0.689"+version = "2.0.690" dependencies = [  "pup-browser",  "pup-cdp",@@ -655,7 +655,7 @@ dependencies = [  [[package]] name = "pup-browser"-version = "2.0.689"+version = "2.0.690" dependencies = [  "pup-core",  "pup-host",@@ -667,7 +667,7 @@ dependencies = [  [[package]] name = "pup-cdp"-version = "2.0.689"+version = "2.0.690" dependencies = [  "serde_json",  "thiserror",@@ -677,7 +677,7 @@ dependencies = [  [[package]] name = "pup-core"-version = "2.0.689"+version = "2.0.690" dependencies = [  "serde",  "serde_json",@@ -687,7 +687,7 @@ dependencies = [  [[package]] name = "pup-dashboard"-version = "2.0.689"+version = "2.0.690" dependencies = [  "pup-cdp",  "pup-core",@@ -700,7 +700,7 @@ dependencies = [  [[package]] name = "pup-host"-version = "2.0.689"+version = "2.0.690" dependencies = [  "serde",  "serde_json",@@ -709,14 +709,14 @@ dependencies = [  [[package]] name = "pup-host-mac"-version = "2.0.689"+version = "2.0.690" dependencies = [  "pup-host", ]  [[package]] name = "pup-host-win"-version = "2.0.689"+version = "2.0.690" dependencies = [  "pup-core",  "pup-host",@@ -726,7 +726,7 @@ dependencies = [  [[package]] name = "pup-identity"-version = "2.0.689"+version = "2.0.690" dependencies = [  "fontdue",  "image",@@ -736,7 +736,7 @@ dependencies = [  [[package]] name = "pup-session"-version = "2.0.689"+version = "2.0.690" dependencies = [  "pup-core",  "serde",@@ -746,7 +746,7 @@ dependencies = [  [[package]] name = "pup-vault"-version = "2.0.689"+version = "2.0.690" dependencies = [  "pup-core",  "pup-host",@@ -757,7 +757,7 @@ dependencies = [  [[package]] name = "pup-verbs"-version = "2.0.689"+version = "2.0.690" 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.689"+version = "2.0.690" edition = "2021" license = "MIT" 
rust/verbs/src/extdrive.rs+7−1
@@ -138,9 +138,14 @@ pub fn reload_stale_worker(ctx: &Ctx) {     if !alive(ctx) { return; }     let Some((have, want)) = lane_worker_stale() else { return };     if ASKED.lock().unwrap().as_deref() == Some(want.as_str()) { return; }-    *ASKED.lock().unwrap() = Some(want.clone());     let lane = st().token.lock().unwrap().clone();     if lane.is_empty() { return; }+    // 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; }+    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);     let staged = pup_browser::stage_extensions_lane(&*ctx.host, ctx.port, "adom-you", true, Some(&lane), shim);     if staged.is_empty() { pup_core::log("[extdrive] worker reload skipped: re-staging the extension produced nothing".to_string()); return; }@@ -156,6 +161,7 @@ pub fn reload_stale_worker(ctx: &Ctx) {     crate::recovery::reserve(&ids); crate::recovery::mark_lost(&ids);   // 2.0.682: pup ends this browser itself     for id in &ids { ctx.sessions.remove(id); }     let n = crate::kill_extdrive(ctx);+    if n > 0 { *ASKED.lock().unwrap() = Some(want.clone()); }   // 2.0.690: done only once the old browser really ended     // 2.0.650: WAIT for the windows to be gone before relaunching. The kill is asynchronous; relaunch_from_file saw     // every window still "alive on glass", declined ("will re-adopt"), and the sessions were lost when the browser     // finished dying (AdomLapper, 2.0.649 upgrade: 5 windows, 4 lost).
rust/verbs/src/recovery.rs+6
@@ -114,6 +114,12 @@ fn readopt_ext(ctx: &Ctx, f: &Value) -> bool {     }     s.app_id = f["appId"].as_str().map(|x| x.to_string());     ctx.sessions.insert(s.clone()); ctx.sessions.save_file(&s);+    // 2.0.690: a window re-adopted across an upgrade keeps the tile of the build that drew it. When that tile comes+    // from an older drawing generation, stamp the window once so it wears the current art (2.0.689 redrew tiles+    // smoother and John's re-adopted windows kept the grainy ones).+    if s.app_id.as_deref().map(|a| a.contains(".thread.") && !a.contains(&format!(".{}", pup_identity::TILE_GEN))).unwrap_or(false) {+        if let Some(a) = ctx.arc() { crate::identity::schedule(a, s.id.clone(), crate::identity::internal_caller(), true); pup_core::log(format!("[recovery] \"{id}\": its tile is from an older drawing; re-stamping it")); }+    }     pup_core::log(format!("[recovery] \"{id}\": re-adopted its extension-lane window (Chrome window {wid}, {} tab(s), hwnd {:?}); nothing relaunched", s.tabs.len(), s.hwnd));     crate::extdrive::rebind_unbound(ctx);   // stamp the re-adopted window NOW; the health tick is only a backstop     true