KBDB 缺 vector delete——entry 下架後殘影向量永久佔據語意排名(CF deleteByIds 原生有,Arcrun 沒接) #58
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-17 demo 實測定性。
定性:CF Vectorize v2 原生支援
deleteByIds(bindingenv.VECTORIZE.deleteByIds([...])+REST 都有);Arcrun KBDB 從未接——kbdb/src/embed.ts全檔只有upsert,entry 被 deprecate/tombstone 後它的向量永遠留在索引裡。實測症狀(uncle6 demo,一手證據):demo 管線反轉重萃三輪後,語意查「住宿費上限每晚多少」的 top 1-2 都是 tombstone entry(content 已換成「(舊管線產物,已由定稿卡取代)」,但舊向量還在、照舊內容的相似度排名)——正確答案的 block 被殘影擠出前排。
reindexbackfill 只會 re-upsert 現役向量、不會移除已下架者(embed:false 者不掃=舊向量永生)。建議修法(互補三件):
metadata_json.status翻成 deprecated(或 embed:false)時,同步VECTORIZE.deleteByIds([entry_id])(vector id=entry id,upsert 同 id 慣例已在)。G9 removed 分支、tombstone 流程即刻受益。POST /embed/purge——掃「已嵌且 status=deprecated」的 entries 分批 deleteByIds,清歷史殘影(demo 現在就有一批等它清)。影響面:所有會更新/刪除文件的實例(RAG 產品每日 reset、Mira 精耕更新、14-E tombstone 家族)。同族背景:cypher 無 DELETE proxy(14-E)=「append-only 缺下架配套」的另一面。
08-01 複核:◐ 半通——建議 1 的一半已接線,建議 2 未做,保留
已完成(main 源碼實查):
kbdb/src/routes/entries.ts:193-196—DELETE /entries/:id已連帶刪向量:⇒ 本 issue 定性的「Arcrun 從未接 deleteByIds」已不再成立,硬刪這條路已補。
仍缺(本 issue 保留的理由):
metadata_json.status翻成 deprecated(或embed:false)時同步 deleteByIds」。entries.ts的 PATCH 路徑目前只有embedOnWrite(re-upsert),沒有 delete 分支。tombstone/G9 removed/Mira 精耕更新走的都是 deprecate 而非 DELETE ⇒ demo 實測的殘影症狀(tombstone 佔語意 top 1-2)尚未解決。POST /embed/purge批次清理端點不存在(git grep embed/purge kbdb/src→ 無)——歷史殘影仍無通道清。建議下一步:補 PATCH 的 status/embed 翻轉 → deleteByIds 分支 + purge 端點,兩件做完再關。
✅ 結案(2026-08-09 逐票查核)
這張票描述的問題現在已經不存在。
證據
`kbdb/src/actions/entry-crud.ts:146` 起已接 `VECTORIZE.deleteByIds`,並同步標記 D1 側「已無向量」讓兩邊不說兩套話(`b7af622`)。(總管親自 grep 複驗)
查核方式:讀現行程式碼實證,非讀票面推測。總管另抽驗過同批中三張(#5/#58/#59),全部屬實。
如果我判錯了,重開就是——關錯票的成本遠低於留著一堆假的待辦,而假待辦會讓 leo 看不出還剩什麼。
[總管·票務複驗 2026-08-09 晚] ✅ 關票——問題已不存在,證據是我自己跑出來的。
kbdb/src/routes/entries.ts有 4 處deleteByIds呼叫(entry 下架連帶清向量)。⇒ 票說的「CF deleteByIds 原生有、Arcrun 沒接」已不成立。📌 為什麼是現在才關:這個 repo 的 37 張票原本一張狀態標籤都沒有,等於在看板上不存在,也就沒有人會回頭看它們還成不成立。今晚做了一次全面驗傷,只有實際跑指令驗到問題真的消失的才關;查不出來的一律留著並標明卡在哪。
如果我判錯了(例如你要的其實比程式碼裡這些更多),直接重開這張票,我不會有意見。