v0.18.10:讓「同步引擎沒在跑」說出死因(leo Windows 實測①②的診斷前置)

leo 08-06 Windows 回報:「一直在『看守中』和『沒有在跑』中間閃,要我重啟但重啟無效,
我覺得它在跑個迴圈不停重複」+「加一個資料夾明顯沒產生看守資料夾」。
朋友的一般 PC(非 ARM)也一樣,停在等待中 ⇒ **不是 ARM 模擬的問題,是 Windows 通用**。

## 已定位的機制(不是根因,是「為什麼查不出根因」)
閃爍=子行程一啟動就死 → supervisor 退避重拉 → 狀態在 Starting(alive=true)與
Error(false)之間彈跳 ⇒ 畫面跟著閃。而**死因一直被記在 Status().LastError 裡,
從來沒有上過畫面、也沒寫進 app.log** ⇒ 使用者只看到閃爍與「請重新開啟」,
重開當然無效(死因沒變)。這是「安靜地略過」的同一種病換地方發作。

## 這版做的
- 死因上畫面:重試 >= 3 次改顯示「同步引擎一直啟動失敗,已自動重試 N 次|原因:…」,
  且**黏住不閃**(不受重起過程中的 Starting 影響)
- 每次異常結束寫進 app.log(同錯誤 10 次內只記一次,避免洗爆)

## 排除掉的嫌疑(查過,不是)
- PDF 引擎(pdfium/wasm):**延遲初始化**,第一次讀 PDF 才啟動 ⇒ 不會在啟動時炸
- ARM 模擬:leo 朋友的一般 x64 PC 同樣症狀
- 待查嫌疑:Wails 的 Windows 版是 `-H windowsgui`(GUI subsystem,無主控台),
  而 v0.18.8 的 collector.exe 是 `go build` 的 console subsystem——
  v0.18.9 合併成單一 binary 後,子行程換成 GUI subsystem 的自己。**尚未證實。**

## 順帶修好自己的閘(它擋對了我)
指紋閘擋下「v0.18.10 已對應另一份原始碼」——因為第一次打包失敗、版號卻已被戳。
⇒ 加判準:**磁碟上沒有該版號產物=從未出貨,允許重戳**(不用去手改 JSON,
那種爛示範遲早被改成「都放行」)。

## 安裝程式(leo ③)尚未兌現,誠實記錄
`wails build -nsis` 需要 makensis;Homebrew 的 3.12 在這台 macOS **連兩行的最小腳本
都在寫檔階段丟 std::bad_alloc**,zlib/bzip2/lzma 三壓縮器全崩,brew extract 舊版
被 homebrew/core 擋。且帶 -nsis 會讓 wails 整個中止、連 exe 都不產
⇒ build-win.sh 改成**先煙霧測試 makensis**,壞的就只出裸 exe 並大聲警告。
This commit is contained in:
2026-08-06 18:27:08 +08:00
parent 0b8bc83bd1
commit 6698f9fbda
6 changed files with 128 additions and 26 deletions
+38 -1
View File
@@ -67,9 +67,28 @@ json.dump(c, open('wails.json', 'w'), indent=2, ensure_ascii=False)
PY
trap 'mv -f wails.json.bak wails.json 2>/dev/null || true' EXIT
# 🔴 makensis 壞掉時**不能**還帶 -nsiswails 會整個中止,連 exe 都不產
# 2026-08-06 實撞:Homebrew makensis 3.12 在這台 macOS 連兩行的最小腳本都丟
# std::bad_alloc ⇒ 三種壓縮器全崩、brew extract 舊版也被 homebrew/core 擋)。
# ⇒ 先用最小腳本煙霧測試,過了才開安裝程式。
NSIS_FLAG=""
if command -v makensis >/dev/null 2>&1; then
SMOKE="$(mktemp -d)"
printf 'OutFile "%s/s.exe"\nSection\nSectionEnd\n' "$SMOKE" > "$SMOKE/s.nsi"
if makensis "$SMOKE/s.nsi" >/dev/null 2>&1; then
NSIS_FLAG="-nsis"
echo " ✅ makensis 可用 → 會一併產生安裝程式"
else
echo " ⚠️ makensis 裝了但**跑不起來**(最小腳本就崩)⇒ 這次不產安裝程式,只出裸 exe"
fi
rm -rf "$SMOKE"
else
echo " ⚠️ 沒有 makensis ⇒ 這次不產安裝程式,只出裸 exebrew install makensis"
fi
echo "② wails buildwindows/amd64CGo 走 mingw"
CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc \
wails build -platform windows/amd64 -clean \
wails build -platform windows/amd64 -clean ${NSIS_FLAG} \
-ldflags "-X main.version=${VERSION} -X main.buildTime=${BUILD_TIME} \
-X arcrun-rag/collector.version=${VERSION} -X arcrun-rag/collector.buildTime=${BUILD_TIME}"
@@ -107,6 +126,24 @@ if [ -z "$PROBE_OUT" ]; then
fi
echo " ✅ 自帶同步引擎(--collector --version → ${PROBE_OUT}"
# 🔴 2026-08-06 leo 封測回報③:「Windows 用戶通常習慣 install 過程,它則只是一個執行檔,
# 表示安裝後不會在 Windows 開始資料夾出現,關掉下次要用就找不到了,也沒有 uninstall,
# 希望跟 Mac 一樣用建議的安裝方式」⇒ 出 NSIS 安裝程式(`-nsis`)。
# 裝完會有:開始功能表項目、桌面捷徑、控制台可解除安裝——與 Mac 的 DMG 拖曳同級的「正常」。
# 裸 exe 仍保留(給想免安裝試用的人),但**主打是安裝程式**。
SETUP_SRC="build/bin/arcrun-app-amd64-installer.exe"
if [ -f "$SETUP_SRC" ]; then
SETUP="$(cd "$OUT" && pwd)/Arcrun-setup-${VERSION}.exe"
cp "$SETUP_SRC" "$SETUP"
echo " ✅ 安裝程式:$(basename "$SETUP")$(ls -lh "$SETUP" | awk '{print $5}')"
else
echo "⚠️ 沒產出 NSIS 安裝程式 —— **leo 08-06 要的『正常安裝流程』尚未兌現**"
echo " 真兇:Homebrew 的 makensis 3.12 在這台 macOS 壞掉(連兩行的最小腳本都"
echo " 在寫檔階段丟 std::bad_alloc,三種壓縮器全崩 ⇒ 工具鏈問題,不是我們的 .nsi)。"
echo " 已試過且無效:zlib/bzip2/lzma 三壓縮器、brew extract 舊版(homebrew/core 不給 tap)。"
echo " ⇒ 本次仍只產裸 exe。安裝程式的替代路線見 docs/store-submission.mdMSIX/Store)。"
fi
SIZE=$(ls -lh "$EXE" | awk '{print $5}')
echo "✅ 完成:${EXE}${SIZE},單一檔案、自帶同步引擎)"
echo