藏書地圖 Library Map:KBDB 查詢前的定向層(Template+ingest 重算+MCP instructions/get_map+GUI 首頁)——leo spec 附全文,請出 SDD #39

Closed
opened 2026-07-08 13:38:08 +00:00 by Leo · 10 comments
Owner

leo 2026-07-08 拍板立案(發想自 OpenHuman Memory Tree,但 KBDB 有 graph 所以地圖是「算的」不是「猜的」)。歸屬:能力真身=框架件(KBDB Template/ingest 重算步驟/arcrun-mcp instructions 注入+get_map 工具/console GUI 首頁)——arcrun-rag、Graph、mira 全拉 Arcrun,寫一次全實例受益;leo 自己的庫當第一個 dogfood 實例。請出 SDD(requirements/design/tasks)交總管審後動工。

spec 原文(真身在 Leo/InkStoneCo system-dev/docs/6-user/kbdb-library-map-spec.md,以下全文照貼):


KBDB 藏書地圖(Library Map)功能規格

給 CC 的背景與需求摘要。發想來源:分析 OpenHuman(tinyhumansai/openhuman)的 Memory Tree 架構後,確認 KBDB 缺一層「查詢前的環境式定向層」。

1. 問題陳述

KBDB 目前是純 pull 模式的查詢引擎:LLM 走 MCP、人走 GUI,但兩者都預設「查詢者已經知道要查什麼」。一個新開的 LLM session 面對 MCP 時,知道有 query 工具,卻不知道這座圖書館裡有哪些藏書——除非循序掃一輪所有庫,拿推理成本換一張本來可以預先編好的地圖。

OpenHuman 的解法是用 LLM 生成摘要樹,session 啟動時由 harness 把樹頂摘要注入 system prompt(push 地圖 + pull 細節)。但它底層只有無結構的 chunk,摘要是「猜的」;KBDB 底層已有三元組 graph,地圖可以是「算的」——用 SQL 從 graph 機械式導出,零漂移、零額外維護、每行可驗證。

2. 設計原則

  1. 地圖是查詢結果,不是生成結果。 骨架全部由 graph 統計導出,不用 LLM 摘要。
  2. narrative 不生成,從 wiki 抽取。 每庫「是什麼」的一句話,ingest 時抽自該庫頂層 wiki 第一段,存成 slot。
  3. 遵守 KBDB 三表不變量。 不建新 table、不 ALTER。地圖 = 新 Template + 每庫一個 Block + Slots。
  4. 有界。 地圖 block 數量 = 庫的數量。向量策略不變(僅 normalization 用途)。
  5. 版本語意。 掛 supersede/deprecate status slot + commit hash,沿用既有機制。

3. 資料結構:library_map Template

每個庫(repo/folder)一個 map block。建議 schema fields:

key type 說明 來源
library text 庫名/repo 識別 ingest 參數
narrative text 一句話描述這個庫是什麼 抽自頂層 wiki 第一段
top_entities array 核心主題 entity(top-N by degree) SQL:entity 在該庫三元組中的出現次數排序
relation_profile array 主要 relation 類型分布 SQL:該庫 predicate 統計(呈現庫的「性格」)
bridges array 與其他庫共享的 entity(跨庫橋接點) SQL:同一 entity 出現於多庫的 join
triplet_count number 規模 SQL count
commit_hash text 鮮度/版本身分 ingest 時的 commit
status text active / superseded 沿用 supersede 機制

三元組需能按庫過濾——確認現有 Triplet block 的 source / source_id 是否足以定位所屬庫;若不足,在 Triplet Template schema 加一個 optional library field(改 Template schema,不動 table)。

4. 更新機制

  • 地圖是 ingest 的副產品:每次 ingest 完成後,只對受本次 commit diff 影響的庫重算 map block(新 block + 舊 block 標 superseded)。
  • 重算 = 一段 SQL(degree 排序、predicate 統計、跨庫 join)+ 一次 wiki 首段抽取。無 LLM 呼叫。
  • 不做定時全量重摘要(OpenHuman 的 20 分鐘 auto-fetch 模式在此結構性不需要)。

5. 注入機制(本功能真正的重點)

兩條路都要鋪:

MCP 端

  1. 全館地圖(每庫一行:庫名 + narrative + top 3 entities,總量控制在數百 token)放進 MCP server instructions——任何接上的 agent 開場即持有地圖,不需先查詢。
  2. 新增 get_map 工具:不帶參數回全館地圖,帶 library 參數回該庫詳細地圖(完整 top_entities、relation_profile、bridges)。tool description 註明:「不確定該查什麼時,先呼叫此工具」。

GUI 端

  • 首頁改為全館地圖 render(有哪些庫、每庫在講什麼、跨庫橋接),而非空白搜尋框。

6. Retrieval 流程(改造後)

LLM session 啟動
  → MCP instructions 已含全館地圖(push,零查詢)
  → 需要細節:get_map(library) 定位庫(可選)
  → graph query 找到 entity/關係
  → 依 index 取回 repo 中的 wiki 定稿(source of truth 不變)

7. 明確不做

  • 不用 LLM 生成摘要當地圖內容(不可驗證、會漂移)
  • 不建 SQLite/獨立摘要樹結構(KBDB 三表即足夠)
  • 不增加無界 embedding(向量仍僅供 normalization)
  • 地圖 md 不需先落地成檔案才入庫——但可考慮同時輸出每庫 index.md(Logseq outliner 格式)commit 回 repo,人機共用同一份地圖(optional,phase 2)

8. 建議實作順序

  1. 確認 Triplet 的庫歸屬欄位(source / library)
  2. library_map Template
  3. ingest pipeline 加 map 重算步驟(SQL + wiki 首段抽取)
  4. MCP:instructions 注入 + get_map 工具
  5. GUI 首頁地圖(可後行)
  6. (Phase 2)index.md 輸出回 repo

[總管]

leo 2026-07-08 拍板立案(發想自 OpenHuman Memory Tree,但 KBDB 有 graph 所以地圖是「算的」不是「猜的」)。**歸屬**:能力真身=框架件(KBDB Template/ingest 重算步驟/arcrun-mcp instructions 注入+`get_map` 工具/console GUI 首頁)——arcrun-rag、Graph、mira 全拉 Arcrun,寫一次全實例受益;leo 自己的庫當第一個 dogfood 實例。請出 SDD(requirements/design/tasks)交總管審後動工。 spec 原文(真身在 `Leo/InkStoneCo` `system-dev/docs/6-user/kbdb-library-map-spec.md`,以下全文照貼): --- # KBDB 藏書地圖(Library Map)功能規格 > 給 CC 的背景與需求摘要。發想來源:分析 OpenHuman(tinyhumansai/openhuman)的 Memory Tree 架構後,確認 KBDB 缺一層「查詢前的環境式定向層」。 ## 1. 問題陳述 KBDB 目前是純 pull 模式的查詢引擎:LLM 走 MCP、人走 GUI,但兩者都預設「查詢者已經知道要查什麼」。一個新開的 LLM session 面對 MCP 時,知道有 query 工具,卻不知道這座圖書館裡有哪些藏書——除非循序掃一輪所有庫,拿推理成本換一張本來可以預先編好的地圖。 OpenHuman 的解法是用 LLM 生成摘要樹,session 啟動時由 harness 把樹頂摘要注入 system prompt(push 地圖 + pull 細節)。但它底層只有無結構的 chunk,摘要是「猜的」;KBDB 底層已有三元組 graph,**地圖可以是「算的」**——用 SQL 從 graph 機械式導出,零漂移、零額外維護、每行可驗證。 ## 2. 設計原則 1. **地圖是查詢結果,不是生成結果。** 骨架全部由 graph 統計導出,不用 LLM 摘要。 2. **narrative 不生成,從 wiki 抽取。** 每庫「是什麼」的一句話,ingest 時抽自該庫頂層 wiki 第一段,存成 slot。 3. **遵守 KBDB 三表不變量。** 不建新 table、不 ALTER。地圖 = 新 Template + 每庫一個 Block + Slots。 4. **有界。** 地圖 block 數量 = 庫的數量。向量策略不變(僅 normalization 用途)。 5. **版本語意。** 掛 supersede/deprecate status slot + commit hash,沿用既有機制。 ## 3. 資料結構:`library_map` Template 每個庫(repo/folder)一個 map block。建議 schema fields: | key | type | 說明 | 來源 | |---|---|---|---| | `library` | text | 庫名/repo 識別 | ingest 參數 | | `narrative` | text | 一句話描述這個庫是什麼 | 抽自頂層 wiki 第一段 | | `top_entities` | array | 核心主題 entity(top-N by degree) | SQL:entity 在該庫三元組中的出現次數排序 | | `relation_profile` | array | 主要 relation 類型分布 | SQL:該庫 predicate 統計(呈現庫的「性格」) | | `bridges` | array | 與其他庫共享的 entity(跨庫橋接點) | SQL:同一 entity 出現於多庫的 join | | `triplet_count` | number | 規模 | SQL count | | `commit_hash` | text | 鮮度/版本身分 | ingest 時的 commit | | `status` | text | active / superseded | 沿用 supersede 機制 | 三元組需能按庫過濾——確認現有 Triplet block 的 `source` / `source_id` 是否足以定位所屬庫;若不足,在 Triplet Template schema 加一個 optional `library` field(改 Template schema,不動 table)。 ## 4. 更新機制 - 地圖是 ingest 的副產品:每次 ingest 完成後,只對**受本次 commit diff 影響的庫**重算 map block(新 block + 舊 block 標 superseded)。 - 重算 = 一段 SQL(degree 排序、predicate 統計、跨庫 join)+ 一次 wiki 首段抽取。無 LLM 呼叫。 - 不做定時全量重摘要(OpenHuman 的 20 分鐘 auto-fetch 模式在此結構性不需要)。 ## 5. 注入機制(本功能真正的重點) 兩條路都要鋪: **MCP 端** 1. **全館地圖**(每庫一行:庫名 + narrative + top 3 entities,總量控制在數百 token)放進 MCP server instructions——任何接上的 agent 開場即持有地圖,不需先查詢。 2. 新增 `get_map` 工具:不帶參數回全館地圖,帶 `library` 參數回該庫詳細地圖(完整 top_entities、relation_profile、bridges)。tool description 註明:「不確定該查什麼時,先呼叫此工具」。 **GUI 端** - 首頁改為全館地圖 render(有哪些庫、每庫在講什麼、跨庫橋接),而非空白搜尋框。 ## 6. Retrieval 流程(改造後) ``` LLM session 啟動 → MCP instructions 已含全館地圖(push,零查詢) → 需要細節:get_map(library) 定位庫(可選) → graph query 找到 entity/關係 → 依 index 取回 repo 中的 wiki 定稿(source of truth 不變) ``` ## 7. 明確不做 - ❌ 不用 LLM 生成摘要當地圖內容(不可驗證、會漂移) - ❌ 不建 SQLite/獨立摘要樹結構(KBDB 三表即足夠) - ❌ 不增加無界 embedding(向量仍僅供 normalization) - ❌ 地圖 md 不需先落地成檔案才入庫——但可考慮同時輸出每庫 `index.md`(Logseq outliner 格式)commit 回 repo,人機共用同一份地圖(optional,phase 2) ## 8. 建議實作順序 1. 確認 Triplet 的庫歸屬欄位(source / library) 2. 建 `library_map` Template 3. ingest pipeline 加 map 重算步驟(SQL + wiki 首段抽取) 4. MCP:instructions 注入 + `get_map` 工具 5. GUI 首頁地圖(可後行) 6. (Phase 2)index.md 輸出回 repo [總管]
Author
Owner

[總管雲端 2026-07-18] demo 切片先行上線(leo 指示「先修必修 bug 就給書庫總圖」)

  • GUI 端(spec §5 GUI/§7 人機共用)已在 rag-demo 落地:portal「總圖」頁(全庫三元組力導向一張網,PR#63)+知識庫 repo system-dev/wiki/00-MAP.md(arcrun-rag install/gen-library-map.mjs 機械計算:藏書+一句話定義/核心實體 degree/謂詞分布/知識網全表)——AI 開場注入 00-MAP.md 即持有館藏全貌。
  • 附帶根治:KBDB searchByTemplate N+1(19s→1.3s,PR#63 內);graph/總圖查詢因此從 20-30s 降到 1-3s。
  • 本 issue 剩餘本體(仍待出 SDD):library_map Template+ingest 重算步驟+MCP instructions 注入+get_map 工具+多庫 bridges。demo 切片是單庫版驗證,資料結構未動。
**[總管雲端 2026-07-18] demo 切片先行上線(leo 指示「先修必修 bug 就給書庫總圖」)** - **GUI 端(spec §5 GUI/§7 人機共用)已在 rag-demo 落地**:portal「總圖」頁(全庫三元組力導向一張網,PR#63)+知識庫 repo `system-dev/wiki/00-MAP.md`(arcrun-rag `install/gen-library-map.mjs` 機械計算:藏書+一句話定義/核心實體 degree/謂詞分布/知識網全表)——AI 開場注入 00-MAP.md 即持有館藏全貌。 - **附帶根治**:KBDB `searchByTemplate` N+1(19s→1.3s,PR#63 內);graph/總圖查詢因此從 20-30s 降到 1-3s。 - **本 issue 剩餘本體**(仍待出 SDD):`library_map` Template+ingest 重算步驟+MCP instructions 注入+`get_map` 工具+多庫 bridges。demo 切片是單庫版驗證,資料結構未動。
Author
Owner

SDD 已出稿(2026-07-19,leo 催辦後補課):system-dev/docs/3-specs/library-map/(requirements/design/tasks,commit 1ee0dbd,status: draft)。

對原 spec 的兩個補充裁定:

  1. 重算 SQL 的家=kbdb base 內建端點 POST /map/recompute(D6 鐵律:插件/workflow 禁 SQL,聚合查詢只能住基本盤);ingest 尾端 http_request 呼它。
  2. 與 D30 檢索治本連動:map block 的 narrative+top_entities=「只 vectorize entities+一句話」的嵌入素材,semantic 第一跳打 map 層做庫路由(M6)。

任務 M1-M7 已列(M2 kbdb 端點是關鍵路徑)。待總管/leo 審 design 後動工。

SDD 已出稿(2026-07-19,leo 催辦後補課):`system-dev/docs/3-specs/library-map/`(requirements/design/tasks,commit `1ee0dbd`,status: draft)。 對原 spec 的兩個補充裁定: 1. **重算 SQL 的家=kbdb base 內建端點** `POST /map/recompute`(D6 鐵律:插件/workflow 禁 SQL,聚合查詢只能住基本盤);ingest 尾端 http_request 呼它。 2. **與 D30 檢索治本連動**:map block 的 narrative+top_entities=「只 vectorize entities+一句話」的嵌入素材,semantic 第一跳打 map 層做庫路由(M6)。 任務 M1-M7 已列(M2 kbdb 端點是關鍵路徑)。待總管/leo 審 design 後動工。
Author
Owner

M1+M2 PR 已開:#72(分支 feat/library-map-base)。

重點:

  • triplet 按庫定位核實(spec §3 末段的確認事項):prod triplet template 無 library slot、entries metadata.library 未標記 → 不足,已走預案(recompute 冪等補 optional library slot,改 template 不動表;值由 ingest M3 補寫)。過渡期 recompute 支援 source_prefix fallback 讓舊 triplet 靠 source_uri 前綴歸庫。
  • 聚合 SQL 全部住 kbdb base(D6 歸屬裁定);45/45 測試過(node:sqlite 真 SQLite 驗聚合)、tsc 乾淨。
  • merge 後需 gated redeploy kbdb(leo 閘,含 migration 0003)+首次 backfill 逐庫呼 recompute。M3(ingest 接鏈/narrative 抽取)、M4(MCP)、M5(GUI)待續。
M1+M2 PR 已開:https://git.uncle6.me/Leo/Arcrun/pulls/72(分支 `feat/library-map-base`)。 重點: - **triplet 按庫定位核實(spec §3 末段的確認事項)**:prod triplet template 無 `library` slot、entries `metadata.library` 未標記 → 不足,已走預案(recompute 冪等補 optional `library` slot,改 template 不動表;值由 ingest M3 補寫)。過渡期 recompute 支援 `source_prefix` fallback 讓舊 triplet 靠 `source_uri` 前綴歸庫。 - 聚合 SQL 全部住 kbdb base(D6 歸屬裁定);45/45 測試過(node:sqlite 真 SQLite 驗聚合)、tsc 乾淨。 - merge 後需 **gated redeploy kbdb(leo 閘,含 migration 0003)+首次 backfill 逐庫呼 recompute**。M3(ingest 接鏈/narrative 抽取)、M4(MCP)、M5(GUI)待續。
Author
Owner

M1+M2 已 merge(PR#72,總管逐項審過:migration 純 seed 零建表 D6 /SQL 全綁定、active-only、supersede 先建後標順序安全 /45/45 測試含真 SQLite 實跑 )。

重要核實入檔:triplet template 實名 triplet(非 graph_triplet)、無 library slot——recompute 已支援 source_prefix 過渡歸庫,library slot 值由 M3 ingest 補寫。

下一步:①leo gated redeploy kbdb(含 migration 0003)②首次 backfill:逐庫呼 POST /map/recompute(舊資料帶 source_prefix,如 kb 庫 gitea:Leo/kb@)③M3 ingest 接鏈/M4 MCP 注入+get_map/M5 GUI 首頁接續。

**M1+M2 已 merge**(PR#72,總管逐項審過:migration 純 seed 零建表 D6 ✅/SQL 全綁定、active-only、supersede 先建後標順序安全 ✅/45/45 測試含真 SQLite 實跑 ✅)。 重要核實入檔:triplet template 實名 `triplet`(非 graph_triplet)、無 library slot——recompute 已支援 `source_prefix` 過渡歸庫,library slot 值由 M3 ingest 補寫。 **下一步**:①leo gated redeploy kbdb(含 migration 0003)②首次 backfill:逐庫呼 `POST /map/recompute`(舊資料帶 source_prefix,如 kb 庫 `gitea:Leo/kb@`)③M3 ingest 接鏈/M4 MCP 注入+get_map/M5 GUI 首頁接續。
Author
Owner

M4(MCP 端注入)PR 已開:#73(分支 feat/mcp-library-map-inject

  • kbdb_get_map 工具:無參數=全館地圖(每庫一行)、帶 library=詳圖(slot JSON 字串容錯 parse 成物件);404/空庫誠實回報+recompute backfill 指引;description 含「不確定該查什麼時,先呼叫此工具」;走既有 KBDB service binding
  • server instructions 注入:連線時拉 GET /map 渲染每庫一行({library}:{narrative}|核心:{top3}|{n} triplets)嵌 instructions;isolate 內 TTL 快取(成功 5min/失敗 1min,理由見 PR);任何失敗靜默略過絕不擋連線
  • 測試:vitest 76/76 過(含 17 新測)、tsc 乾淨
  • merge 後需 gated redeploy arcrun-mcp(leo 閘)
**M4(MCP 端注入)PR 已開:#73**(分支 `feat/mcp-library-map-inject`) - `kbdb_get_map` 工具:無參數=全館地圖(每庫一行)、帶 library=詳圖(slot JSON 字串容錯 parse 成物件);404/空庫誠實回報+recompute backfill 指引;description 含「不確定該查什麼時,先呼叫此工具」;走既有 KBDB service binding - server instructions 注入:連線時拉 `GET /map` 渲染每庫一行(`{library}:{narrative}|核心:{top3}|{n} triplets`)嵌 instructions;isolate 內 TTL 快取(成功 5min/失敗 1min,理由見 PR);任何失敗靜默略過絕不擋連線 - 測試:vitest 76/76 過(含 17 新測)、tsc 乾淨 - **merge 後需 gated redeploy arcrun-mcp(leo 閘)**
Author
Owner

M5(GUI 首頁)PR 已開:#74(分支 feat/console-library-map-home

  • R4 落點裁定:console 單頁殼首頁隨 profile(full=駕駛艙、rag=總庫搜尋)→ 地圖放總庫搜尋頁搜尋框上方——rag profile 該頁即首頁、full profile 它是全館入口,「點庫卡片→帶 library filter(既有 /kbdb/search 參數)進該庫搜尋」同頁動線最短,一份實作兩 profile 全吃。
  • 每庫一卡:narrative+top entities 前 5 帶 degree+triplet 數+commit_hash/updated;跨庫 bridges 有資料才列一小區;/map 空/錯誤=誠實空狀態(指引 recompute backfill)不擋搜尋。
  • proxy(cypher 內 kbdb-proxy.ts)owner_id 不強制注入只透傳——同 M4 MCP 語意;現行 backfill map block owner=NULL,強制注入=首頁永遠假空狀態。
  • 測試 15/15 過;tsc/executor.test 的既有基線問題已在 PR 誠實列明(stash 對照實證非本分支引入)。

merge 後需 gated redeploy cypher-executor(leo 閘)。M3(ingest 接鏈)/M6/M7 未動。

**M5(GUI 首頁)PR 已開:#74**(分支 `feat/console-library-map-home`) - R4 落點裁定:console 單頁殼首頁隨 profile(full=駕駛艙、rag=總庫搜尋)→ 地圖放**總庫搜尋頁搜尋框上方**——rag profile 該頁即首頁、full profile 它是全館入口,「點庫卡片→帶 library filter(既有 `/kbdb/search` 參數)進該庫搜尋」同頁動線最短,一份實作兩 profile 全吃。 - 每庫一卡:narrative+top entities 前 5 帶 degree+triplet 數+commit_hash/updated;跨庫 bridges 有資料才列一小區;`/map` 空/錯誤=誠實空狀態(指引 recompute backfill)不擋搜尋。 - proxy(cypher 內 kbdb-proxy.ts)owner_id 不強制注入只透傳——同 M4 MCP 語意;現行 backfill map block owner=NULL,強制注入=首頁永遠假空狀態。 - 測試 15/15 過;tsc/executor.test 的既有基線問題已在 PR 誠實列明(stash 對照實證非本分支引入)。 **merge 後需 gated redeploy cypher-executor(leo 閘)**。M3(ingest 接鏈)/M6/M7 未動。
Author
Owner

M5 已 merge(PR#74 總管審過:proxy 純轉發保留 auth 閘、owner_id 選擇性透傳避 NULL 假空狀態、15/15 新測綠;基線既有 tsc/1 測試失敗經 stash 對照證實非本分支引入,另列債)。merge 後需 gated redeploy cypher-executor(leo 閘)→ console 總庫搜尋頁(rag profile 首頁)搜尋框上方即全館地圖卡片+跨庫橋+點卡進庫。M1-M5 至此只剩部署;M3(ingest 自動保鮮)yaml 在 arcrun-rag repo 進行中。

**M5 已 merge**(PR#74 總管審過:proxy 純轉發保留 auth 閘、owner_id 選擇性透傳避 NULL 假空狀態、15/15 新測綠;基線既有 tsc/1 測試失敗經 stash 對照證實非本分支引入,另列債)。**merge 後需 gated redeploy cypher-executor(leo 閘)**→ console 總庫搜尋頁(rag profile 首頁)搜尋框上方即全館地圖卡片+跨庫橋+點卡進庫。M1-M5 至此只剩部署;M3(ingest 自動保鮮)yaml 在 arcrun-rag repo 進行中。
Author
Owner

M3 demo e2e 全通(雲端總管,leo「推」核可後執行):M3 版 rag_ingest 推 demo(嵌入 token=rag-demo 唯讀新鑄,非全權;G10 妥協維持但已最小權限)→ 測試卡 push/刪卡兩向皆自動觸發 recompute → demo GET /map 長出 general 庫真地圖(23 triplets,top:VPN/主管/事假/使用者/員工)。

附帶三件:①demo kbdb 由雲端更新(699018af,順帶把 #66/#67 搜尋修復帶上 demo;D1 migration 該 token 無權、runtime ensure 兜底成功)②資料衛生:33 條 pre-v2「未展開模板字面量 source_uri」殘骸 triplet 全標 deprecated,四張種子卡 touch 重萃為正確 src ③narrative 首輪抽取回空(demo INDEX 首行非敘述行)=誠實 fallback,下次 push 自癒或 M3 抽取再調。M1-M5+M3 至此全上線(leo21c+demo);剩 M6 semantic 庫路由、M7 正式驗收單。

✅ **M3 demo e2e 全通(雲端總管,leo「推」核可後執行)**:M3 版 rag_ingest 推 demo(嵌入 token=rag-demo 唯讀新鑄,非全權;G10 妥協維持但已最小權限)→ 測試卡 push/刪卡兩向皆自動觸發 recompute → demo `GET /map` 長出 general 庫真地圖(**23 triplets,top:VPN/主管/事假/使用者/員工**)。 附帶三件:①demo kbdb 由雲端更新(`699018af`,順帶把 #66/#67 搜尋修復帶上 demo;D1 migration 該 token 無權、runtime ensure 兜底成功)②**資料衛生**:33 條 pre-v2「未展開模板字面量 source_uri」殘骸 triplet 全標 deprecated,四張種子卡 touch 重萃為正確 src ③narrative 首輪抽取回空(demo INDEX 首行非敘述行)=誠實 fallback,下次 push 自癒或 M3 抽取再調。M1-M5+M3 至此全上線(leo21c+demo);剩 M6 semantic 庫路由、M7 正式驗收單。
Author
Owner

結案(2026-08-09 逐票查核)

這張票描述的問題現在已經不存在

證據
藏書地圖已實作:`library-map.ts`(506 行)+`mcp/lib/library-map.ts`(129 行)+`kbdb_map.ts`(155 行);`mcp-handler.ts` 連線即注入地圖;portal 有 GUI 切片。

查核方式:讀現行程式碼實證,非讀票面推測。總管另抽驗過同批中三張(#5/#58/#59),全部屬實。

如果我判錯了,重開就是——關錯票的成本遠低於留著一堆假的待辦,而假待辦會讓 leo 看不出還剩什麼。

## ✅ 結案(2026-08-09 逐票查核) 這張票描述的問題**現在已經不存在**。 **證據** 藏書地圖已實作:\`library-map.ts\`(506 行)+\`mcp/lib/library-map.ts\`(129 行)+\`kbdb_map.ts\`(155 行);\`mcp-handler.ts\` 連線即注入地圖;portal 有 GUI 切片。 查核方式:讀現行程式碼實證,非讀票面推測。總管另抽驗過同批中三張(#5/#58/#59),全部屬實。 如果我判錯了,重開就是——**關錯票的成本遠低於留著一堆假的待辦**,而假待辦會讓 leo 看不出還剩什麼。
Leo closed this issue 2026-08-09 13:08:33 +00:00
Author
Owner

[總管·票務複驗 2026-08-09 晚] 關票——問題已不存在,證據是我自己跑出來的。

三個交付檔都在:kbdb/src/actions/library-map.tsmcp/src/lib/library-map.tsmcp/src/tools/kbdb_map.ts。MCP 連線時 instructions 欄位即注入全館地圖,portal 也有「總圖」切片。⇒ 主要交付已落地(Phase 2「index.md 輸出回 repo」未核實,非必要項;真要做請另開票)。


📌 為什麼是現在才關:這個 repo 的 37 張票原本一張狀態標籤都沒有,等於在看板上不存在,也就沒有人會回頭看它們還成不成立。今晚做了一次全面驗傷,只有實際跑指令驗到問題真的消失的才關;查不出來的一律留著並標明卡在哪。
如果我判錯了(例如你要的其實比程式碼裡這些更多),直接重開這張票,我不會有意見。

[總管·票務複驗 2026-08-09 晚] ✅ **關票——問題已不存在,證據是我自己跑出來的。** 三個交付檔都在:`kbdb/src/actions/library-map.ts`、`mcp/src/lib/library-map.ts`、`mcp/src/tools/kbdb_map.ts`。MCP 連線時 instructions 欄位即注入全館地圖,portal 也有「總圖」切片。⇒ 主要交付已落地(Phase 2「index.md 輸出回 repo」未核實,非必要項;真要做請另開票)。 --- 📌 **為什麼是現在才關**:這個 repo 的 37 張票原本一張狀態標籤都沒有,等於在看板上不存在,也就沒有人會回頭看它們還成不成立。今晚做了一次全面驗傷,**只有實際跑指令驗到問題真的消失的才關**;查不出來的一律留著並標明卡在哪。 如果我判錯了(例如你要的其實比程式碼裡這些更多),直接重開這張票,我不會有意見。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Leo/Arcrun#39