diff --git a/system-dev/docs/3-specs/pending-changes.md b/system-dev/docs/3-specs/pending-changes.md index ec0605c..fca38d0 100644 --- a/system-dev/docs/3-specs/pending-changes.md +++ b/system-dev/docs/3-specs/pending-changes.md @@ -645,8 +645,30 @@ leo 的判準(2026-07-30): 2. **`rule.mjs:257` 那道「說是更新卻一顆 worker 都找不到 → 停手」不再是錯誤**。 在新判準下這個組合根本不會出現:沒有 worker ⇒ `mode` 本來就會是 `init`。 (該閘原本是 `#97` 的另一道門,其防護目的由「2b 已部署綁定絕對優先」承接。) - 3. **中心帳本降級成純優化/提示資料**,只保留它別處拿不到的東西: - 每顆 worker 上次部署的 `sha256`(差異更新)、`bundleBase`(跨通道互蓋警告 t157)。 + 3. **那張紙搬到用戶自己的帳號上,中心不再保管**(leo 2026-08-14 第三次收斂,比「降級」更徹底): + + > 「**我覺得根本不用我 keep**,這次裝的 sha **記在一張紙放你家**, + > 下次又要裝我就把那張紙拿出來看你上次裝了什麼版本, + > **如果不符,以實際有幾顆為準**。」 + + ⇒ 紀錄(每顆 worker 的 `sha256`、`bundleBase`)**寫在使用者自己的 Cloudflare 帳號上**, + 不再寫進我們的 `INSTALLER_KV`。 + + 🔑 **為什麼這個比「降級」更好——它讓那個 bug 變成不可能發生,而不是被處理掉**: + 紙跟東西放在同一個地方 ⇒ **他把帳號清空時,紙跟著消失** + ⇒ 結構上不可能出現「東西沒了、而我們手上還留著一張說他裝過的紙」。 + `#120` 因此不是「被修好」,是**沒有地方可以發生**。 + + 附帶好處: + · 跨通道互蓋(t157)不必再讀「對方通道的 KV」——紙就在帳號上,兩條通道看的是同一張 + · 我們不再保管一份「誰裝了什麼」的中央登記簿(少一個要維護、會漂、會外洩的東西) + · 帳本壞掉/被清掉/從沒有過,安裝器照樣 work + + ⏸ **要 leo 一併裁的兩題**(實作前必須有答案,但**做法由收工方判斷**): + ① 那張紙**貼在帳號的什麼位置**才會「跟著東西一起消失」—— + 要能被拆除工具連帶清掉,且不需要額外權限面 + ② `hasDeployRecordForToken`(t154:用一把 token 查「這些帳號有沒有裝過」) + 現在靠中心前綴掃描,搬走後要改成逐帳號去看——**這是預期內的成本,不是阻礙** 4. 🔴 **鐵律:帳本永遠不得產生「停手」。** 帳本與現場不合時, **以現場為準並順手把帳本改對**,不是把使用者擋在門外。