From 49248b18c51bd6797ae5330224fec80017309bc5 Mon Sep 17 00:00:00 2001 From: uncle6me-web Date: Fri, 14 Aug 2026 14:20:56 +0800 Subject: [PATCH] =?UTF-8?q?docs(teardown):=20=E8=A8=98=E4=B8=8B=E5=85=A9?= =?UTF-8?q?=E5=B1=A4=E5=92=AC=E5=90=88=E7=9A=84=E5=B7=B2=E7=9F=A5=E9=99=90?= =?UTF-8?q?=E5=88=B6=EF=BC=88=E8=B7=A8=20worker=20=E4=BE=9D=E8=B3=B4?= =?UTF-8?q?=E9=8F=88=EF=BC=8C2026-08-14=20=E5=AF=A6=E6=92=9E=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 今天實跑撞到、也解掉的真事:kbdb-graph-plugin(不屬於這台實例,正確被排除不動) 身上有 service binding 指著 arcrun-kbdb(要刪的)→ CF 拒絕刪除,本工具只回報那次 DELETE 失敗,不會主動點出「有外部依賴卡住」。若選擇半殘留(清資源留殼),下一步 acr init/update 的 resource-rule fail-closed 保護會正確拒絕重裝——這是它該有的行為, 但代表本工具留下的半殘留會讓下一步卡住,不是「拆一半也沒關係」。 本工具目前無法自動偵測跨 worker 依賴鏈,寫進「已知限制」而不是假裝判準完備。 Co-Authored-By: Claude Opus 5 --- scripts/teardown-instance.mjs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/scripts/teardown-instance.mjs b/scripts/teardown-instance.mjs index d0da4e7..d3e91cd 100644 --- a/scripts/teardown-instance.mjs +++ b/scripts/teardown-instance.mjs @@ -32,6 +32,20 @@ * - 中心 KV 清理走 `wrangler kv key`,用的是本機既有的 wrangler OAuth 登入態(不是 CF API * token),因為 INSTALLER_KV 住在另一個帳號(uncle6,官方安裝器所在),本工具沒有那把帳號 * 的 API token。呼叫前務必 `npx wrangler whoami` 確認登入態是 uncle6,不是別的帳號。 + * - 🔴 **偵測不到「不屬於這台實例的 worker 反過來依賴這台實例的 worker」這種形狀** + * (2026-08-14 實撞,兩層咬合):`kbdb-graph-plugin`(不認得,正確被排除、不動)身上有 + * service binding 指著 `arcrun-kbdb`(要刪的)。CF 因此拒絕刪 `arcrun-kbdb`—— + * 本工具當下**只會回報那次 DELETE 呼叫失敗**,不會主動告訴你「有一個外部依賴卡住了」, + * 需要人自己讀錯誤訊息裡的 worker 名字去追。 + * ⇒ **第二層**:kbdb-graph-plugin 被移除後 `arcrun-kbdb` 才刪得掉,但如果選擇「先清掉 + * `arcrun-kbdb` 綁著的資源、留著這顆殼」這條路(半殘留),下次呼叫 `acr init`/`acr update` + * 時,`shared/resource-rule` 的 fail-closed 保護(Arcrun#97 那道)會正確地發現 + * 「這顆 worker 的 binding 指向的資源已經找不到」而**拒絕重裝**(這是它該有的行為,不是 + * bug;但代表**本工具留下的半殘留會讓下一步——重裝——卡住**,不是「拆一半也沒關係」)。 + * ⇒ **結論**:本工具目前不會自動偵測或處理跨 worker 的依賴鏈;遇到「刪不掉、被誰誰誰的 + * service binding 卡住」時,操作者要自己判斷那個「誰誰誰」是不是這台實例的一部分 + * (是 → 一併排入拆除;不是 → 照紅線問人再決定要不要動它),**拆完後如果選了半殘留, + * 要有心理準備下一步的 fail-closed 檢查會擋下重裝**。 * * 用法: * node scripts/teardown-instance.mjs plan --account-id --api-token [--keep w1,w2]