Skip to content

Latest commit

 

History

History

knowledge

README.md

專案知識庫(knowledge/)

這個資料夾記錄這個專案的為什麼——原則、方向、教訓——也就是程式碼本身留不住的東西。它讓 AI(和新加入的人)在動手前,先讀懂專案的意圖與限制。

由 knowie 維護:一個讓 AI 結構化地維護專案知識的工具。不熟 knowie 也沒關係——下面就能讀懂。

從這三個檔開始

  • principles.md — 原則:專案不可妥協的核心信念與規則(分「根本原則」和從它推導的「延伸原則」)。
  • vision.md — 願景:要解決什麼問題、現在走到哪、路線圖。
  • experience.md — 經驗:開發中蒸餾出的教訓(踩過的坑、學到的模式)。

需要細節時,往子目錄

  • concepts/ — 母概念:反覆出現的核心概念;三個核心檔只放指針,細節在這。
  • episodes/ — 情節記憶:值得回憶的完整現場(教訓/決策背後的故事)。
  • history/ — 因果軌跡:為什麼變成現在這樣(決策的轉移、被否決的選項)。
  • draft/ — 短期記憶:還沒定案、正在醞釀的想法。

怎麼讀

從三個核心檔讀起;每個檔底部有「關鍵延伸」表,告訴你某個主題該往哪個子檔深入。

維護它的 skill

如果你用支援 knowie 的 AI 工具(如 Claude Code),這些指令幫你維護這個知識庫:

  • /knowie-init — 從零建立知識庫
  • /knowie-capture — 把一段討論/想法統整進對的地方
  • /knowie-consolidate — 你主動把成熟的 draft 固化出去(capture 的對稱另一端)
  • /knowie-next — 根據知識庫規劃下一步該做什麼
  • /knowie-judge — 檢查一致性、對齊程式碼、整理
  • /knowie-migrate — 結構升級時遷移知識庫

(只是想讀懂專案?忽略這段沒關係。)

⚠️ 兩個標記——它們讓「過時路徑」的掃描收得掉

judge 會掃「指向程式碼的路徑還在不在」。而三種東西長得一模一樣:

🔴 真的過時       該修
⟨曾經⟩           歷史敘述——那個路徑【當時是對的】,不該改
⟨規劃⟩           還沒做的東西——未來式,不該改

沒有標記的話,後兩種每次都會被報一次,而 knowie 的 Converge 不變式說 「再跑一次應該接近 no-op」。

一個每次都報同樣結果的檢查,與一個沒有人跑的檢查,最後效果一樣 ——因為人會學會跳過它。

⚠️ 而 history/、episodes/、draft/retired/ 三個目錄天生是「曾經」 ——掃描直接排除,不需要逐處標記。

掃描(judge 用這一段)

排除目錄   history/ / episodes/ / draft/retired/
排除寫法   刪除線 ~~舊路徑~~ / 帶 ⟨曾經⟩ 或 ⟨規劃⟩ 標記的
剩下的     🔴 才是真的過時

2026-08-17 第一次套用:14 筆 → 0 筆。

[[X]] 是什麼

行內的 [[X]] 是指名,不是路徑。它涵蓋三種東西:

[[投影]]              → concepts/投影.md
[[經驗]]              → experience.md(三個入口檔同理)
[[build-guardrail]]   → skills/build-guardrail/SKILL.md

⚠️ 所以「[[X]] 找不到對應的 concepts 檔」不等於死引用——2026-08-19 的 judge 掃出 10 筆,只有 1 筆是真的(回退程式碼但不回退知識 少了一個逗號), 其餘是 skills、三檔、以及 markdown 裡的程式碼片段誤判。

一個掃描如果不知道自己在掃什麼命名空間,它的每一筆命中都要人再判一次 ——而那正是它想省掉的工。

🔴 而那條教訓在 2026-09-26 又被踩了五次,因為它沒有載體:判官每一輪 重寫一次掃描器,於是每一輪重推、重踩同樣的命名空間假設(相對路徑要對著所在檔解析 · [[X]] 的三個命名空間 + history/NNN 前綴形 + 小節標題 · 行內程式碼要挖掉 · 狀態標記的詞表 · 放寬的判準會反過來漏掉東西)。

🟢 它們現在住在 tools/knowie-scan.ts,而跑它的是一條護欄 (tests/integration/audit-knowledge-links.test.ts,npm test 會跑)。 每一項都回報母體,而母體為 0 會紅——「乾淨」與「路徑寫錯了」在讀數上長得一樣。 ⚠️ history/ 的孤兒歸到 🟡「要人再判」,不讓護欄紅:一筆病歷沒有人引用不一定是腐爛。

⚠️ 第一版寫成 python,而那是錯的:護欄不能靠一個 CI 上沒有宣告的解譯器 ——runner 今天有 python3,而那是運氣不是契約(這個 repo 被「本機比 CI 寬鬆」咬過三次)。

一條教訓如果沒有載體,它下一次會以「新發現」的樣子回來。

🟡 而那一輪還掃到一個待拍板的結構問題:CLAUDE.md 裡 12 條蒸餾過的引言 有 8 條在 experience.md 裡找不到——它是「經驗」的第二個家,而它幾乎不連 history/。 那一題(哪一份是真相)記在 draft/CLAUDE.md 是經驗的第二個家, 要人拍板:搬動它會改變 AI 每個 session 讀到什麼。

真正的連結用 [](相對路徑),圖由連結導出,不儲存(見 principles P8)。