今天要解的問題
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 的必要性就超低的了吧。

想法與取捨
演變
回頭看,這份 log 從 2026 年四月到現在一路改了好幾次:
| 時間 | 形狀 | 為什麼改 |
|---|---|---|
| 04-15 | 根目錄 log.md | Karpathy LLM Wiki 三層(index、log、CLAUDE.md)的最小實作 |
| 04-22 | 刪掉各域 log.md,統一在根目錄 | 域裡只留 records.md(內容型) |
| 06-09 | log.md 被 iCloud 變成 log 2.md,rename 回去又被還原 | 只能備份、刪、重建;後來加 hook 擋重建根目錄 log |
| 09-20 | 遷到 git,切成 log/YYYY-MM.md 加 merge=union | 97KB、195 筆,兩台機器同時 append 必撞同一行 |
| 09-30 | 改用 git 十天後回看:衝突集中在 log 月檔、TODO.md、各域 index.md 三個熱點 | log 靠 union 自動合併,接受偶爾手解 |
| 10-23 | 決定停寫 | 見下 |
幾個階段各有文章:
- 從根目錄一份
log.md開始的架構:LLM Wiki 知識庫架構 - 切成月檔:Day8
- 掛 union:Day13
- 改用 git 十天後回看:Day18
每一次改都是在處理「衝突」,沒有一次問過「這份檔還有沒有人在讀」。
盤點
而這次回頭問了,盤點下來是這四點:
- 跟 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
- Obsidian 不會讀取 log.md 做事情
- 唯一會讀 log.md 的我,也完全不會看
所以就代表這個 log.md 已經是雞肋的產物了。
實作
決定是這樣:
- 停寫新的
log/YYYY-MM.md;舊月檔保留不刪。 - 操作紀錄改由 git 承擔:commit 訊息維持
{operation}: 標題,細節寫在 commit body 與 PR 描述。 - 這三個照舊保留,它們是機器狀態或報告,不是時間軸:
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 工作流決策。