Files
Arcrun/system-dev/docs/3-specs/library-map/tasks.md
T
uncle6me-web 962d863ef7 fix(kbdb): 藏書地圖 M3 收尾——讀端自動核對重算,不再依賴 ingest 接鏈
真因(總管實測,system-dev/wiki/mistakes.md 08-08 段):design 原訂「ingest 尾端呼
POST /map/recompute」,但 repo 內查無任何呼叫點,三週沒接上,沒手動 backfill 過的租戶
(絕大多數)GET /map 恆回空;MCP 說明文字還宣稱「地圖由 ingest 尾端自動重算(M3)」——假話。

leo 否決「降級成即時聚合、不維護快取」的提案(會丟失 narrative 這類摘要本體,只算得出
count)。改法:GET /map/GET /map/:library 讀端自己核對即時三元組數,落差就地呼叫既有的
recomputeLibraryMap 補算(kbdb/src/actions/library-map.ts ensureFreshLibraryMaps)。聚合
SQL 沒有第二套、narrative/relation_profile/bridges 摘要欄位原封不動,只是觸發時機從「等
外部呼叫」改成「讀的當下順手核對」。同時解掉:全租戶自動 backfill/跟得上新資料/不依賴
跨 repo 的 ingest 接鏈。

附帶修 recomputeLibraryMap 的 narrative 欄位:沒帶值時原本會清空,改成沿用上一版(避免
自動重算把 ingest 端/人工填過的 narrative 靜默洗掉)。

修正三處說謊的說明文字(mcp/src/tools/kbdb_map.ts、console-ui console/index.html):
「地圖由 ingest 尾端自動重算(M3)」不存在,改為誠實描述讀端即時核對機制;404 語意從
「從未 recompute」改為「查無此庫」(已知但空的庫現在會自動補成 triplet_count:0 的 200,
不會落到 404)。

測試:kbdb 新增 6 案(18/18 全綠,覆蓋自動 backfill/跟得上資料/narrative 保留/
404 vs 空庫誠實分辨/owner 隔離/無 triplet template 不報錯);mcp 新增 1 案釘住舊謊言
不再出現。kbdb 125/125、mcp 69/77(同基線 8 個 oauth 既有失敗,非本次引入)全綠;
tsc 兩包乾淨(kbdb 1 個既有 auth.test.ts 錯誤與 stash 前一致,非本次引入)。

SDD:system-dev/docs/3-specs/library-map/tasks.md M3 從「07-19 誤標 」更正為實況;
design.md §3 加 2026-08-08 更正說明。未動 frontmatter status(仍 draft,D35 生命週期
鐵律留給總管/leo 裁)。

殘項:本次修改只在本機驗證(真 SQLite + 假 binding 單元測試),未部署 prod;未在真實
KBDB(如 yuga3bse 租戶)重新實測 kbdb_get_map 非空——需部署後才能貼實測輸出。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 00:44:55 +08:00

4.7 KiB
Raw Blame History

library-map — Tasks

進度真相源。依 design §7 歸屬;動工前總管審本 SDD(#39 明令)。

# 任務 依賴 狀態 備註
M1 library_map Templateslots 定義(含 triplet 按庫過濾現況核實;不足則 Triplet template 加 optional library slot B 07-19PR#72 merge D6 零建表。核實:triplet 無 library slot → 已走預案(design §1 核實結果)
M2 kbdb base POST /map/recompute?library=GET /mapGET /map/:library(聚合 SQL 住基本盤;交易式 supersede B M1 07-19PR#72 mergeleo21c 33d88016demo 699018af 已部署+backfillleo21c kb 111/notes 108、demo general 23 PR+測試(真 SQLite 驗聚合);merge 後 gated 部署(leo 閘)+逐庫 backfill recompute
M3 讓地圖跟得上資料、全租戶自動 backfill(原訂做法:ingest 尾端接鏈逐庫呼 recompute B M2 🔁 07-19 標的 是誤報,08-08 更正並改法重做 見下方 08-08 段
M4 MCPinstructions 注入全館地圖+get_map 工具 B M2 07-19PR#73 mergeleo21c 1e73da90 部署,MCP instructions 實載地圖) 與 #68 同族薄殼;kbdb_get_mapconnect 時注入(isolate TTL 快取,失敗靜默略過不擋連線);merge 後 gated redeploy arcrun-mcpleo 閘)
M5 GUI 首頁:全館地圖 renderconsoleportal B M2 07-19PR#74 mergeleo21c cypher 9bc3a1f3 部署) 取代空白搜尋框
M6 D30 連動:map 層 embedsemantic 庫路由第一跳 B M2 #58/#59/#60 家族的第一片治本
M7 dogfoodleo 庫(leo21c)首個實例 backfill+驗收(requirements 驗收段全項) A M3-M5 🔄 demo 側實質驗過;leo21c 正式驗收單(requirements 全項)待做 過了才進 demo/客戶

M3 更正(2026-08-08matrix/arcrun CC,總管交辦)

07-19 標 是誤報arcrun-rag 670f38a 只接了 rag-ingest-cards 那一條管線,repo 內 grep -rn "map/recompute" --include=*.ts 排除 node_modules.github-public)查無任何呼叫點, 三週來沒手動 backfill 過的租戶(絕大多數、含 youlin 與所有新租戶)GET /map 恆回空, kbdb_get_map 的 MCP 說明文字還宣稱「地圖由 ingest 尾端自動重算(M3)」——那是假話(詳見 system-dev/wiki/mistakes.md 08-08 段「藏書地圖 kbdb_get_map 對多數租戶永遠是空的」)。

leo 裁示:總管原提兩案(①接上 M3 原訂設計/②降級成只算 count 的即時聚合,不維護快取), leo 否決②——「藏書地圖就是 arcrun 的最重要功能,讓 AI 一眼看到所有庫的摘要」, 即時聚合算得出 count、算不出 narrative,降級等於砍功能。

改法(非①非②,第三案):不再依賴任何外部呼叫者(ingest workflow)記得呼 POST /map/recompute——那條線跨 repo/跨租戶,已證實三週沒人接上,天生脆弱。改成 GET /mapGET /map/:library 讀端自己核對即時三元組數,落差就地呼叫既有的 recomputeLibraryMapkbdb/src/actions/library-map.ts ensureFreshLibraryMaps)補算。 聚合 SQL 沒有第二套、narrative/relation_profile/bridges 這些摘要欄位原封不動——不是砍成 只算數字,只是觸發時機從「等外部呼叫」改成「讀的當下順手核對」。同時解掉: ① 全租戶自動 backfill(不需要任何人做任何事)② 跟得上資料(下一筆 ingest 進來, 下一次讀就反映)③ 不再依賴跨 repo 的 ingest 接鏈。

narrative 欄位有一個已知誠實限制:這個機制只保留既有 narrative(不會被自動重算洗掉), 但不會生成新的 narrative——沒人手動填過、也沒有 ingest 端寫過的庫,narrative 仍是空的 (content 顯示「(narrative 待 ingest 補寫)」)。這是 design §1 本來就承認的缺口 narrative 抽自 wiki 首段,屬內容語意萃取,非聚合 SQL 能生出來),非本次新增。

驗證kbdb/tests/library-map.test.ts 新增 6 案(全綠,18/18)涵蓋:從未手動 recompute 即自動補齊/跟得上新資料(不手動重算,數字自動更新)/narrative 不被靜默洗掉/ GET /map/:library 誠實分辨查無此庫(404) vs 已知空庫(200)owner 隔離/無 triplet template 不報錯。mcp/tests/unit/tools/kbdb-map.test.ts 新增 1 案釘住舊謊言不再出現(18/18 全綠)。 tsc 兩包乾淨。實測:yuga3bse 租戶(從未 backfill 過、真實 triplet 資料橫跨 5 個庫)改前 kbdb_get_map{libraries:[],count:0}——改動待部署後需重新實測驗證非空。