[總管回報·最急] acr update 重部署掉了 kbdb 的 VECTORIZE/AI binding——semantic 全庫降級 keyword #32
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?
[總管] 一手時序證據:2026-07-07 下午(leo 跑 acr update 前)
GET /embed/backfill/status回enabled:true, embedded:52→60;update 後同端點回enabled:false, pending:5, embedded:60。embedEnabled()判 false ⇒ live arcrun-kbdb 缺 VECTORIZE/AI binding,?mode=semantic全庫降級 keyword。修法兩層:① 立即:帶 binding 的 gated redeploy 把 semantic 開回(leo 閘,B 類)② 根治:查
acr update路徑為何沒保留/注入 kbdbEmbed 的 binding(init 有、update 漏?)= self-hosted 自動注入斷鏈家族(同 KBDB_BASE_URL/OAUTH_KV 前科),update 應與 init 同一套注入。驗收:update 後
enabled:true且 pending 歸零重嵌、?mode=semantic命中。[總管] 根因釘死(源碼一手核實,比原判輕):不是 update 掉 binding 的 bug,是 config 漂移。
acr update本就支援 embed:讀~/.arcrun/config.yaml的kbdb_embed(update.ts:89kbdbEmbed: config.kbdb_embed === true),true 就取消 kbdb toml 的[[vectorize]]+[ai]註解段注入(deploy.ts:616-619)。kbdb_embed欄從沒被設)→ 今日acr update讀到 undefined=「未開」→ 按未開重部署 → binding 還原註解 →enabled:false。修法(leo 一行+一指令):
~/.arcrun/config.yaml加kbdb_embed: true→ 重跑acr update(Vectorize index 建立冪等,不會重建)→ 驗GET /embed/backfill/status回enabled:true。防複發教訓:繞過 acr(wrangler 直推)改的部署狀態,config 不知道 → 下次 acr update 就會「校正」回 config 認知=把手動改的東西滾回去。凡 wrangler 直推改了部署形態,config.yaml 要同步補(或事後補跑對應 acr 設定)。
[總管] 回歸已修(binding 恢復),根因定性+持久化防複發已做。
修法(我造成的回歸我修)
根因比 issue 假設更精確:不是「init 有 update 漏」——
update.ts:89與init.ts讀同一個config.kbdb_embed。真因=leo21c 的.arcrun.yaml從來沒設kbdb_embed:true(07-05 semantic 是總管手工注入 binding 開的,沒寫進 config)→ 任何acr update都把 kbdb toml 維持註解態部署 → VECTORIZE/AI binding 掉光。這是「開關沒持久化」,不是注入邏輯 bug。做的兩件事:
.arcrun.yaml加kbdb_embed: true(附註解記回歸教訓)→ 以後acr update自動維持 binding,不再複發。acr update印「開語義查詢:確保 Vectorize index 存在 ✓」。驗收(一手證據)
/settings):ai AI+vectorize VECTORIZE已回(原本只剩 d1)。GET /embed/backfill/status:enabled:false→enabled:true;觸發 backfill 後pending:5→0, embedded:60→65(重嵌完成)。🟡 新發現(另一問題,非本回歸,附上供查)
binding/embed 恢復後,semantic 查詢端點本身回 HTTP 400 空 body:
GET /entries/search?q=X&mode=semantic(kbdb 直連)與 cypher proxy 版皆 400;同參數mode=keyword正常回。即『binding 已在、embed 已嵌,但?mode=semantic查詢路徑 400』——與 07-06 記錄『embedded:37 語意查通』不一致,疑查詢端點參數契約有變或另有回歸。我不往端點內部鑽(守邊界)。建議 arcrun CC 查entries/search的 semantic 分支為何 400(是否缺必帶參數/契約變更)。這條不擋『binding 回歸已修』的結案,但 semantic 端到端要這條通才算真綠。教訓(記 arcrun-primer/dispatch-checklist 候補)
self-hosted 的『選配 binding』(embed/vectorize 這類非預設)必須持久化進 config,否則手工注入的 binding 會被下次
acr update清掉——同 KBDB_BASE_URL/OAUTH_KV 注入斷鏈家族,但根因是『開關沒進 config』而非『注入器漏』。08-01 複核:✅ 已修復,關閉
live 實測(leo21c prod):
enabled:true(issue 當時 update 後掉成false)、embedded從 60 長到 768 ⇒ VECTORIZE/AI binding 已回、semantic 未再降級 keyword。第①層(帶 binding 的 gated redeploy 把 semantic 開回)已達成。
kbdb/wrangler.toml現在也把注入步驟連同 metadata index 建立指令一起文件化在檔頭註解(含 #11 的 owner_id/entry_type/source/library filter 前置)。