← Commit history

2.16.0: stale-process LED

John Lauer ·c8ab288130 ·1mo ago ·parent 43a9bb1
4 files changed +24−6
Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "adom-lbr"-version = "2.15.5"+version = "2.16.0" edition = "2021" description = "adom-lbr generator / EDA translator: the canonical adom-lbr JSON is the hub, with native converters to Altium (.SchLib/.PcbLib/.IntLib), EAGLE/Fusion (.lbr), and KiCad. Altium output is written natively — no Altium needed at conversion time." 
VERSION+1−1
@@ -1 +1 @@-2.15.5+2.16.0
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-lbr",-  "version": "2.15.5",+  "version": "2.16.0",   "type": "app",   "description": "adom-lbr \u2014 the EDA library translator. Bring a component in from any supported EDA tool and convert it to any other (KiCad \u21c4 Altium \u21c4 EAGLE/Fusion) through one canonical adom-lbr JSON \u2014 symbol + footprint + 3D + pin\u2194pad map. Altium is written natively (no Altium needed). Includes the adom-lbr Manager: browse wiki components and view symbol/footprint/3D + the per-EDA layer stackup.",   "dependencies": {},
src/dock.rs+21−3
@@ -388,9 +388,27 @@ pub fn assets_dir() -> Option<PathBuf> { /// list size (None = not loaded yet); `owner` its resolved identity. fn build_status(library_count: Option<usize>, owner: &str) -> Value {     let mut leds: Vec<Value> = vec![];-    leds.push(led_short("Binary", "ok",-        format!("adom-lbr {VERSION} at {}", std::env::current_exe().map(|p| p.display().to_string()).unwrap_or_default()),-        &format!("v{VERSION}"), None));+    // STALE PROCESS. The dock installs a new package but never restarts a dashboard that is+    // already running, so a long-lived serve keeps answering from an executable that was+    // replaced on disk hours ago. Measured on a real machine: two instances on 2.14.1 and+    // 2.13.0 while five versions shipped past the user, each one dutifully reporting itself+    // as healthy. Linux appends " (deleted)" to /proc/self/exe once the file behind a+    // running process is unlinked, so the app can KNOW it is stale rather than infer it.+    // Every dashboard already emitted this in its detail text and nobody read it, so it is+    // an amber LED with the fix in it now.+    let exe = std::env::current_exe().map(|p| p.display().to_string()).unwrap_or_default();+    let stale = exe.ends_with("(deleted)");+    if stale {+        let path = exe.trim_end_matches(" (deleted)").to_string();+        leds.push(led_short("Binary", "warn",+            format!("running adom-lbr {VERSION} from an executable that has since been replaced on disk ({path}); \+                     the installed version is newer and this process cannot pick it up"),+            &format!("v{VERSION} stale"),+            Some("restart the dashboard to run the installed version: the dock's Hard Refresh Open, or kill this serve and launch it again")));+    } else {+        leds.push(led_short("Binary", "ok", format!("adom-lbr {VERSION} at {exe}"),+            &format!("v{VERSION}"), None));+    }      let wiki_ok = Command::new("curl")         .args(["-s", "-o", "/dev/null", "-w", "%{http_code}", "--max-time", "3", "https://wiki.adom.inc/health"])