6a49f25aef
SDD: docs/3-specs/jdd-dual-profile(draft → active,leo 2026-08-05 回「開工」)
範圍:總管指定的「防炸兩件 → Phase 0 → Phase 1」,Phase 2 以後未開工。
■ 防炸(排在所有 task 之前,因為它們炸的是既有的東西)
- check-no-instance-names.sh + instance-names.txt:框架範本不得混入實例專名
基線實測 22 行命中(非先前誤報的 20)→ 9 行無損泛化改寫、13 行檔級豁免記帳待 W3 搬走
拒絕假性清理(把專名換成模糊詞=資訊消失、分層問題還在)
- check-legacy-paths.sh:已發佈腳本引用的 35 條遠端路徑只增不移
舊實例跑的是舊腳本、路徑寫死;搬檔=整排 404 且不會有下一次更新來修它(1.16.0 前科)
■ Phase 0 地基
- template/manifest/{common,repo,orchestrator}.tsv:安裝清單單一真相源
修好 install/update 兩份硬編清單的既有漂移——install 從不裝 wiki-first-search /
subagent-wiki-guard / publish-lag-check / decisions-summary,但 update 會
⇒ 乾淨安裝反而拿不到 1.16/1.17/1.18 的招牌功能
- .claude/hooks/lib/role-lib.sh:scope×role 兩軸機械判定,零自陳
身分矩陣六組實測全通過,含「成員 repo × orchestrator」不存在的格子擋下
- .sdt-framework-dev:框架開發標記(官方沒有 --framework-dev 這個參數,實查非記憶)
■ Phase 1 雙 profile
- profiles/{repo,orchestrator}/CLAUDE.md 兩部憲法
- install.sh:--profile + 自動偵測+寫檔前確認、manifest 驅動、
CLAUDE.md 三段組裝(框架區/本地補充區界標+sha256)、.profile、.template-manifest、
settings.json 寫入 env.AGENT_ROLE 預設
- update.sh:漂移偵測(不覆蓋手改檔、另存 .new、白話清單)+ 基準快照隨更新前進
- template/CLAUDE.md 原路徑凍結留底(相容)
■ 順手修掉兩個舊 bug(都在本次要動的函式裡)
- add_if_missing 少了 mkdir -p ⇒ 新目錄的檔 curl 失敗但 VERSION 照升(2026-07 記「待回報」至今未修)
- 下載健全性只用 [ -s ]=非空即接受 ⇒ 404 頁面會無聲覆寫好檔
(SKILL.md 260→1 行的機制;同一支腳本的版本號那條路早就防了,檔案這條沒防)
■ 實測(非推論)
- G4 憲法分流:兩個乾淨環境各裝一次,orchestrator 版含 SDD 三件式關鍵字 0 次、
repo 版含上游指針 8 次;界標 4/4;sha 宣告與實算相符
- G7 CI 擋實例名:注入違規行 → fail 並指出 sdd-check.md:77,exit 1;還原後 exit 0
- 漂移偵測:手改兩支 hook → 正確報 2 支、手改內容保住、產 .new;
解掉後歸零;連跑三輪冪等
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
6.2 KiB
6.2 KiB
| 1 | # common.tsv — 兩個 profile 都要裝的產物(安裝清單的單一真相源) | ||||
|---|---|---|---|---|---|
| 2 | # | ||||
| 3 | # 為什麼有這張表(SDD jdd-dual-profile 決策 D1): | ||||
| 4 | # 在這之前,安裝清單**硬編在 install.sh,另一份幾乎重複的硬編在 update.sh**。 | ||||
| 5 | # 兩份手抄的清單必然漂移——而且已經漂了: | ||||
| 6 | # · wiki-first-search.sh (1.16.0 頭條功能)→ update 會裝,**install 不裝** | ||||
| 7 | # · subagent-wiki-guard.sh (1.17.0 頭條功能)→ update 會裝,**install 不裝** | ||||
| 8 | # · publish-lag-check.sh (1.18.0 頭條功能)→ update 會裝,**install 不裝** | ||||
| 9 | # · wiki/decisions-summary.md → update 保留它,**install 不建**, | ||||
| 10 | # 但 CLAUDE.md 範本的「Wiki 讀取順序」表裡就列著它 ⇒ 新用戶開檔即撲空 | ||||
| 11 | # ⇒ **乾淨安裝反而拿不到最新三版的招牌功能**,只有「先裝舊版再 update」的人拿得到。 | ||||
| 12 | # 本表讓兩支腳本讀同一份清單,這類漂移在結構上不可能再發生。 | ||||
| 13 | # | ||||
| 14 | # ── 欄位 ────────────────────────────────────────────── | ||||
| 15 | # 1 src 來源。T:<路徑> = template/ 底下;S:<路徑> = scripts/ 底下;- = 建目錄用 | ||||
| 16 | # 2 dest 安裝到實例的哪裡(相對實例根) | ||||
| 17 | # 3 class overwrite 模板/邏輯檔,新版直接蓋(使用者不會手改) | ||||
| 18 | # keep 使用者資料檔,**永遠不動**(蓋掉=清空他的記憶) | ||||
| 19 | # add-if-missing 使用者資料檔,缺了才補,已有絕不覆蓋 | ||||
| 20 | # keep-with-template 使用者會手填的客製檔;保留原檔,新版另存 .template.<ext> | ||||
| 21 | # claude-md 特殊:CLAUDE.md 走「框架區+本地補充區」組裝,見 install.sh | ||||
| 22 | # dir 只建目錄 | ||||
| 23 | # 4 module core | wiki | sdd —— 對應 install.sh 的 --wiki/--sdd/--all 模組選擇 | ||||
| 24 | # 5 profile 這裡一律 common(repo/orchestrator 專屬的在各自的 tsv) | ||||
| 25 | # | ||||
| 26 | # ⚠️ 路徑契約:dest 一旦發佈就是對既有實例的承諾,**只增不移** | ||||
| 27 | # (舊實例跑的是舊腳本,路徑寫死;搬檔=它們整排 404、更新機制本身壞掉)。 | ||||
| 28 | # 要改版面先跑 scripts/check-legacy-paths.sh。 | ||||
| 29 | # | ||||
| 30 | #src | dest | class | module | profile |
| 31 | # ── 目錄骨架 ── | ||||
| 32 | - | system-dev/docs/1-vision | dir | core | common |
| 33 | - | system-dev/docs/2-architecture/decisions | dir | core | common |
| 34 | - | system-dev/docs/4-guides | dir | core | common |
| 35 | - | system-dev/docs/5-records/incidents | dir | core | common |
| 36 | - | system-dev/docs/5-records/test-reports | dir | core | common |
| 37 | - | system-dev/docs/6-user | dir | core | common |
| 38 | - | system-dev/scripts | dir | core | common |
| 39 | - | .claude/commands | dir | core | common |
| 40 | - | .claude/hooks | dir | core | common |
| 41 | - | .claude/hooks/lib | dir | core | common |
| 42 | # ── core:兩個模組都要的底盤 ── | ||||
| 43 | T:system-dev/docs/README.md | system-dev/docs/README.md | overwrite | core | common |
| 44 | T:system-dev/docs/4-guides/logseq-markers.md | system-dev/docs/4-guides/logseq-markers.md | overwrite | core | common |
| 45 | T:system-dev/VERSION | system-dev/VERSION | overwrite | core | common |
| 46 | S:install.sh | system-dev/scripts/install.sh | overwrite | core | common |
| 47 | S:update.sh | system-dev/scripts/update.sh | overwrite | core | common |
| 48 | T:.claude/commands/issue-handle.md | .claude/commands/issue-handle.md | overwrite | core | common |
| 49 | T:.claude/hooks/pre-write-guard.sh | .claude/hooks/pre-write-guard.sh | keep-with-template | core | common |
| 50 | T:.claude/hooks/lib/role-lib.sh | .claude/hooks/lib/role-lib.sh | overwrite | core | common |
| 51 | T:.claude/hooks/publish-lag-check.sh | .claude/hooks/publish-lag-check.sh | overwrite | core | common |
| 52 | # ── wiki 模組 ── | ||||
| 53 | - | system-dev/wiki | dir | wiki | common |
| 54 | - | system-dev/wiki/cards | dir | wiki | common |
| 55 | T:system-dev/wiki/INDEX.md | system-dev/wiki/INDEX.md | overwrite | wiki | common |
| 56 | T:system-dev/wiki/TAXONOMY.md | system-dev/wiki/TAXONOMY.md | keep | wiki | common |
| 57 | T:system-dev/wiki/status.md | system-dev/wiki/status.md | keep | wiki | common |
| 58 | T:system-dev/wiki/mistakes.md | system-dev/wiki/mistakes.md | keep | wiki | common |
| 59 | T:system-dev/wiki/principles.md | system-dev/wiki/principles.md | add-if-missing | wiki | common |
| 60 | T:system-dev/wiki/decisions-summary.md | system-dev/wiki/decisions-summary.md | add-if-missing | wiki | common |
| 61 | T:system-dev/wiki/.wikiignore | system-dev/wiki/.wikiignore | keep | wiki | common |
| 62 | T:system-dev/docs/SKILL.md | system-dev/docs/SKILL.md | overwrite | wiki | common |
| 63 | T:.claude/commands/wiki-init.md | .claude/commands/wiki-init.md | overwrite | wiki | common |
| 64 | T:.claude/commands/wiki-capture.md | .claude/commands/wiki-capture.md | overwrite | wiki | common |
| 65 | T:.claude/commands/wiki-update.md | .claude/commands/wiki-update.md | overwrite | wiki | common |
| 66 | T:.claude/commands/wiki-recall.md | .claude/commands/wiki-recall.md | overwrite | wiki | common |
| 67 | T:.claude/commands/wiki-extract.md | .claude/commands/wiki-extract.md | overwrite | wiki | common |
| 68 | T:.claude/hooks/session-start-recall.sh | .claude/hooks/session-start-recall.sh | overwrite | wiki | common |
| 69 | T:.claude/hooks/wiki-secret-scan.sh | .claude/hooks/wiki-secret-scan.sh | overwrite | wiki | common |
| 70 | T:.claude/hooks/wiki-first-search.sh | .claude/hooks/wiki-first-search.sh | overwrite | wiki | common |
| 71 | T:.claude/hooks/subagent-wiki-guard.sh | .claude/hooks/subagent-wiki-guard.sh | overwrite | wiki | common |
| 72 | # ── sdd 模組 ── | ||||
| 73 | - | system-dev/docs/3-specs | dir | sdd | common |
| 74 | - | system-dev/workflows | dir | sdd | common |
| 75 | T:system-dev/docs/3-specs/TEMPLATE-sdd/design.md | system-dev/docs/3-specs/TEMPLATE-sdd/design.md | overwrite | sdd | common |
| 76 | T:system-dev/docs/3-specs/TEMPLATE-sdd/tasks.md | system-dev/docs/3-specs/TEMPLATE-sdd/tasks.md | overwrite | sdd | common |
| 77 | T:system-dev/docs/3-specs/SDD-LIFECYCLE.md | system-dev/docs/3-specs/SDD-LIFECYCLE.md | overwrite | sdd | common |
| 78 | T:system-dev/docs/3-specs/pending-changes.md | system-dev/docs/3-specs/pending-changes.md | add-if-missing | sdd | common |
| 79 | T:system-dev/docs/2-architecture/decisions/TEMPLATE-adr.md | system-dev/docs/2-architecture/decisions/TEMPLATE-adr.md | overwrite | sdd | common |
| 80 | T:.claude/commands/sdd-check.md | .claude/commands/sdd-check.md | overwrite | sdd | common |
| 81 | T:.claude/hooks/sdd-guard.sh | .claude/hooks/sdd-guard.sh | overwrite | sdd | common |
| 82 | T:scripts/sdd-active-check.sh | system-dev/scripts/sdd-active-check.sh | overwrite | sdd | common |
| 83 | T:system-dev/workflows/tasks-project-sync.yaml | system-dev/workflows/tasks-project-sync.yaml | overwrite | sdd | common |
| 84 | T:system-dev/workflows/tasks-project-sync.local.sh | system-dev/workflows/tasks-project-sync.local.sh | overwrite | sdd | common |