From 83a0c9f03390651ab153fed0b5822a0bdd6be205 Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Sun, 4 Oct 2026 21:22:31 +0000 Subject: [PATCH] OTA (Windows): start the update helper with CREATE_NO_WINDOW only; DETACHED_PROCESS killed PowerShell before the script ran The first Windows update over the air (0.3.3 to 0.3.4) sat on 'the installer is starting' with no helper log on PC 2. The helper launched by a remote job with the same arguments ran at once. Fix in 0.3.5; the Windows machines take 0.3.5 by hand once more. Co-Authored-By: Claude Fable 5.1 --- app/igneum-app/src/ota.rs | 7 ++++++- docs/bugs.md | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/igneum-app/src/ota.rs b/app/igneum-app/src/ota.rs index d19febabe..543e0672f 100644 --- a/app/igneum-app/src/ota.rs +++ b/app/igneum-app/src/ota.rs @@ -1123,7 +1123,12 @@ fn spawn_detached(c: &mut Command) -> Result<(), String> { #[cfg(windows)] { use std::os::windows::process::CommandExt; - c.creation_flags(0x0800_0000 | 0x0000_0008); // CREATE_NO_WINDOW | DETACHED_PROCESS + // CREATE_NO_WINDOW only. With DETACHED_PROCESS as well (0.3.0 to 0.3.4) powershell.exe has no console to + // hide and exits during start-up before the first line of ota-apply.ps1 runs: the first Windows update over + // the air (0.3.3 to 0.3.4, 4 October 2026) sat on "the installer is starting" with nothing logged, while the + // same helper launched by a remote job ran at once (docs/bugs.md). CREATE_NO_WINDOW gives it a hidden + // console, and the child is not tied to this process's lifetime, so it still outlives the engine. + c.creation_flags(0x0800_0000); // CREATE_NO_WINDOW } c.spawn().map(|_| ()).map_err(|e| format!("cannot start the helper: {e}")) } diff --git a/docs/bugs.md b/docs/bugs.md index 3570849f5..931ba5f44 100644 --- a/docs/bugs.md +++ b/docs/bugs.md @@ -34,3 +34,4 @@ shard run reported as exit 0, 7a7e873). - Sam's Mac (3a9bf309): CLOSED 19:15 UTC; the console side (stopped versus silent) shipped in 4d208c9. Earlier note: CLOSED 19:15 UTC, the app came back on 0.3.3 and mines (11.4 MH/s): it was stopped by its user for 4.5 h. What stays: the last node upload (14:47:02 UTC) ends with `SIGTERM - shutting down` and `igneumd has stopped`, the miner upload stops at 14:46:56, nothing after: a clean app-driven stop (quit or Stop), not a crash and not a network loss (the stop lines reached the intake). Its app predates the app-log upload (`app ?` on the console), so there is no app stream to say which. The app posts nothing on a clean quit, so the console shows "silent 4h" for a machine that was stopped on purpose. Proposed: one `[ok] app quit by the user` line uploaded before the engine stops, and the console card saying "stopped (quit) at 14:47" instead of "silent". - Sam's Mac went silent again at 20:20:12 UTC: the app stream ends on a normal status line (8 MH/s, mining), no `quit:` line, the node log ends mid-stream; so a sleep or a lost network, not a quit, and the console's SILENT (not "stopped") is the right reading. The live "stopped" case came at 20:45:01 with its 0.3.4 install quit: labelled stopped (update). - `collect` jobs: the Format-List / Out-String loss did not reproduce (board2 printed `Sum`, board4 printed `Capacity` and `Speed`); only the `$_` case failed. Closed unless it shows again. +| 4 Oct 2026 22:25 BST | Windows update over the air sat on "the installer is starting" (PC 2, 0.3.3 to 0.3.4); no ota-apply.log, no result | the engine spawned powershell.exe with CREATE_NO_WINDOW and DETACHED_PROCESS; with no console PowerShell exits before the script's first line; the same helper launched by a remote job logged, checked the hash and refused as designed | ota.rs spawn_detached: CREATE_NO_WINDOW only (0.3.5) | dry run run-ota-helper-dryrun-pc2 (helper exit 1 with a wrong hash, log and result written); the real proof is the 0.3.5 to 0.3.6 update on a PC |