Files
system-dev-template/template/manifest/common.tsv
T
Leo 2f5d9f3bb2 feat(W2 Phase 2-3): JDD 文件範本+八條封路 hook+還清兩件舊債
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>
2026-08-06 00:26:56 +08:00

100 lines
7.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# common.tsv — 兩個 profile 都要裝的產物(安裝清單的單一真相源)
#
# 為什麼有這張表(SDD jdd-dual-profile 決策 D1):
# 在這之前,安裝清單**硬編在 install.sh,另一份幾乎重複的硬編在 update.sh**。
# 兩份手抄的清單必然漂移——而且已經漂了:
# · wiki-first-search.sh 1.16.0 頭條功能)→ update 會裝,**install 不裝**
# · subagent-wiki-guard.sh 1.17.0 頭條功能)→ update 會裝,**install 不裝**
# · publish-lag-check.sh 1.18.0 頭條功能)→ update 會裝,**install 不裝**
# · wiki/decisions-summary.md → update 保留它,**install 不建**
# 但 CLAUDE.md 範本的「Wiki 讀取順序」表裡就列著它 ⇒ 新用戶開檔即撲空
# ⇒ **乾淨安裝反而拿不到最新三版的招牌功能**,只有「先裝舊版再 update」的人拿得到。
# 本表讓兩支腳本讀同一份清單,這類漂移在結構上不可能再發生。
#
# ── 欄位 ──────────────────────────────────────────────
# 1 src 來源。T:<路徑> template/ 底下;S:<路徑> scripts/ 底下;- 建目錄用
# 2 dest 安裝到實例的哪裡(相對實例根)
# 3 class overwrite 模板/邏輯檔,新版直接蓋(使用者不會手改)
# keep 使用者資料檔,**永遠不動**(蓋掉=清空他的記憶)
# add-if-missing 使用者資料檔,缺了才補,已有絕不覆蓋
# keep-with-template 使用者會手填的客製檔;保留原檔,新版另存 .template.<ext>
# claude-md 特殊:CLAUDE.md 走「框架區+本地補充區」組裝,見 install.sh
# dir 只建目錄
# 4 module core | wiki | sdd —— 對應 install.sh 的 --wiki/--sdd/--all 模組選擇
# 5 profile 這裡一律 commonrepo/orchestrator 專屬的在各自的 tsv
#
# ⚠️ 路徑契約:dest 一旦發佈就是對既有實例的承諾,**只增不移**
# (舊實例跑的是舊腳本,路徑寫死;搬檔=它們整排 404、更新機制本身壞掉)。
# 要改版面先跑 scripts/check-legacy-paths.sh。
#
#src dest class module profile
# ── 目錄骨架 ──
- system-dev/docs/1-vision dir core common
- system-dev/docs/2-architecture/decisions dir core common
- system-dev/docs/4-guides dir core common
- system-dev/docs/5-records/incidents dir core common
- system-dev/docs/5-records/test-reports dir core common
- system-dev/docs/6-user dir core common
- system-dev/scripts dir core common
- .claude/commands dir core common
- .claude/hooks dir core common
- .claude/hooks/lib dir core common
# ── core:兩個模組都要的底盤 ──
T:system-dev/docs/README.md system-dev/docs/README.md overwrite core common
T:system-dev/docs/4-guides/logseq-markers.md system-dev/docs/4-guides/logseq-markers.md overwrite core common
T:system-dev/VERSION system-dev/VERSION overwrite core common
S:install.sh system-dev/scripts/install.sh overwrite core common
S:update.sh system-dev/scripts/update.sh overwrite core common
T:.claude/commands/issue-handle.md .claude/commands/issue-handle.md overwrite core common
T:.claude/hooks/pre-write-guard.sh .claude/hooks/pre-write-guard.sh keep-with-template core common
T:.claude/hooks/lib/role-lib.sh .claude/hooks/lib/role-lib.sh overwrite core common
T:.claude/hooks/publish-lag-check.sh .claude/hooks/publish-lag-check.sh overwrite core common
# ── JDD 封路 hook(角色軸屬 common,兩個 profile 都裝)──
# 為什麼 role-guard 不按 profile 分裝(設計決策 D5):
# 總管 repo 裡也會派 engineer subagent(身分矩陣右上角那一格)。
# 若「考生不能改考卷」只裝在成員 repo,那顆 subagent 在總管 repo 裡就改得動考卷
# ——而總管 repo 正是考卷所在地,等於這條規則在最該生效的地方失效。
T:.claude/hooks/install-artifact-guard.sh .claude/hooks/install-artifact-guard.sh overwrite core common
T:.claude/hooks/role-guard.sh .claude/hooks/role-guard.sh overwrite core common
T:.claude/hooks/jdd-format-guard.sh .claude/hooks/jdd-format-guard.sh overwrite core common
T:.claude/hooks/station-done-guard.sh .claude/hooks/station-done-guard.sh overwrite core common
T:.claude/hooks/regression-scope.sh .claude/hooks/regression-scope.sh overwrite core common
# ── wiki 模組 ──
- system-dev/wiki dir wiki common
- system-dev/wiki/cards dir wiki common
T:system-dev/wiki/INDEX.md system-dev/wiki/INDEX.md overwrite wiki common
T:system-dev/wiki/TAXONOMY.md system-dev/wiki/TAXONOMY.md keep wiki common
T:system-dev/wiki/status.md system-dev/wiki/status.md keep wiki common
T:system-dev/wiki/mistakes.md system-dev/wiki/mistakes.md keep wiki common
T:system-dev/wiki/principles.md system-dev/wiki/principles.md add-if-missing wiki common
T:system-dev/wiki/decisions-summary.md system-dev/wiki/decisions-summary.md add-if-missing wiki common
T:system-dev/wiki/.wikiignore system-dev/wiki/.wikiignore keep wiki common
T:system-dev/docs/SKILL.md system-dev/docs/SKILL.md overwrite wiki common
T:.claude/commands/wiki-init.md .claude/commands/wiki-init.md overwrite wiki common
T:.claude/commands/wiki-capture.md .claude/commands/wiki-capture.md overwrite wiki common
T:.claude/commands/wiki-update.md .claude/commands/wiki-update.md overwrite wiki common
T:.claude/commands/wiki-recall.md .claude/commands/wiki-recall.md overwrite wiki common
T:.claude/commands/wiki-extract.md .claude/commands/wiki-extract.md overwrite wiki common
T:.claude/hooks/session-start-recall.sh .claude/hooks/session-start-recall.sh overwrite wiki common
T:.claude/hooks/wiki-secret-scan.sh .claude/hooks/wiki-secret-scan.sh overwrite wiki common
T:.claude/hooks/wiki-first-search.sh .claude/hooks/wiki-first-search.sh overwrite wiki common
T:.claude/hooks/subagent-wiki-guard.sh .claude/hooks/subagent-wiki-guard.sh overwrite wiki common
# ── sdd 模組 ──
- system-dev/docs/3-specs dir sdd common
- system-dev/workflows dir sdd common
T:system-dev/docs/3-specs/TEMPLATE-sdd/design.md system-dev/docs/3-specs/TEMPLATE-sdd/design.md overwrite sdd common
T:system-dev/docs/3-specs/TEMPLATE-sdd/tasks.md system-dev/docs/3-specs/TEMPLATE-sdd/tasks.md overwrite sdd common
T:system-dev/docs/3-specs/SDD-LIFECYCLE.md system-dev/docs/3-specs/SDD-LIFECYCLE.md overwrite sdd common
T:system-dev/docs/3-specs/pending-changes.md system-dev/docs/3-specs/pending-changes.md add-if-missing sdd common
T:system-dev/docs/2-architecture/decisions/TEMPLATE-adr.md system-dev/docs/2-architecture/decisions/TEMPLATE-adr.md overwrite sdd common
T:.claude/commands/sdd-check.md .claude/commands/sdd-check.md overwrite sdd common
T:.claude/hooks/sdd-guard.sh .claude/hooks/sdd-guard.sh overwrite sdd common
T:scripts/sdd-active-check.sh system-dev/scripts/sdd-active-check.sh overwrite sdd common
T:system-dev/workflows/tasks-project-sync.yaml system-dev/workflows/tasks-project-sync.yaml overwrite sdd common
T:system-dev/workflows/tasks-project-sync.local.sh system-dev/workflows/tasks-project-sync.local.sh overwrite sdd common