pending-changes:安裝器狀態判斷改看帳號、中心帳本降級(leo 2026-08-14 的檢修孔比喻)
同一天三次撞牆同一形狀:帳本與現場分岔時,安裝器相信帳本。 鐵律:帳本永遠不得產生停手;不合時以現場為準並順手改對帳本。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -615,3 +615,64 @@ leo 的判準(2026-07-30):
|
||||
- **⏸ 等 leo 裁的兩題(票上 §七)**:① App 前端跑 Portal origin(ES module)還是 iframe
|
||||
——短期 App 是否都由我們自己寫?② v0 只開 `nav` 一個掛載點夠不夠?
|
||||
- **狀態**:⏳ 待 confirm。沒 confirm 前照現行 SDD 走,不開新 SDD、不動功能程式碼。
|
||||
|
||||
---
|
||||
|
||||
## 提案:安裝器的狀態判斷一律看帳號,中心帳本降級成純優化資料(leo 2026-08-14)
|
||||
|
||||
- **leo 原話(本提案的來源,也是判準)**:
|
||||
> 「你吃飯了沒?是由我來判斷的嗎?我看到你沒有盤子,應該問你吃了嗎?
|
||||
> 但我沒問,堅持說你吃過了,**因為我這裡登記你吃了,結果讓你不能買飯**。」
|
||||
> 「我有**檢修孔**,需要去問問就好了,東西有沒有**一看就知道**,
|
||||
> **根本不應該由中心判斷**。」
|
||||
|
||||
- **病根(同一天三次撞牆,同一個形狀)**:
|
||||
安裝器用**自己的帳本**(`INSTALLER_KV` 的 `deployed:<accountId>:<subdomain>`)
|
||||
決定「這台裝過了沒」,而不是去看**帳號上現在有什麼**——
|
||||
但它手上一直握著那把 CF token,一次 API 就問得到(=leo 說的檢修孔)。
|
||||
|
||||
| 撞牆 | 帳本說 | 現場 | 結果 |
|
||||
|---|---|---|---|
|
||||
| leo(`#120`) | 裝過了 → `update` | leo21c 已被清空,0 顆 worker | `rule.mjs:257` 停手「找不到任何要更新的 worker」,**畫面上沒有出口** |
|
||||
| 封測者(`#123`) | 沒人綁這個名字 → 可以建 | 名字已被上次半殘安裝佔走 | CF 回 `title already exists`,**帳號永久卡死** |
|
||||
| 08-14 早上的處置 | — | — | **人工去 uncle6 刪掉那筆紀錄**才能繼續=把帳本改回跟現場一致。**那是繞過,不是修法** |
|
||||
|
||||
- **要達成什麼**:**帳本壞掉、被清掉、或根本不存在時,安裝器照樣裝得起來。**
|
||||
|
||||
- **變更面(規格層,不是實作指定)**:
|
||||
1. **`mode`(init/update)的來源改成帳號現況**——「這個帳號上有沒有我們的 worker」。
|
||||
`worker.js:1750-1756` 現在讀兩條通道的 KV 前綴決定,改成問帳號。
|
||||
2. **`rule.mjs:257` 那道「說是更新卻一顆 worker 都找不到 → 停手」不再是錯誤**。
|
||||
在新判準下這個組合根本不會出現:沒有 worker ⇒ `mode` 本來就會是 `init`。
|
||||
(該閘原本是 `#97` 的另一道門,其防護目的由「2b 已部署綁定絕對優先」承接。)
|
||||
3. **中心帳本降級成純優化/提示資料**,只保留它別處拿不到的東西:
|
||||
每顆 worker 上次部署的 `sha256`(差異更新)、`bundleBase`(跨通道互蓋警告 t157)。
|
||||
4. 🔴 **鐵律:帳本永遠不得產生「停手」。** 帳本與現場不合時,
|
||||
**以現場為準並順手把帳本改對**,不是把使用者擋在門外。
|
||||
|
||||
> leo 補充(2026-08-14,這句定義了帳本的身分):
|
||||
> 「**我只是記錄上次的,這次去看看**,本來要記錄 sha,
|
||||
> **一看東西都沒了,也不能硬說你裝過**。」
|
||||
>
|
||||
> ⇒ **帳本記的是「上次」,不是「現在」。** 它是歷史紀錄,不是狀態宣告。
|
||||
> 每一趟都要去看現場;**看到的與帳本衝突時,看到的才算數**。
|
||||
> ⇒ 這也是為什麼「帳本不得停手」不是一條例外處理,而是它本來就沒有那個權限——
|
||||
> 一份講過去的紀錄,本來就不該否決現在觀察到的事實。
|
||||
|
||||
- **不動的牆**:
|
||||
· 2b「已部署 worker 的綁定=事實,絕對優先」不得放寬(`#97` 的災情來源)
|
||||
· 接管同名資源仍須呼叫端聲明 `createNameIsOurs`,預設 fail-closed(`#123` 的反向災情)
|
||||
· 判斷仍只有**一份**,在 `shared/resource-rule/`;安裝器不得自建第二套
|
||||
|
||||
- **影響分析**:
|
||||
· 動的是 `installer/oauth-prototype/worker.js` 的 mode 決定點 + `shared/resource-rule/rule.mjs`
|
||||
的 update-mode 前置閘;**鏡像兩份要同批**(`MIRROR.json` 守著)
|
||||
· 多一次帳號查詢(`listAllScripts` 本來就會查,可共用,預期零額外成本)
|
||||
· 不動 KBDB、無 schema 異動、無新金鑰面、無新公開端點
|
||||
· 會讓 `#120` 從「要人工清中心紀錄」變成不需要人介入
|
||||
|
||||
- **牽涉的票**:`inkstone/Arcrun#120`(重裝死結,本提案的主治對象)
|
||||
|`inkstone/Arcrun#123`(已併 `9ad95ee`,是同一個病在資源層的那一半)
|
||||
|`inkstone/arcrun-rag#78`(用戶版 uninstaller,受益但不因此結案)
|
||||
|
||||
- **狀態**:⏳ **待 leo confirm 範圍**。方向已由 leo 當面給定;未 confirm 前不動功能程式碼。
|
||||
|
||||
Reference in New Issue
Block a user