feat: 安裝結構收進 system-dev/(不污染用戶根目錄)+ 舊版自動遷移 + bump 1.9.0

工具產物原散在用戶根目錄(docs 七層、scripts),又把 wiki/VERSION 寄生在 CC 原生
.claude/ 裡,用戶分不清哪個 docs 是工具的。這版徹底收斂:除 .claude/(settings/
commands/hooks)與 CLAUDE.md 留根,工具所有資料收進 system-dev/。

對應 SDD: system-dev/docs/3-specs/install-layout/(內部記錄,依原則不推)。

- 新結構 system-dev/{VERSION,wiki/,docs/,scripts/};.claude/ 只剩 CC 機制檔
- wiki 改寫產物落點正式化:install 建 system-dev/wiki/cards/(.gitkeep)
- docs 雙語義拆開:工具文件→system-dev/docs/;用戶 raw source 維持原處只讀
- scripts 一開始就裝進 system-dev/scripts/
- 舊版自動遷移雙保險:update.sh 冪等搬移(wiki 含 .git、docs 白名單)
  + session-start hook 偵測舊結構未遷移時提示(low-code 用戶兜底)
- wiki-secret-scan 觸發路徑改 system-dev/wiki/**(否則新結構防護失效)
- 全套路徑引用同步:CLAUDE/SKILL/wiki-*/sdd-*/hooks/INDEX/README(中英)
- 沙盒驗證:遷移含 .git commit 一致、冪等、用戶自填 docs 保留;全 bash -n 過

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-26 15:13:43 +08:00
parent c95705c286
commit ecf1f882c6
27 changed files with 283 additions and 166 deletions
+38 -28
View File
@@ -13,7 +13,7 @@ CC 是個優秀的工程師,但不是個好的專案經理。它會猛衝完
| 系統 | 解決什麼 | 核心機制 |
|------|---------|---------|
| **SDD 系統** | 全局觀、先想再做 | 動手前必須有 design.md + tasks.md |
| **LLM Wiki** | 記憶累積、文件有序 | 雙空間:原始文件(人寫)+ .claude/wiki/AI 整理)|
| **LLM Wiki** | 記憶累積、文件有序 | 雙空間:原始文件(人寫)+ system-dev/wiki/AI 整理)|
> **不只程式碼專案、不只 Claude Code。** LLM Wiki 現在也認得 **Logseq / Obsidian vault**——
> 安裝時自動偵測你在哪種資料夾,把對應的「原始文件來源」寫進 `CLAUDE.md`,整理 wiki 時只讀那裡、
@@ -91,7 +91,7 @@ curl -sSL https://raw.githubusercontent.com/uncle6me-web/system-dev-template/mai
| 🔒 **完全不碰**你的內容與設定 | `wiki/status.md``mistakes.md``decisions-summary.md``.wikiignore``settings.json``CLAUDE.md` |
> **為什麼第一次要用 curl?** 舊版本機還沒有 `update.sh`,所以第一次得從遠端抓它下來跑。
> 跑完它會把自己也裝進 `scripts/update.sh`**之後更新直接跑** `bash scripts/update.sh` 就好,不用再 curl。
> 跑完它會把自己也裝進 `system-dev/scripts/update.sh`**之後更新直接跑** `bash system-dev/scripts/update.sh` 就好,不用再 curl。
更新只會動「已安裝的模組」(裝了 wiki 就更新 wiki,裝了 SDD 就更新 SDD),偵測自動完成。
`settings.json` 缺了新版才有的 hook,它不會幫你改設定,但會在結尾**列出來提醒你手動補**(不擅自動你的設定)。
@@ -112,7 +112,7 @@ LLM Wiki 原本假設「原始文件放在 `docs/`」,但 Logseq、Obsidian
| 都沒有 | 一般專案 | `docs/`(維持原行為)|
寫進 `CLAUDE.md` 的這段宣告是**給 AI 讀的指令**——它告訴整理者「原始文件在哪、整理 wiki 時只讀那裡」,
而且對 vault **明令不得搬動、改名、重新分類 `.md`**,整理結果一律只寫進 `.claude/wiki/`
而且對 vault **明令不得搬動、改名、重新分類 `.md`**,整理結果一律只寫進 `system-dev/wiki/`
這樣面對筆記 vault 也不會破壞它原本的結構,筆記不會變得不可讀。
> **已有 `CLAUDE.md`?** 一律不覆蓋(維持「已有的不動」原則),改在安裝結尾**列出該補的宣告**提醒你手動貼。
@@ -122,44 +122,54 @@ LLM Wiki 原本假設「原始文件放在 `docs/`」,但 Logseq、Obsidian
## Cowork 也能整理 wiki
整理 wiki 的人不再只有終端機裡的 Claude Code——**claude.ai 的 Cowork** 也可以。
`docs/SKILL.md` 提供一個給 Cowork 用的 skill`wiki-cowork-scan`),它與 CC 的 `/wiki-init``/wiki-capture`
`system-dev/docs/SKILL.md` 提供一個給 Cowork 用的 skill`wiki-cowork-scan`),它與 CC 的 `/wiki-init``/wiki-capture`
**共用同一套規則**
- 掃描 `~/Documents` 下所有裝了 system-dev-template(含 `.claude/wiki/`)的資料夾
- 掃描 `~/Documents` 下所有裝了 system-dev-template(含 `system-dev/wiki/`)的資料夾
- 用**和 `install.sh` 一致的偵測邏輯**判斷每個資料夾是一般專案 / Logseq / Obsidian
- 只讀 raw source、只往 `.claude/wiki/` 增補(不覆蓋、不刪除),**絕不動** raw source、`CLAUDE.md``logseq/``.obsidian/``assets/`
- 只讀 raw source、只往 `system-dev/wiki/` 增補(不覆蓋、不刪除),**絕不動** raw source、`CLAUDE.md``logseq/``.obsidian/``assets/`
**CC 與 Cowork 輸出格式相同**,任一方整理過的內容,另一方看到就跳過或補充,不重複也不覆蓋。
適合掛在 Cowork 的定期排程,讓本機所有 wiki 自動保持更新。
> 想用:把 `docs/SKILL.md` 提供給你的 Cowork 當 skill 參考,再對它說「整理 wiki」即可。
> 想用:把 `system-dev/docs/SKILL.md` 提供給你的 Cowork 當 skill 參考,再對它說「整理 wiki」即可。
---
## 目錄說明
## 安裝後,你的專案會長這樣
> 設計原則:除了 CC 原生的 `.claude/` 和 `CLAUDE.md` 留在根目錄,**工具的所有資料都收進 `system-dev/`**
> 不在你的根目錄撒一堆資料夾、也不跟你自己的 `docs/` 混在一起。
```
你的專案/
├── CLAUDE.md ← 導航牌(CC 開 session 自動讀,必須留根)
├── .claude/ ← 只放 CC 原生機制檔
│ ├── settings.json ← 掛 hooks
│ ├── commands/ ← Slash commands/wiki-init 等)
│ └── hooks/ ← 硬攔截(接關 + SDD 協議 + wiki 機敏掃描)
├── system-dev/ ← 工具所有資料收這裡
│ ├── VERSION
│ ├── wiki/ ← CC 的記憶空間(含 cards/ 改寫產物落點、.wikiignore
│ ├── docs/ ← 文件結構(六層分類 + SKILL.md)
│ └── scripts/ ← install.sh / update.sh(裝好就在這,下次直接跑)
└── (你自己的檔案 / docs / 筆記 vault —— 工具只讀、不搬、不碰)
```
## 這個 repo 自己的目錄
```
system-dev-template/
├── template/ ← 複製到新專案的骨架
│ ├── CLAUDE.md ← 填空版導航牌
│ ├── docs/文件結構(六層分類
│ └── .claude/
│ ├── wiki/ ← CC 的記憶空間(含 .wikiignore 機敏排除)
│ ├── commands/ ← Slash commands
│ ├── hooks/ ← 硬攔截(接關 + SDD 協議 + wiki 機敏掃描)
│ └── settings.json ← 掛 hooksinstall.sh 依模組組裝)
├── template/ ← 發佈源:install/update 從這裡抓檔
│ ├── CLAUDE.md ← 填空版導航牌(落到用戶根目錄)
│ ├── .claude/ commands/ + hooks/(落到用戶 .claude/
│ └── system-dev/ ← VERSION + wiki/ + docs/(落到用戶 system-dev/
├── skills/
│ └── llm-wiki/ ← 複製到 Legacy-Workspace/.claude/skills/
│ └── llm-wiki/ ← 複製到 Legacy-Workspace/.claude/skills/
├── scripts/
│ ├── install.sh ← 已有專案接入腳本
│ └── update.sh ← 舊版一鍵更新(只換模板,不碰你的資料
└── docs/ ← 這個 repo 自己的說明
├── why.md ← 設計理念
├── wishlist.md ← 待補功能與已完成記錄
└── SKILL.md ← 給 claude.ai Cowork 的 wiki 整理 skillwiki-cowork-scan
│ ├── install.sh ← 已有專案接入腳本
│ └── update.sh ← 舊版一鍵更新(含舊結構自動遷移
└── docs/ ← 這個 repo 自己的說明(why.md、wishlist.md…)
```
---
@@ -189,7 +199,7 @@ system-dev-template/
|------|------|
| `session-start-recall.sh` | 開 session 自動注入 status 重點,不靠 CC 自覺 |
| `sdd-guard.sh` | 動 code 檔但沒有任何 SDD → 攔(exit 2),對應 `/sdd-check` 的自動版 |
| `wiki-secret-scan.sh` | 機敏值要寫進 `.claude/wiki/` → 攔(exit 2),密碼/金鑰/個資的機械底線 |
| `wiki-secret-scan.sh` | 機敏值要寫進 `system-dev/wiki/` → 攔(exit 2),密碼/金鑰/個資的機械底線 |
| `pre-write-guard.sh` | 專案自訂禁令範本骨架(預設停用,填 pattern 才生效)|
---
@@ -200,7 +210,7 @@ system-dev-template/
| 層 | 機制 | 擋什麼 | 性質 |
|----|------|--------|------|
| **L1** | `.claude/wiki/.wikiignore`(glob) | 整個機敏檔不編入 | 協議(CC 遵守)|
| **L1** | `system-dev/wiki/.wikiignore`(glob) | 整個機敏檔不編入 | 協議(CC 遵守)|
| **L2** | 行內標記 `<!-- wiki:ignore -->``<!-- wiki:end -->` | 檔案內某段不編入 | 協議(CC 遵守)|
| **L3** | `wiki-secret-scan.sh` hook | 機敏值真的寫進 wiki → exit 2 擋 | **硬攔截(機械偵測)**|