2f5d9f3bb2
SDD: docs/3-specs/jdd-dual-profile(active)。編號 task 26/33 完成,Phase 4-5 未開工。 ■ Phase 2 JDD 文件範本(orchestrator profile) 範本形狀對齊「實際跑出來的那兩份」(總管已寫的 root.md 15 卡、journeys.md J-1 九站), 不是照規格憑空造: - 卡片是巢狀 bullet(`- **P1** 🟢 …` + 子項放來源/對帳),非規格畫的平行文字行 - 站點索引**巢狀 bullet 不用表格**(表格會把層級壓平,看不出從屬) - 兩份都保留「這卷還缺什麼(誠實記)」收尾段——規格沒有,但那是防假綠的地方 新增:root.md / journeys.md / sprint.md / triage-map.md 四範本(add-if-missing, 填了就永不覆蓋)+ plugin-load-order.md(W3 插槽,框架不發明平行外掛格式) ■ Phase 3 封路 hook(八條規則落六支檔) - role-guard(J1+J2+J3)★命門:考生不能改考卷。六組實測含「考題藏在別的 md 裡」也擋 - jdd-format-guard(J4+J5+J8):紅卡缺對帳日/任務缺站號/PM 文件混技術名詞 - station-done-guard(J6):收工判準是站的考題全綠,不是任務全關 - regression-scope(J7):動實作 → 列出要重考哪幾題(只提醒不擋) - install-artifact-guard(S1):實例不改機制 - orchestrator-scope-guard(S4):總管不進成員 repo 動實作(從實例上收進框架, 路徑清單改由實例自填,範本零專名) 掛載鏈依「範圍大的擋在前」:改機制 → 角色 → 位置 → 格式 → 既有三支 ■ 還清兩件舊債 - update.sh 檔案清單改讀 manifest(舊硬編降為抓不到來源時的 fallback) ——install/update 兩份手抄清單漂移的根因全修 - CLAUDE.md 界標補植:舊實例全文原封包進本地區、框架區重鋪、原檔備份、冪等 ——解開「沒界標⇒不敢覆蓋⇒框架改的憲法永遠送不到既有實例」這個死結 ■ 修掉三個自己造的問題(實測抓出來的,不是想出來的) - jdd-format-guard 誤擋真實 journeys.md 的「這卷還缺什麼」自述段 → 排除法改**正面圈定**(只掃卡片本體與站內文),說明區/自述段/索引自然不在範圍 - install-artifact-guard 把 pre-write-guard.sh 也擋了——而它的錯誤訊息正叫人去改那支 → 使用者自訂插槽列為最優先放行 - check-legacy-paths 用 HEAD 當基準會**自我弱化**:改成清單驅動後保護範圍 35→29 條 → 基準改指最後一次真正發佈的版本 ■ 實測(全部貼過輸出) - G2 考生改考卷:6/6,含 orchestrator 寫 code/engineer 改考題/考題藏別處 - G4 憲法分流:兩環境重裝,總管版技術軌關鍵字 0、成員版上游指針 8,界標 4/4 - G6 實例改機制:4/4,含框架開發標記放行與自訂插槽放行 - G7 CI 擋實例名:注入違規 → 指出檔案行號 exit 1 - G3 進度以站計量:起牀推「J-1 已點亮 2/9 站」、收工列未亮站並禁用任務數當理由 - 回歸考、界標補植冪等、orchestrator-scope-guard 四組:全通 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
7.1 KiB
7.1 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 | # ── JDD 封路 hook(角色軸屬 common,兩個 profile 都裝)── | ||||
| 53 | # 為什麼 role-guard 不按 profile 分裝(設計決策 D5): | ||||
| 54 | # 總管 repo 裡也會派 engineer subagent(身分矩陣右上角那一格)。 | ||||
| 55 | # 若「考生不能改考卷」只裝在成員 repo,那顆 subagent 在總管 repo 裡就改得動考卷 | ||||
| 56 | # ——而總管 repo 正是考卷所在地,等於這條規則在最該生效的地方失效。 | ||||
| 57 | T:.claude/hooks/install-artifact-guard.sh | .claude/hooks/install-artifact-guard.sh | overwrite | core | common |
| 58 | T:.claude/hooks/role-guard.sh | .claude/hooks/role-guard.sh | overwrite | core | common |
| 59 | T:.claude/hooks/jdd-format-guard.sh | .claude/hooks/jdd-format-guard.sh | overwrite | core | common |
| 60 | T:.claude/hooks/station-done-guard.sh | .claude/hooks/station-done-guard.sh | overwrite | core | common |
| 61 | T:.claude/hooks/regression-scope.sh | .claude/hooks/regression-scope.sh | overwrite | core | common |
| 62 | # ── wiki 模組 ── | ||||
| 63 | - | system-dev/wiki | dir | wiki | common |
| 64 | - | system-dev/wiki/cards | dir | wiki | common |
| 65 | T:system-dev/wiki/INDEX.md | system-dev/wiki/INDEX.md | overwrite | wiki | common |
| 66 | T:system-dev/wiki/TAXONOMY.md | system-dev/wiki/TAXONOMY.md | keep | wiki | common |
| 67 | T:system-dev/wiki/status.md | system-dev/wiki/status.md | keep | wiki | common |
| 68 | T:system-dev/wiki/mistakes.md | system-dev/wiki/mistakes.md | keep | wiki | common |
| 69 | T:system-dev/wiki/principles.md | system-dev/wiki/principles.md | add-if-missing | wiki | common |
| 70 | T:system-dev/wiki/decisions-summary.md | system-dev/wiki/decisions-summary.md | add-if-missing | wiki | common |
| 71 | T:system-dev/wiki/.wikiignore | system-dev/wiki/.wikiignore | keep | wiki | common |
| 72 | T:system-dev/docs/SKILL.md | system-dev/docs/SKILL.md | overwrite | wiki | common |
| 73 | T:.claude/commands/wiki-init.md | .claude/commands/wiki-init.md | overwrite | wiki | common |
| 74 | T:.claude/commands/wiki-capture.md | .claude/commands/wiki-capture.md | overwrite | wiki | common |
| 75 | T:.claude/commands/wiki-update.md | .claude/commands/wiki-update.md | overwrite | wiki | common |
| 76 | T:.claude/commands/wiki-recall.md | .claude/commands/wiki-recall.md | overwrite | wiki | common |
| 77 | T:.claude/commands/wiki-extract.md | .claude/commands/wiki-extract.md | overwrite | wiki | common |
| 78 | T:.claude/hooks/session-start-recall.sh | .claude/hooks/session-start-recall.sh | overwrite | wiki | common |
| 79 | T:.claude/hooks/wiki-secret-scan.sh | .claude/hooks/wiki-secret-scan.sh | overwrite | wiki | common |
| 80 | T:.claude/hooks/wiki-first-search.sh | .claude/hooks/wiki-first-search.sh | overwrite | wiki | common |
| 81 | T:.claude/hooks/subagent-wiki-guard.sh | .claude/hooks/subagent-wiki-guard.sh | overwrite | wiki | common |
| 82 | # ── sdd 模組 ── | ||||
| 83 | - | system-dev/docs/3-specs | dir | sdd | common |
| 84 | - | system-dev/workflows | dir | sdd | common |
| 85 | T:system-dev/docs/3-specs/TEMPLATE-sdd/design.md | system-dev/docs/3-specs/TEMPLATE-sdd/design.md | overwrite | sdd | common |
| 86 | T:system-dev/docs/3-specs/TEMPLATE-sdd/tasks.md | system-dev/docs/3-specs/TEMPLATE-sdd/tasks.md | overwrite | sdd | common |
| 87 | T:system-dev/docs/3-specs/SDD-LIFECYCLE.md | system-dev/docs/3-specs/SDD-LIFECYCLE.md | overwrite | sdd | common |
| 88 | T:system-dev/docs/3-specs/pending-changes.md | system-dev/docs/3-specs/pending-changes.md | add-if-missing | sdd | common |
| 89 | T:system-dev/docs/2-architecture/decisions/TEMPLATE-adr.md | system-dev/docs/2-architecture/decisions/TEMPLATE-adr.md | overwrite | sdd | common |
| 90 | T:.claude/commands/sdd-check.md | .claude/commands/sdd-check.md | overwrite | sdd | common |
| 91 | T:.claude/hooks/sdd-guard.sh | .claude/hooks/sdd-guard.sh | overwrite | sdd | common |
| 92 | T:scripts/sdd-active-check.sh | system-dev/scripts/sdd-active-check.sh | overwrite | sdd | common |
| 93 | T:system-dev/workflows/tasks-project-sync.yaml | system-dev/workflows/tasks-project-sync.yaml | overwrite | sdd | common |
| 94 | T:system-dev/workflows/tasks-project-sync.local.sh | system-dev/workflows/tasks-project-sync.local.sh | overwrite | sdd | common |