OpenClaw 更新失敗後真的能自己活回來嗎?
我前幾天在測一個需要長時間跑的 skill,剛好遇到更新後 Gateway 沒有順利回來。表面看起來只是服務沒啟動,實際上比較麻煩的是:原本已經 accepted 的 child session、被 kill 的 run,還有準備送出的 reply,都可能卡在「到底算不算完成」的邊界。這種問題最難查,因為重啟一次之後,錯誤訊息常常只剩一個很籠統的 authoring error。
這次看到 GitHub Releases 上的官方 release notes,v2026.10.8 處理的核心其實不是某個醒目的新功能,而是把更新和復原流程補完整。我翻了一下 release notes,最有感的是更新後 Doctor 的失敗處理:一般性失敗現在會觸發 Gateway 重啟,orphaned maintenance worker 不會再把 CLI 或 Gateway start 卡住。macOS 的 launchd 註冊遺失、Windows 和 pnpm 的特定更新情境、舊 OAuth 目錄,也都被納入不該讓整個更新中止的範圍。
這對實際維運差很多。以前我看到更新失敗,第一反應通常是先查 process、再看 state directory 和資料庫是不是被鎖住,最後才敢重跑 Doctor。現在至少可以把問題拆成兩層:更新本身失敗,不代表 Gateway 一定要留在死狀態;而 Gateway restart 後,session 是否能接回來,則是另一條復原路徑。這個分界很重要,因為「服務活了」和「工作沒有遺失」是兩個完全不同的健康檢查。
release notes 也特別提到 killed run 和剛 accepted 的 child session 可以在 Gateway restart 後復原,重試時會送出正確的 reply,而不是把內部重試狀態暴露成 authoring error。對有做 skill chaining 或多 agent 協作的人來說,這比單純讓服務自動重啟更關鍵。重啟只是 infra 層面的自癒,能不能恢復工作語意才是使用者真正感受到的可靠性。
另外一個容易被忽略的細節是 SQLite。啟動時 reader scope,以及 agent DB 的 transient lock contention,都加入修復和重試。這類鎖競爭通常只在高併發、快速重啟或多個 worker 同時收尾時出現,手動重現不一定穩定,所以用「偶爾重跑就好了」掩蓋它其實很危險。這次的方向是把 transient failure 當成系統設計的一部分,而不是把責任丟給操作者。
安全修補也值得一起看。exec allowlist 模式現在會對 test -v 的 operand expansion 要求 approval,generic node invoke 會拒絕 browser proxy commands,sandbox 裡 spawned child 不能改跑 host CLI backend,secret egress proxy 會拒絕不受信任的憑證鏈,部分 provider error 也不再把 API key 帶出去。這些變更看起來零碎,但共同指向同一件事:功能邊界不能只靠「正常使用時不會這樣」來假設,尤其是 child process、proxy 和錯誤處理這幾條跨層路徑。
所以我看 v2026.10.8 的角度,不是「這版多了什麼功能」,而是 OpenClaw 開始把更新失敗、重啟、重試和權限邊界當成同一個 reliability 問題處理。對自己有寫 skill、會開 child session,或把 Gateway 放在長時間執行環境的人,我會特別留意這幾個情境:更新中途服務被殺掉、資料庫暫時被鎖、child 已 accepted 但尚未回覆,以及錯誤路徑是否可能帶出 secret。
官方 release 的 SHA 是 dc2523e5a5c7a309517fd7fa834add938231d526。如果你最近也在追 OpenClaw 的原始碼或準備送 PR,這版很適合拿來看復原邊界怎麼逐步補齊。
作者:jiaweiOrz