From aebfa2630883203417801415c0a40699323f9d15 Mon Sep 17 00:00:00 2001 From: avi Date: Mon, 5 Oct 2026 18:11:24 -0500 Subject: [PATCH 1/2] fix(updater): relaunch survives the handoff unit's cgroup sweep v0.1.15 update proved the pipeline end-to-end (download, verify, swap OK) but the app never reopened: the handoff runs in a systemd transient unit whose default KillMode=control-group sweeps the process tree when the script exits, killing the backgrounded relaunch before Electron started. Two fixes: start the unit with KillMode=process, and setsid the relaunch (nohup fallback) so it detaches from the unit session entirely. --- src/main/index.ts | 5 +++++ src/main/update.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/index.ts b/src/main/index.ts index 3596ddb..c9557a1 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1354,6 +1354,11 @@ handleIpc("folio:performUpdate", async () => { execFileSync("systemd-run", [ "--user", "--quiet", "--collect", `--description=Folio updater handoff`, + // Default KillMode=control-group means the unit's cgroup is swept + // when the script exits — that killed the backgrounded relaunch + // before Electron got to start (v0.1.15 update: swap OK, app died). + // KillMode=process lets the script exit while its child app lives. + "--property=KillMode=process", "/bin/sh", script, ], { timeout: 10_000, stdio: "ignore" }); handedOff = true; diff --git a/src/main/update.ts b/src/main/update.ts index 738245b..9493643 100644 --- a/src/main/update.ts +++ b/src/main/update.ts @@ -224,7 +224,14 @@ export function buildInstallerScript(spec: InstallerSpec): string { ' rm -rf "$NEW"', "fi", 'say "relaunching"', - '"$RELAUNCH" >/dev/null 2>&1 &', + // Detach fully: setsid moves the relaunch into its own session so it + // survives this script's exit and any cgroup sweep of the transient + // unit (systemd KillMode). Fallback chain for missing setsid. + 'if command -v setsid >/dev/null 2>&1; then', + ' setsid "$RELAUNCH" >/dev/null 2>&1 < /dev/null &', + 'else', + ' nohup "$RELAUNCH" >/dev/null 2>&1 < /dev/null &', + "fi", "", ].join("\n"); } From 6c8b82940a0a7cab181c21f96c26af21bcd652c6 Mon Sep 17 00:00:00 2001 From: avi Date: Mon, 5 Oct 2026 18:11:24 -0500 Subject: [PATCH 2/2] chore(release): bump to 0.1.16 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4e45214..beef7ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "folio", - "version": "0.1.15", + "version": "0.1.16", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "folio", - "version": "0.1.15", + "version": "0.1.16", "license": "MIT", "dependencies": { "@tiptap/core": "^2.27.2", diff --git a/package.json b/package.json index 85cbb3f..88f1ca5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "folio", - "version": "0.1.15", + "version": "0.1.16", "description": "A simple, local, open-source desktop writing app.", "productName": "Folio", "author": "Folio Contributors",