feat: install.sh 模組化安裝(--wiki / --sdd / --all)

有時只需要 wiki 不需要 SDD。不 fork,改用同一入口模組選單:
- --wiki / --sdd / --all(預設),無參數 + 有 tty 則互動詢問
- curl|bash 無 tty 安全預設 --all
- settings.json 的 hooks 依選的模組自動組裝(不再下載單一靜態檔)

不 fork 的理由:使用者多半非工程背景,一個入口最友善;維護成本不翻倍。
模組邊界先劃好,未來功能達 3+ 個再演進成「模板組合器」。

同步 wishlist:§1 接關 / §2 hook 標記已完成(commit 39783cc),
新增 §3 機敏防護 / §4 模組化安裝並標完成。README 補三層防護與模組安裝說明。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-20 12:45:53 +08:00
parent 29e3636bd2
commit 9dcbe38021
3 changed files with 248 additions and 77 deletions
+33 -3
View File
@@ -42,6 +42,17 @@ curl -sSL https://raw.githubusercontent.com/uncle6me-web/system-dev-template/mai
腳本只建立缺少的東西,**已有的檔案一律不動**。
**只要一塊?** 兩套系統可分開裝(有時只需要 wiki,不需要 SDD):
```bash
# 下載後帶參數執行
curl -sSL .../install.sh -o install.sh && bash install.sh --wiki # 只裝 LLM Wiki
bash install.sh --sdd # 只裝 SDD
bash install.sh --all # 兩個都裝(預設)
```
在終端機直接跑(有 tty)時,不帶參數會**互動詢問**要裝哪一塊——對非工程背景的使用者最友善。`curl | bash` 無 tty 則安全預設為 `--all`。settings.json 的 hooks 會依選的模組自動組裝。
安裝完後在 CC 對話裡:
```
/wiki-init
@@ -62,10 +73,10 @@ system-dev-template/
│ ├── CLAUDE.md ← 填空版導航牌
│ ├── docs/ ← 文件結構(六層分類)
│ └── .claude/
│ ├── wiki/ ← CC 的記憶空間
│ ├── wiki/ ← CC 的記憶空間(含 .wikiignore 機敏排除)
│ ├── commands/ ← Slash commands
│ ├── hooks/ ← 硬攔截(SessionStart 接關 + SDD 協議)
│ └── settings.json ← 掛 hooks
│ ├── hooks/ ← 硬攔截(接關 + SDD 協議 + wiki 機敏掃描
│ └── settings.json ← 掛 hooksinstall.sh 依模組組裝)
├── skills/
│ └── llm-wiki/ ← 複製到 Legacy-Workspace/.claude/skills/
@@ -105,8 +116,27 @@ 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),密碼/金鑰/個資的機械底線 |
| `pre-write-guard.sh` | 專案自訂禁令範本骨架(預設停用,填 pattern 才生效)|
---
## Wiki 機敏防護(不想被編入的內容)
`.gitignore` 一樣,讓不想進 wiki 的內容(密碼、金鑰、個資)不被編入。三層:
| 層 | 機制 | 擋什麼 | 性質 |
|----|------|--------|------|
| **L1** | `.claude/wiki/.wikiignore`(glob) | 整個機敏檔不編入 | 協議(CC 遵守)|
| **L2** | 行內標記 `<!-- wiki:ignore -->``<!-- wiki:end -->` | 檔案內某段不編入 | 協議(CC 遵守)|
| **L3** | `wiki-secret-scan.sh` hook | 機敏值真的寫進 wiki → exit 2 擋 | **硬攔截(機械偵測)**|
L1/L2 是你主動標記,L3 是自動兜底——萬一 CC 漏掉前兩層,寫進 wiki 的那一刻會被 regex 攔下(密碼賦值、PEM 私鑰、AWS/GitHub/Slack 金鑰、JWT、連線字串帳密、身分證、信用卡號)。
> 誠實限制:L1/L2 靠 CC 自律,L3 靠特徵比對(有偽陽/偽陰)。
> 這是「減少**意外**外洩」的機制,不是保險箱——真正的密鑰本就不該進版控。
> 誤判時:該行尾加 `wiki-secret-ok` 放行;整檔機敏則加進 `.wikiignore`。
> 誠實限制:hook 擋語法層明顯違規(直接寫檔),擋不了藏在 helper / bash 裡的繞道。
> 價值是「想跳過會被抓到 + 留痕可審」,不是技術防偽——文檔(mindset)+ hook(底線)都不可省。