From e89b68e52aaaf5cb9c7c8ff5b0f80a762d7de3ad Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 03:21:05 +0000 Subject: [PATCH] Fix desktop app not opening / engine not starting (v1.1.1) - A listen error other than EADDRINUSE on the fixed port (Windows returns EACCES for ports in Hyper-V/WSL/Docker excluded ranges) left startup rejected with no window while the process kept running and holding the single-instance lock, so every later launch silently did nothing. Fall back to a random port on any listen error; if startup still fails, show an error box and exit. - Electron's BrowserWindow doesn't honor COOP/COEP, so SharedArrayBuffer was undefined and the multi-threaded engine never started. Enable it with the SharedArrayBuffer feature switch. - second-instance: show/focus the window, or create one if none exists. - Portable .exe shows a splash screen while it unpacks. Verified in real Electron (dev and packaged) under Xvfb: engine runs multi-threaded, port-taken fallback works, second launch hands off. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017ZHKbLKcpoa8QJGzqkbDTJ --- build/splash.bmp | Bin 0 -> 327654 bytes docs/release-notes/v1.1.1.md | 16 +++++++++++++++ electron/main.cjs | 37 +++++++++++++++++++++++++++++------ package-lock.json | 4 ++-- package.json | 5 ++++- progress.txt | 15 ++++++++++++++ 6 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 build/splash.bmp create mode 100644 docs/release-notes/v1.1.1.md diff --git a/build/splash.bmp b/build/splash.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ecc9a401bd48cb117e2e69475ded6b9a6f8fe8e1 GIT binary patch literal 327654 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 p%N7QRBQ^ZZie4v>JO1VTdVAb03p!Y6A6 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