diff --git a/system-dev/wiki/mistakes.md b/system-dev/wiki/mistakes.md index 72bcae7..0710b1c 100644 --- a/system-dev/wiki/mistakes.md +++ b/system-dev/wiki/mistakes.md @@ -51,6 +51,12 @@ 原因: 基本盤 = D1 only(免費、無信用卡);embed 是可選加購層。插件混進來會破壞分層。 日期: 2026-06-14 +⚠️ MISTAKE: 補對齊/功能 PR 混進 template 基建遷移 → 撞已 merge 的遷移、害衝突 + 症狀: PR#3(receiver Zod 補對齊)從 PR#2 merge【前】的分支切 → 帶了一整批 template 1.9.x 遷移檔(.claude/→system-dev/,40 個)。PR#2 已把那批搬進 main → PR#3 重複撞 = CONFLICTING/DIRTY,且真正的補對齊改動被淹沒。 + 正確做法: 功能/補對齊 PR 只放該功能的改動;template/基建遷移單獨一筆 PR。撞衝突時別在舊分支硬解一堆遷移衝突 → 從最新 origin/main 重切乾淨分支、只 cherry-pick 該功能的 code commit、force-with-lease 覆蓋 PR 分支(PR 自動更新、不用關掉重開)。切分支前先確認 base 是不是落後於已 merge 的東西。 + 原因: 分支從「即將被 merge 的另一支」之前切,會把對方的改動也一起帶上;對方 merge 後兩份就撞。核心改動本身不衝突,衝突全來自混進來的重複遷移。 + 日期: 2026-06-26 + --- 格式: diff --git a/system-dev/wiki/status.md b/system-dev/wiki/status.md index fc809c2..08339b9 100644 --- a/system-dev/wiki/status.md +++ b/system-dev/wiki/status.md @@ -1,10 +1,45 @@ # 當前狀態 -> 更新時間:2026-06-14 +> 更新時間:2026-06-26 > 每次 session 結束必須更新此檔(用 /wiki-update)。 --- +## 最新(2026-06-26:issue #1 補對齊 — receiver Zod 追上 contract,PR #3 已 merge) + +[PR #3](https://github.com/uncle6me-web/kbdb-graph-plugin/pull/3) 已 merge 進 main(commit `13db97b`)。對應 [issue #1](https://github.com/uncle6me-web/kbdb-graph-plugin/issues/1) 總管補對齊 comment。 + +**起因(契約漂移)**:T3 的 strict Zod 鏡射【當時】contract;contract 之後升格(ingest#1 向量化規範)加打標欄位 → ingest 照新 contract 送會被 `.strict()` 擋 422。總管裁定方向 A:graph 追上 contract(contract 是凍結單一真相源,實作追它)。 + +完成: +1. ✅ `contracts/ingest-candidate.json` 副本同步到頂層單一真相源(`InkStoneCo/system-dev/docs/3-specs/mira-dissolve/`)。 +2. ✅ Zod 加契約合法新欄位(**保留 `.strict()`**):`NodeSchema`+`id?`/`aliases?`/`embed?`;`EdgeSchema`+`predicate_embed?`。 +3. ✅ 落地(向量化分工:ingest 打標、base 讀標執行、**graph 不算向量**):`predicate_embed` 透傳進 triplet slot;node 打標(`embed`/`gloss`/`aliases`)存進 entity slot;`id` 作 node 去重鍵(同卡多邊只一筆)。`persistNodes` 拆獨立 action(`src/actions/node-persist.ts`)。 +4. ✅ 測試 +4:帶向量化欄位【通過】、`bridge_score`/`clusters` 仍【422】、同 id 去重。 + +**新增 plugin slot**(非改表、非改 contract):triplet `predicate_embed`;entity `embed`/`node_id`。 +驗證:`vitest run` **23 passed**;零 SQL / 無 D1·Vectorize·AI;dry-run 乾淨;action ≤100 行。 + +**過程教訓(已記 mistakes)**:PR#3 初版從 PR#2 merge 前切 → 混進 PR#2 已做的 template 1.9.x 遷移 40 檔 → 撞 main 衝突。解法=從最新 main 重切、只 cherry-pick 補對齊那筆 code commit、瘦身後 force-push。**補對齊/功能 PR 別混 template 基建遷移。** + +--- + +## 前一筆(2026-06-26:issue #1 T3 — ingest 寫入端 + graph 端 API,PR #2 已 merge) + +[PR #2](https://github.com/uncle6me-web/kbdb-graph-plugin/pull/2) 已 merge(commit `7a29dee`,squash)。 + +完成: +1. ✅ **wiki 合併**:舊 `.claude/wiki/` → `system-dev/wiki/`(導入 system-dev-template)。 +2. ✅ **ingest-contract SDD**(`docs/3-specs/ingest-contract/`)+ 搬入 `contracts/ingest-candidate.json`(T3.1/3.8)。 +3. ✅ **寫入端 + 取代**(T3.2–3.5):`POST /triplets/ingest`、ensureTemplate slot-diff 補丁、`updateRecord`、idempotency、**先 append 後 deprecate**、active-only 查詢。 +4. ✅ **get_source + refresh**(T3.6/3.7):`GET /graph/source/:name`、`POST /graph/refresh`(純被動代轉,未設 `KBDB_INGEST_URL` 時誠實回 `forwarded:false`)、keyword 收斂(3.6d)。 + +驗證:`vitest run` 19 passed(mock);zero SQL / 無 D1·Vectorize·AI;dry-run 乾淨;action ≤100 行。 + +> 註:base `PATCH /records/:id` 已就緒(Arcrun #6 closed),ingest deprecate 即用此。 + +--- + ## 已完成(2026-06-14:按 leo 鐵律全面改寫 + 獨立成 repo) HANDOFF 5 項待辦全做完: @@ -21,15 +56,24 @@ HANDOFF 5 項待辦全做完: design.md 原本「讀現狀(21 個直接 SQL)推翻鐵律、問要不要共用 D1」是**讀違規現狀推翻規則**的錯。已改正為 **API-as-Wall(走 API,非共用 D1,零建表/零 SQL)**,並記進 mistakes.md。 +## 正在做 / 阻擋 + +- ✅ PR #2(T3)、PR #3(補對齊)皆已 merge 進 main。graph repo 端實作面收斂,**本 repo 無剩餘可單獨做的 task**。 +- [🔄] 剩三項皆「不在 graph 手上」,等跨 repo 接通 / 部署(見下)。 + ## 下次 session 第一件事 -**實際部署**:等基本盤 `arcrun-kbdb` 上線/有網址後,跑 `bash scripts/install.sh` 一次到位 -(自動查 CF subdomain 拼 `KBDB_BASE_URL` → `wrangler secret put` → `wrangler deploy`)。 -現在不空跑部署(避免上線一個打不到基本盤的殼)。 +main 已含 T3 + 補對齊。本 repo 端無待辦——下次動工多半是**新交辦**或**跨 repo 接通就緒後接 MCP 薄殼**。 +若要實際部署:等基本盤 `arcrun-kbdb` 上線有網址後跑 `bash scripts/install.sh`(自動查 CF subdomain 拼 `KBDB_BASE_URL` → secret → deploy)。現不空跑(避免上線打不到基本盤的殼)。 + +## 待負責人確認 / 跨 repo 接通(全通才結 issue #1) + +- **MCP 註冊薄殼** — 圖工具(traverse/neighbors/source/refresh)併入 arcrun `u6u-mcp-server`。等:總管協調 arcrun,**不另起 graph MCP**;待 Arcrun #7 部署驗。graph 端 HTTP API 已備好。 +- **refresh 端到端** — 等:ingest repo(T4)部署 + 設 `KBDB_INGEST_URL`;未設時誠實回 `forwarded:false`。 +- **semantic normalize** — 仍 exact-only,留接口;等:base embed(Arcrun #7,code done 待部署)。**補對齊已把向量化打標(embed/predicate_embed/gloss/aliases)落地進 slot 供 base 讀**,base 模組就緒即可接。 ## 已知缺口([→arcrun],待基本盤補) -- base 無 `PUT /records/:id` → entity addAlias 用「重建 record」覆寫。 -- base 無 `DELETE /records/:id` → triplet/entity update/delete、pending confirm/reject 為 soft(不硬刪)。 -- 語意搜尋 / embedding 屬基本盤 optional embed 模組,插件只做 keyword/exact。 -- arcrun 端 MCP/CLI 的 KBDB 薄殼仍待補(見 arcrun HANDOFF §2);插件目前直打基本盤 HTTP API。 +- base `PATCH /records/:id` ✅ 已就緒(Arcrun #6 closed);但 base 仍無 `DELETE /records/:id` → triplet/entity delete、pending confirm/reject 為 soft(不硬刪)。 +- 語意搜尋 / embedding 屬基本盤 optional embed 模組,插件只做 keyword/exact(graph 不算向量,鐵律)。 +- arcrun 端 MCP/CLI 的 KBDB 薄殼仍待補;插件目前直打基本盤 HTTP API。