0. 版本歷程
| 版本 | 日期 | 主要變動 |
|---|---|---|
| v1.0 | 2026-05-06 | 初版:4 類別刪檔 + lint→repair 兩段式 + 三層緩衝期 + 規則 A/E 引用 |
🗑 Wiki 刪檔處理 SOP
在 vault 內刪任何東西前,請按本檔流程走。規則 A 說 raw/ 唯讀;本檔講「何時可刪、怎麼刪、刪之前要做什麼」。
為什麼有這份 SOP
刪檔是不可逆的破壞性操作,比 ingest 更值得 SOP。三個動機:
- 連結反向波及:刪一個 entity 會讓所有
[[X]]-style 引用變 broken link,影響面比想像大 - 三層緩衝期:raw / wiki / 40-Resources 各層的安全等級不同,混用同一條規則會出事
- LLM 自動化擴大破壞:當 LLM agent 跑 batch ops 時,沒 SOP 的「順手刪」可能掃掉重要檔
刪檔分類(4 類,動作不同)
1. raw/ — ⚠️ 永不刪(規則 A)
| 動作 | OK 嗎? |
|---|---|
| 改內容 | ❌ 永遠不准(CLAUDE 規則 A) |
| 改檔名 | ❌ 永遠不准(basename 是 source 路徑指針) |
| 移到 PARA 或 09-archive | ✅ 由 PARA_ROUTING 規則處理(v1.3 起) |
| 永久刪除 | ❌ 永不 |
例外:raw 檔已被路由到 PARA 後 + 確認所有 entity 的 source: 已更新 + 12 個月以上沒被引用 → 才可考慮歸 deepfreeze。仍須先提案使用者批准。
2. wiki/entities/ — 看 status 分流
| status | 動作 |
|---|---|
stable | ❌ 不刪。先改 deprecated + 加 ## ⚠️ Deprecated 區塊 |
draft | 🟡 可刪,但建議先跑 wiki-status-promote 評估 |
deprecated | 🟢 30 天緩衝期過後可刪。但保留 backlink 為宜(給歷史追溯用) |
3. wiki/maps/ — 看是否還有 entity 引用
| 條件 | 動作 |
|---|---|
length(file.inlinks) > 0 | ❌ 不刪。先把 inbound entity 的引用改指其他 map |
length(file.inlinks) == 0 且使用率低 | 🟢 可直接刪 |
4. Attachments/ 與其他附件
| 條件 | 動作 |
|---|---|
有 entity 透過  引用 | ❌ 不刪 |
| 沒任何引用,且 mtime > 90 天 | 🟢 可刪 |
| 不確定 | 跑 grep 確認後再決定 |
刪檔前必做:lint → repair 兩段式
任何 ≥ 1 個檔的批次刪除,都必走兩段:
階段 1:lint(偵測)
└─ python3 wiki/tools/lint.py wiki/ → JSON 報告
└─ wiki-repair --plan-only → dry-run plan
階段 2:repair(執行)
└─ 使用者批准 plan 中的 N 條(apply 1 / apply 3 / apply N)
└─ 才真的動檔
不可跳過 lint 直接刪——lint 會找出「這個 orphan 其實還有 backlink 在 maps/ 裡,刪了會斷」這種隱性 dependency。
三層緩衝期
不同生命週期的 artifact,緩衝期不同:
| 類型 | 標 deprecated → 真刪 | 範例 |
|---|---|---|
| 設備 / 系統下線 | 12 個月 | 舊 PAM 模組退役、CallIT 替代舊系統 |
| wiki entity(過時概念) | 90 天 | 過時的 plugin 設計、廢棄的工作流 pattern |
| wiki entity(重複合併) | 30 天 | 兩個概念合併成一個,舊那個 deprecated |
| draft / temp 檔 | 7 天 | wiki-status-promote 評估後沒升 stable 的 draft |
→ 緩衝期內:
- status 改
deprecated - 標
## ⚠️ Deprecated,連到取代頁 - 等緩衝期過 → 才執行真刪
規則交叉引用
- 規則 A(raw/ 唯讀):見 CLAUDE §2 規則 A
- 規則 E(寫檔前先提案):批次刪檔屬於「批次操作」,必先提案。見 CLAUDE §10 規則 E
- 規則 F 廣義版(破壞性 flag 必對應 exclusion list):
rsync --delete/find -delete/git clean -fdx/rm -rf都要列 exclude。見 CLAUDE §10 規則 F
觸發指令速查
| 想做 | 講 |
|---|---|
| 評估某 entity 是否該刪 | 「評估 [[X]] 該不該刪」 |
| 跑 lint 找候選 | 「lint wiki」/「巡 wiki」 |
| 跑 repair 修補 lint 發現的問題 | 「批量修 wiki」 |
| 升降 status(stable / draft / deprecated) | 「批次升 stable」/「審草稿」 |
| 真實刪檔 | 「執行刪除 [[X]]」(必跑提案) |
緊急狀況
如果不慎刪了重要檔:
- 先確認 iCloud 同步狀態——若還沒同步推到雲端,本機可能還能 undo
- macOS Time Machine——往回看最近的快照
- Obsidian 內建 trash——
.trash/通常保留 7 天 - git history(若 vault 有 git)——
git checkout HEAD~N -- <path>
[[Wiki_儀表板]] 上的「⏰ 90 天 stale」清單可以反向監控——突然消失的 entity 可能是被誤刪。