From 94ba236d94b8a07bc5ee6e3a53051d1d02433170 Mon Sep 17 00:00:00 2001 From: Anthony Ettinger Date: Wed, 14 Oct 2026 06:51:21 +0000 Subject: [PATCH 1/2] fix(releases): feed says 0.2.29 so workers pick up the infernet leak fix The v0.2.29 bump missed FALLBACK_VERSION, so latest.json kept saying 0.2.28 and no worker self-updated. Co-Authored-By: Claude Opus 5.5 --- apps/web/src/app/releases/latest.json/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/app/releases/latest.json/route.ts b/apps/web/src/app/releases/latest.json/route.ts index 52217cd..56bc7e0 100644 --- a/apps/web/src/app/releases/latest.json/route.ts +++ b/apps/web/src/app/releases/latest.json/route.ts @@ -28,7 +28,7 @@ export const dynamic = "force-dynamic"; * this in sync with the workspace version in `Cargo.toml` on each release so a * freshly built CLI reports "already latest" rather than a phantom upgrade. */ -const FALLBACK_VERSION = "0.2.28"; +const FALLBACK_VERSION = "0.2.29"; const FALLBACK_MIN_REQUIRED = "0.0.1"; type Channel = "stable" | "beta" | "nightly"; From 2f39c23c9d71a862f95bb86e16dc5b394fa81b49 Mon Sep 17 00:00:00 2001 From: Anthony Ettinger Date: Wed, 14 Oct 2026 07:24:45 +0000 Subject: [PATCH 2/2] test(worker): make the reaper test deterministic dash can exec a lone `sh -c` command, replacing the fake daemon's cmdline before the scan (CI saw 'stale daemon still running' with no signal sent). Keep sh alive with `; :` and wait until both fakes show the infernet cmdline before reaping. Co-Authored-By: Claude Opus 5.5 --- node/crates/c0mpute-cli/src/main.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/node/crates/c0mpute-cli/src/main.rs b/node/crates/c0mpute-cli/src/main.rs index e2cf615..45ad290 100644 --- a/node/crates/c0mpute-cli/src/main.rs +++ b/node/crates/c0mpute-cli/src/main.rs @@ -2865,7 +2865,7 @@ mod infernet_tests { Command::new("sh") .args([ "-c", - "sleep 600", + "sleep 600; :", &format!("/x/{tag}/@infernetprotocol/cli/index.js"), "start", "--foreground", @@ -2874,8 +2874,20 @@ mod infernet_tests { .spawn() .unwrap() }; + // `; :` keeps sh from exec-ing sleep, which would replace the cmdline being matched. let mut keep = fake("keep"); let mut stale = fake("stale"); + for child in [&keep, &stale] { + let path = format!("/proc/{}/cmdline", child.id()); + let ready = (0..100).any(|_| { + let ok = std::fs::read(&path).is_ok_and(|c| is_infernet_daemon_cmdline(&c)); + if !ok { + std::thread::sleep(std::time::Duration::from_millis(20)); + } + ok + }); + assert!(ready, "fake daemon never showed the infernet cmdline"); + } std::fs::write(dir.join("infernet/daemon.pid"), keep.id().to_string()).unwrap(); // SAFETY: the only test that reads XDG_CONFIG_HOME. unsafe { std::env::set_var("XDG_CONFIG_HOME", &dir) };