diff --git a/docs/governance/sdd-gitea-governance.md b/docs/governance/sdd-gitea-governance.md index 3491f22..29082d2 100644 --- a/docs/governance/sdd-gitea-governance.md +++ b/docs/governance/sdd-gitea-governance.md @@ -1,7 +1,7 @@ # SDD × Gitea 治理規範 ``` -version: 0.7.0 +version: 0.8.0 status: 現行(本檔的修改依 §9 走 issue) scope: 所有安裝 ISEP 的環境(本機 CC 與雲端 CC) distribution: 隨 ISEP 發佈,ISEP repo 是唯一編輯點(§11) @@ -9,6 +9,8 @@ lineage: v0.5.0 draft by claude.ai(存檔 _draft-claude-ai-v0.5.0.md) → v0.6.0 由總管對照現場實況修訂,逐條分歧見 DIVERGENCE-v0.5.0-to-v0.6.0.md → v0.7.0 併入全局遍歷(14 repo/156 open/45 張管理票分六群,§13)與新舊票 mapping(§14); 依 leo 指正:規劃不另立文件,修正本檔就是新版 + → v0.8.0 三源整合定案(§15):claude.ai 兩份規劃 × 舊票需求 × 既有機制, + 逐領域對照、三處矛盾解法、動工順序——leo 2026-08-20 核准 ``` --- @@ -582,6 +584,69 @@ leo 08-17 診斷見公理 3;08-17 實測:文字層的閘 **8 次誤攔、0 --- +## 15. 三源整合定案(claude.ai 規劃 × 舊票需求 × 既有機制)— leo 2026-08-20 核准 + +> leo:「你有沒有把現有的規劃跟計劃的比對?1. claude.ai 的規劃 2. 舊有票的需求 +> 3. 現在已經有的機制。你把這三個全部整合,修正出最終版規劃,核准再動工。」 +> +> claude.ai 的規劃有**兩份**:本檔前身 v0.5.0 draft(§1–12 骨架)+ `InkStoneCo#40` 的 +> forge-discipline 規格(三層架構、warn-first、只減不增)。本節是三源逐領域對照後的定案。 + +### 15.1 逐領域對照 + +| 領域 | claude.ai 規劃 | 舊票需求 | 既有機制 | **定案** | +|---|---|---|---|---| +| A 票的層級 | v0.5 §1–2 五層+milestone 橫切 | `#40` 同源;開工規約(milestone 只拉既有票) | v0.6 §1–2 已收編;`hub` 已建 | 維持;`#9` 的 project 半排群 5 | +| B 狀態機與標籤 | 三態+labels.yaml+exclusive | 現場七態、179 張票在用 | 七態+`close/*`+人閘標籤已建,14 repo 對齊、sync 冪等 | ✅ **已成立**;定期校正排群 1 後 | +| C 關票語意 | merge 自動關、禁手動 | 「審核後沒關票是大問題」;`#12` | §3.4 已立;E3 未建;`issue-status-autoflip.sh` 作用**未查證** | E3 排群 4;先查證 autoflip | +| D 人閘與遠端同意 | 兩種人閘+Telegram 格式(H6.3) | `#15`/`#38`/`#34`/`#31` | 標籤已建;`gitea-arm` 有 D80 不可偽造性;notify_leo 通道 | 🔴 **不新建**:`#38` 兩改動做在既有 gitea-arm 上=群 3 第一刀 | +| E 封路清單 | E1–E16(hook 名全猜) | `#23`/`#56`/`#36`/`#22`/`#55`:先修既有誤攔 | 43 支實體;§8 已對照;兩判準已實測(指令位置 8/8;heredoc=資料未實作) | **先修(群 0)後建(群 4/5)**;新建受 15.2-1 約束 | +| F 規則載體與生命週期 | `#40` 三層+warn-first+只減不增+盤點先審 | `#48`:無留痕就無法校準——warn 觀察期的資料前提 | 43 支全 block;盤點已交等審;三行檔頭 0/43;hookify warn 不進 AI(§13.9) | 四層定位(15.2-2);**`#48` 是 `#40` 的前提** | +| G 分發與環境同步 | manifest;~~子集~~(已刪);E11 | `#14`/`#57` | plugin 機制成立、A8 驗過;update 只認版本號⇒版本紀律=傳輸機制;雲端待 leo;舊 `.claude/` 未拆 | 群 2 三件收尾:leo 兩欄→雲端 B 組驗→拆舊 | +| H 觀測與開場全局 | 🔴 **兩份規劃都沒有這章**——三源比對最大發現 | `#48`/`#17`/`#20`/`Arcrun#81`/`#142` | 2/43 留痕;PANORAMA 未接 hook | 群 1;本節核准後這章就是規範的常設缺口,補在 `#48` 關票時 | +| I 派工流程 | S3.0.1 領票 | `#12`/`#28` | `no-ticket-no-dispatch`(實際擋過總管);worktree 隔離有效但靠人記得 | 群 4;派工動作自備 worktree | +| J 書寫路由 | §12 時態 | `#49` checkbox 分診 | §12 已收編 | 維持;`#49` 排群 5 | + +### 15.2 三源互相矛盾的三處與解法 + +1. **`#40` §7「hook 只減不增」 vs v0.5.0 E 清單要 ~11 支新閘**(claude.ai 兩份規劃自己打架) + ⇒ 新封路優先做在**伺服器端**(Gitea 原生:branch protection=E1、dependency=E4)或 hookify-warn 層; + 要新增 `.sh` 必須在 PR 說明為何前兩層做不到——`#40` §7 自己的但書。 +2. **`#40` §3 warn-first vs 既有 43 支全 block + hookify warn 不進 AI** + ⇒ 四層定位(D88 延伸):伺服器端拒絕/手寫 hook block(擋錯代價高的動作)/ + hookify+additionalContext(意圖提醒,🔴 永遠只准 warn)/skill(判斷型)。 + 既有 block 不動(群 0 是修準不是降級);**新**規則從 warn 層出生, + 靠 `#48` 的留痕數據才有資格升 block。 +3. **v0.5.0 E5 milestone 自動關+打 tag vs 假交付之痛** ⇒ 已在 M4.3 否決,維持。 + +### 15.3 已成立(三源一致且已實測,不再動) + +標籤真相源+14 repo 對齊(抽驗 4 repo 缺 0 不符 0)/單一 plugin 兩端同份(A8 驗過)/ +版本=release 紀律+防漂移閘/gitea-arm 不可偽造性(D80)/43 支盤點表(等 leo 審分類)。 + +### 15.4 動工順序 + +``` +群 0 讓閘擋對東西 第一刀 #23/#56:兩判準做成 hooks/lib/ 共用前處理, + ↓ 改四支誤攔最兇的閘,雙向實測 +群 1 讓規則的效果看得見 #48 留痕(#40 校準的前提)→ #17/#20 開場總圖 +群 2 同一件事只留一份 #14 雲端(等 leo 兩欄)→ 拆舊 .claude/ → #37(等裁) +群 3 不要卡在 leo 身上 #38 做在既有 gitea-arm 上 +群 4 派工與交付紀律 #12/#28/E3 +群 5 票與文件歸位 #9 project 半/#49 分診/#40 檔頭+README 總表 +``` + +🔴 每一刀的收工證據是「**某張舊票關掉了**」,不是出版本; +版本只在要讓閘生效時發,release note 寫明關了哪張舊票。不開任何新票(§14)。 + +### 15.5 尚待 leo 裁的三件(不擋群 0 開工) + +1. `#37` 兩份 repo 以哪份為準(建議 `inkstone/*`)——裁定前不在任何一份開新票 +2. `#5`/`#8` 方法論母題:轉 hub 或作廢 +3. 08-20 兩支未經 warn 期的 block 新閘:隨盤點表一起審,audit 過就地合法,否則降 warn + +--- + ## 附:Label 全集(快照;唯一真相為 `labels.yaml`) ```