From 64dae34efaef793458c4667dee21699f522c6961 Mon Sep 17 00:00:00 2001 From: richblack Date: Thu, 20 Aug 2026 17:42:51 +0800 Subject: [PATCH] =?UTF-8?q?v0.8.0=20=E4=BF=AE=E8=A8=82=EF=BC=9A=E5=88=AA?= =?UTF-8?q?=20M4.7=E3=80=81M4.3=20=E6=94=B9=E5=AF=AB=EF=BC=88=E9=87=8C?= =?UTF-8?q?=E7=A8=8B=E7=A2=91=E5=85=A7=E5=AE=B9=E4=B8=8D=E5=A2=9E=E4=B8=8D?= =?UTF-8?q?=E6=B8=9B=EF=BC=89=E3=80=81=C2=A715=20=E7=B2=BE=E7=B0=A1?= =?UTF-8?q?=E6=88=90=E6=96=B9=E5=90=91=E6=80=A7=E8=A6=8F=E5=8A=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit leo 2026-08-20 兩則指正: ① 「milestone 確定後怎麼可以再把東西移除?定下工作自己刪掉是什麼意思?根本就沒有什麼降」 ⇒ M4.7(降 scope 留痕)整段刪除——它把一個不該存在的操作合法化了。 M4.3 改成:到期只通知 leo;內容增減都是 leo 的裁決,不是總管的操作。 ② 「規劃書要大的規劃,方向性,不是寫廢話」 ⇒ §15 從逐領域十行大表精簡成:四句方向+六里程碑順序表+三矛盾定案+三件待裁。 --- docs/governance/sdd-gitea-governance.md | 95 +++++++++---------------- 1 file changed, 32 insertions(+), 63 deletions(-) diff --git a/docs/governance/sdd-gitea-governance.md b/docs/governance/sdd-gitea-governance.md index 29082d2..5893a82 100644 --- a/docs/governance/sdd-gitea-governance.md +++ b/docs/governance/sdd-gitea-governance.md @@ -125,21 +125,12 @@ s/triage ──驗傷通過──▶ s/backlog ──排進 milestone──▶ s - **M4.1** 命名 `vX.Y`,必設 due date。 - **M4.2** Deliverable = **一個可測的新版本號**。所有掛入 leaf 關閉後,可從預設分支打出通過驗收的版本。 -- **M4.3** **Timebox 到期不自動關、不自動打 tag。** 到期強制做一次降 scope 對帳(未完成 leaf 搬下一 milestone)並通知 leo。 - 🔴 自動打 tag 會製造假交付——tag 永遠只在「驗過了」之後發生。 +- **M4.3** **Timebox 到期:不自動關、不自動打 tag、也不把票移出。** 到期只做一件事:通知 leo。 + 🔴 **里程碑的內容一經確定就不增不減**(leo 2026-08-20:「milestone 確定後怎麼可以再把東西移除? + 定下工作自己刪掉是什麼意思?根本就沒有什麼降」)。增減都是 leo 的裁決,不是總管的操作。 + 自動打 tag 會製造假交付——tag 永遠只在「驗過了」之後發生。 - **M4.4** Milestone 關閉 = release tag,一對一。「已交付」唯一合法形式是 **tag 存在且裝得起來**;打 tag 前置 open issues = 0(§8 E12)。 - **M4.5** Description 只寫版本目標一句 + tracking 連結。討論回 tracking issue。 -- **M4.7(降 scope 必須留痕)** 🔴 **把票移出里程碑,必須同時寫進該里程碑的 description。** - 格式:原本幾張、移走哪幾張、為什麼、移去哪裡。 - - **禁的不是降 scope**——卡人閘時降 scope 就是 M4.3 要的。禁的是**降得無聲無息**。 - - 為什麼寫在 description 不是寫在票裡:**leo 看的是百分比那個畫面**, - 他不會為了確認 100% 是不是真的而去逐張點票。**痕跡要留在他會經過的地方。** - - 來由(2026-08-20 實犯):`v0.2.0` 本來 6 張,`#5` 卡人閘被移出 ⇒ 分母 6 變 5 ⇒ 顯示 100%。 - leo 當場問「為什麼還有很多 issues 開放中」。 - 🔴 這與 §3.4(審核完沒關票 ⇒ 數字偏低)是**同一個病的兩面**: - 畫面上的數字不等於實際狀態,而 leo 只看得到畫面。 - - 機械閘:`inkstone/ISEP#24`。 - - **M4.6** 🔴 **release note 寫在 Gitea Releases 裡,不寫在 README。**(leo 2026-08-20:「release 不是寫在 readme,要放在 release 裡」) README 不得自行宣稱版本號——那會產生第二份會漂移的版本真相。 @@ -584,66 +575,44 @@ leo 08-17 診斷見公理 3;08-17 實測:文字層的閘 **8 次誤攔、0 --- -## 15. 三源整合定案(claude.ai 規劃 × 舊票需求 × 既有機制)— leo 2026-08-20 核准 +## 15. 三源整合定案(leo 2026-08-20 核准) -> leo:「你有沒有把現有的規劃跟計劃的比對?1. claude.ai 的規劃 2. 舊有票的需求 -> 3. 現在已經有的機制。你把這三個全部整合,修正出最終版規劃,核准再動工。」 -> -> claude.ai 的規劃有**兩份**:本檔前身 v0.5.0 draft(§1–12 骨架)+ `InkStoneCo#40` 的 -> forge-discipline 規格(三層架構、warn-first、只減不增)。本節是三源逐領域對照後的定案。 +三源=claude.ai 兩份規劃(v0.5.0 draft+`InkStoneCo#40` forge-discipline)× 45 張舊票 × 既有機制。 -### 15.1 逐領域對照 +### 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 | +1. **機制只有一份。** 環境、標籤、規範、版本號都是單一真相源;本機與雲端裝同一個 plugin,沒有子集。 +2. **閘封動作,不封措辭。** 伺服器端擋不可逆;手寫 hook 擋高代價動作(block); + hookify+additionalContext 只提醒(永遠 warn);skill 管 regex 表達不了的判斷。 +3. **一切要留痕、可量測。** 閘的動作、開場全局、里程碑百分比——leo 看到的畫面就是實況。 +4. **進度=舊票關掉幾張。** 版本只是讓閘生效的載具,release note 寫明關了哪張票。 -### 15.2 三源互相矛盾的三處與解法 +### 15.2 工作順序(六個里程碑,各 repo 同名,內容一經確定不增不減) -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 否決,維持。 +| 順 | 里程碑 | 來源票 | +|---|---|---| +| 0 | 讓閘擋對東西 | `InkStoneCo#56 #23 #22 #36 #55 #1` | +| 1 | 讓規則的效果看得見 | `InkStoneCo#48 #17 #20 #18`、`Arcrun#86 #142 #81` | +| 2 | 同一件事只留一份 | `InkStoneCo#14 #57 #37 #11`、`arcrun-rag#116 #123 #122 #88`、`Arcrun#109`、`system-dev-template#2 #3` | +| 3 | 不要卡在 leo 身上 | `InkStoneCo#15 #38 #34 #31 #52` | +| 4 | 派工與交付紀律 | `InkStoneCo#12 #28`、`arcrun-rag#47 #124`、`Arcrun#93 #143 #131`、`system-dev-template#7` | +| 5 | 票與文件歸位 | `InkStoneCo#9 #49 #10 #8 #5`、`system-dev-template#1 #4` | -### 15.3 已成立(三源一致且已實測,不再動) +排序判準=「什麼擋住什麼」:閘不修好,其他群的成果會被誤攔咬到;沒有留痕,修了也量不出變好。 +`#40` 是憲法,貫穿全部;`#48` 是 `#40` warn 校準的資料前提,所以排群 1 之首。 -標籤真相源+14 repo 對齊(抽驗 4 repo 缺 0 不符 0)/單一 plugin 兩端同份(A8 驗過)/ -版本=release 紀律+防漂移閘/gitea-arm 不可偽造性(D80)/43 支盤點表(等 leo 審分類)。 +### 15.3 三處矛盾的定案 -### 15.4 動工順序 +1. `#40`「hook 只減不增」vs E 清單要 ~11 支新閘 ⇒ 新封路優先做在**伺服器端**或 **warn 層**; + 要新增 `.sh` 必須在 PR 說明為何前兩層做不到。 +2. warn-first vs hookify 的 warn 不進 AI ⇒ warn 一律用 `additionalContext`; + 新規則從 warn 出生,憑 `#48` 的留痕數據才升 block。 +3. milestone 到期自動關+打 tag ⇒ 否決(M4.3)。 -``` -群 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 總表 -``` +### 15.4 待 leo 裁(不擋群 0 開工) -🔴 每一刀的收工證據是「**某張舊票關掉了**」,不是出版本; -版本只在要讓閘生效時發,release note 寫明關了哪張舊票。不開任何新票(§14)。 - -### 15.5 尚待 leo 裁的三件(不擋群 0 開工) - -1. `#37` 兩份 repo 以哪份為準(建議 `inkstone/*`)——裁定前不在任何一份開新票 -2. `#5`/`#8` 方法論母題:轉 hub 或作廢 -3. 08-20 兩支未經 warn 期的 block 新閘:隨盤點表一起審,audit 過就地合法,否則降 warn +`#37` 兩份 repo 哪份為準(建議 `inkstone/*`)/`#5` `#8` 轉 hub 或作廢/ +08-20 兩支未經 warn 期的 block 閘,隨盤點表(`docs/hooks-inventory.md`)一起審。 ---