我按了更新,我的工作流和登入全不見了(資料沒掉,但 worker 被綁到全空的新抽屜) #97
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
我按了更新,然後我的東西全不見了。 工作流一支都沒有、portal 把我登出、零件解不出來。
(資料沒掉——但當下看起來就是全沒了。這一點本身就是最傷的部分。)
實撞(leo21c,2026-08-12 12:0x)
跑
acr update→ 23/23 worker 部署成功。跑完之後:查 Cloudflare:帳號上的 KV 從 9 顆變成 18 顆,而 worker 綁的是新建的那 9 顆(全空)。
根因:兩邊各自決定 KV 要叫什麼名字
arcrun-rag-<namespace>-kv-webhooksWEBHOOKS、SESSIONS_KV、RECIPES…(cli/src/lib/deploy.ts:120直接拿 binding 名當標題)ensureKvNamespace(title, existing)照標題找 → 找不到就建新的 → 部署綁新的。它的註解寫著這是「冪等:已存在則重用」——在安裝器裝出來的實例上,那個前提不成立。
⇒ 任何「用安裝器裝、之後跑更新」的人都會撞到這個。 不是 leo 一台的問題。
為什麼特別嚴重
Leo/Arcrun#4),而它現在會弄壞實例要達成什麼
跑更新之後,使用者的東西還在原地。 不是「可以還原」,是不該壞。
怎麼驗才算數
紅線
相關
Leo/Arcrun#4(更新是唯一補裝管道)|Leo/Arcrun#96(舊 CLI 打停用帳號、失敗被 ✓ 夾住)|Leo/Arcrun#95(畫面說已是最新版但引擎是舊的)|Leo/mira#8(安裝器自己從 email 算庫名 —— 同一種「系統替使用者決定名字」)🔴 同一個病還有第二層:D1,而且更嚴重(2026-08-12 稍晚)
KV 那層修好之後,leo 打開他的實例說:「leo21c 是掛掉的,總圖沒東西,
4 個 workflows 有一個 failed,子庫全不見了。」
根因一模一樣,只是換一種資源
acr update裡有一步「D1arcrun-kbdb(冪等)✓」——它也是照名字找。而 leo 當天早上剛把叫這個名字的舊庫刪掉(那顆確實該刪,是還原前的舊拷貝)
⇒ 它建了一顆全新的空 D1 並把 kbdb 綁上去(
6c1d1dd9…,建於2026-08-12T03:27:48Z)。這一層比 KV 更難修
D1 不支援改名——
PUT要求read_replication、PATCH直接回Unrecognized key(s) in object: 'name'。⇒ KV 那招(改名讓開+改名接手)在這層行不通,只能直接改 worker 的 binding,
而那是下次跑更新就會被蓋掉的治標。
因此這張票的範圍要擴大
原本寫的是「更新會另建一整套空 KV」。實際上是:
凡是「照名字 ensure 資源」的地方都有這個病——KV 九顆、D1 一顆,
下一個可能是 Vectorize(那支也是
ensureVectorizeMetadataIndexes)。⇒ 要修的不是「KV 那段」,是**「照名字 ensure」這個做法本身**:
使用者的資源叫什麼名字,不該由更新指令這一側決定。
額外一條實測到的判準
「工作流列得出來」不等於「實例是好的」。 我修完 KV、確認 9 支工作流回來、
綁定也對,就宣布救回來了——而 leo 一打開,總圖是空的。
資料層綁錯的時候,工作流列表照樣正常,因為那是另一顆 KV。
⇒ 復原的驗收標準要是使用者真的會打開的那個畫面,不是任何中間層的清單。
✅ 2026-08-12 傍晚:修好了,而且在 leo 的真機上驗過
併於
d7c6bd0(分支fix/adopt-live-bindings-97)。修法:不再用名字找資源 → 已部署的 worker 綁著什麼,那就是事實
(新檔
cli/src/lib/resource-resolver.ts)。三條規則:① 綁著的原封沿用 ② 只有「確定沒人綁過」才准新建 ③ 說不準就整趟停手。
真機前後對照(leo 自己在他那台跑 update)
這是那天第一次「跑更新沒有弄壞東西」。
本機驗證
那條線做了三件我沒交辦的
cf-api不得再提供任何「找不到同名就順手建一顆」的原語create*🔑 順帶記一條會省下未來很多時間的
leo 的
acr是npm link到 repo 的cli/dist/⇒ CLI 的修法不需要出貨、不需要部署,本機重編完他手上那支立刻就是修好的。
仍未收
CONSOLE_TENANT這種「使用者身分由部署設定決定」的東西還在——同一個病的殘留。今天是把值從
leo改成bfezv28v止血,不是修好。