今天要解的問題

llm-wiki 是我用 Obsidian 加 Claude Code 維護的個人知識庫,整個 vault 放在 git 上。

當每次 skill 做完 vault 增減後,收尾都會往當月的 log/YYYY-MM.md append 一筆操作紀錄,之後就可以從這個 log 月檔來了解 vault 的變化。但我同時會有許多 session 許多分支同時都會進行 vault 增減,導致這個月檔合併時,就一定會 conflict,雖然有針對 .gitattributes 加上 merge=union,合併可保留兩邊新增的行,不發生 conflict(做法見 Day13)。

只是若我嘗試併回 main 時,仍然會遇到下面的問題:

  • GitHub 不認 .gitattributes 的 merge=union,網頁上仍舊會有衝突。
  • 本機合併時 union 可自動合併成功,但卻會吃掉兩處條目之間的空行,要手動補回。

因此我不禁想到,之前是因為用 icloud 同步,所以才需要這個 log.md 來記錄操作,但現在我已經轉換到 git 上面,我卻仍舊維持這個 log.md 紀錄,都已經有更好用的 git commit 了,log.md 的必要性就超低的了吧。

vault 的 log 從根目錄一份到月檔再到停寫的六個階段

想法與取捨

演變

回頭看,這份 log 從 2026 年四月到現在一路改了好幾次:

時間形狀為什麼改
04-15根目錄 log.mdKarpathy LLM Wiki 三層(index、log、CLAUDE.md)的最小實作
04-22刪掉各域 log.md,統一在根目錄域裡只留 records.md(內容型)
06-09log.md 被 iCloud 變成 log 2.md,rename 回去又被還原只能備份、刪、重建;後來加 hook 擋重建根目錄 log
09-20遷到 git,切成 log/YYYY-MM.md 加 merge=union97KB、195 筆,兩台機器同時 append 必撞同一行
09-30改用 git 十天後回看:衝突集中在 log 月檔、TODO.md、各域 index.md 三個熱點log 靠 union 自動合併,接受偶爾手解
10-23決定停寫見下

幾個階段各有文章:

每一次改都是在處理「衝突」,沒有一次問過「這份檔還有沒有人在讀」。

盤點

而這次回頭問了,盤點下來是這四點:

  • 跟 git 重複:commit 訊息本來就是 {operation}: 標題(update:、enrich:…),和 log 的 operation 分類一樣,git log --grep "^enrich:" 就查得到。10 月 584 個 commit 裡,有 312 個同時改到 log/2026-10.md。導入 issue 工作流之後每件事都開 PR,PR 描述是第三份紀錄。
  • 衝突熱點:每個 skill 收尾都 append,PR 一多就撞;union 的副作用(吃空行)每次都要人補。
  • Karpathy 原始設計:log 讓 LLM 不靠 git 也知道最近做過什麼。但現在每個 session 都直接跑 git。
  • 唯一的損失:Obsidian 裡沒有可以翻的時間軸,git 歷史在 Obsidian 看不到。

Obsidian 是否需要 log.md

  1. Obsidian 不會讀取 log.md 做事情
  2. 唯一會讀 log.md 的我,也完全不會看

所以就代表這個 log.md 已經是雞肋的產物了。

實作

決定是這樣:

  1. 停寫新的 log/YYYY-MM.md;舊月檔保留不刪。
  2. 操作紀錄改由 git 承擔:commit 訊息維持 {operation}: 標題,細節寫在 commit body 與 PR 描述。
  3. 這三個照舊保留,它們是機器狀態或報告,不是時間軸:
    • log/inbox-drained.log:跨機器查重帳本
    • log/claude-doctor/:健檢報告
    • log/triage-reviews/:triage 決策檔

要動的地方有四處,這些改動排在後面,這篇主要是說明這個決策:

  • 約 12 支 skill 收尾的「append 當月 log」步驟:wiki-build、note-enrich、book-review、art-review、note-explore、topic-probe、study、inbox-triage、vault-maintain、claude-doctor…
  • vault-maintain 的 prune_triage_reviews.py:用 log 的 triage 條目當刪除安全閘(見 Day18),改查 git。
  • hook write_guard.py:兩條 log 相關規則。
  • CLAUDE.md 的 Log 格式段、log/ 說明,以及「Index/Log 每次 ingest 後更新」的寫法。

小結

vault 的 log 月檔停寫,操作紀錄交給 git:commit 訊息、commit body 和 PR 描述。

每次換架構的時候,時常都是元件照抄,像是地端轉雲端,也是直接同一個架構搬上來,沒有用抽象的角度以功能的方向去重新定義元件,常常導致搬遷後,反而更慢。像是這個 log.md 理論上可隨著上 git 後,就一起換掉,但可能就是習慣成自然,在經歷過一個月後,才痛到要思考拿掉的解法。

這次會回頭問,是因為 issue 工作流讓每件事都有 PR:紀錄的第三份副本出現,前兩份的重複才變得明顯。同一天在談的 issue 工作流,見 issue 工作流決策。