@@ -1,7 +1,7 @@
# SDD × Gitea 治理規範
# SDD × Gitea 治理規範
```
```
version: 0.8 .0
version: 0.9 .0
status: 現行(本檔的修改依 §9 走 issue)
status: 現行(本檔的修改依 §9 走 issue)
scope: 所有安裝 ISEP 的環境(本機 CC 與雲端 CC)
scope: 所有安裝 ISEP 的環境(本機 CC 與雲端 CC)
distribution: 隨 ISEP 發佈,ISEP repo 是唯一編輯點(§11)
distribution: 隨 ISEP 發佈,ISEP repo 是唯一編輯點(§11)
@@ -11,6 +11,8 @@ lineage: v0.5.0 draft by claude.ai(存檔 _draft-claude-ai-v0.5.0.md)
依 leo 指正:規劃不另立文件,修正本檔就是新版
依 leo 指正:規劃不另立文件,修正本檔就是新版
→ v0.8.0 三源整合定案(§15):claude.ai 兩份規劃 × 舊票需求 × 既有機制,
→ v0.8.0 三源整合定案(§15):claude.ai 兩份規劃 × 舊票需求 × 既有機制,
逐領域對照、三處矛盾解法、動工順序——leo 2026-08-20 核准
逐領域對照、三處矛盾解法、動工順序——leo 2026-08-20 核准
→ v0.9.0 leo 裁定全面 PR-only(§8.1):所有 subagent、地端與雲端總管一律走 PR,
推翻總管原本「只有 ISEP 走 PR-only」的提案
```
```
---
---
@@ -237,7 +239,7 @@ s/triage ──驗傷通過──▶ s/backlog ──排進 milestone──▶ s
| # | 封什麼路 | 用什麼封 | 現況 |
| # | 封什麼路 | 用什麼封 | 現況 |
|---|---|---|---|
|---|---|---|---|
| E1 | 直接 push 預設分支 | branch protection: PR-only | ◐ 現有 `main-and-prod-push-guard.sh` 語意相反( 擋 subagent、放行總管)。**本版只對 ISEP 開 PR-only**,見 §8.1 |
| E1 | 直接 push 預設分支 | branch protection: PR-only,**全部 repo、全部角色**(§8.1) | ◐ 現有 `main-and-prod-push-guard.sh` 只 擋 subagent、放行總管 ⇒ **與本條不符,要改 ** :總管與雲端一律同擋 |
| E2 | PR 不關聯 issue | PR 模板必含 `closes #` ,缺漏即 fail | ❌ 待建 |
| E2 | PR 不關聯 issue | PR 模板必含 `closes #` ,缺漏即 fail | ❌ 待建 |
| E3 | 手動關 leaf | hook 攔截;只放行 `close/*` 與 §6.2 人執路徑 | ❌ 待建 |
| E3 | 手動關 leaf | hook 攔截;只放行 `close/*` 與 §6.2 人執路徑 | ❌ 待建 |
| E4 | 被 block 的票先關 | Gitea issue dependency | ✅ 平台原生,已驗證可用 |
| E4 | 被 block 的票先關 | Gitea issue dependency | ✅ 平台原生,已驗證可用 |
@@ -254,13 +256,24 @@ s/triage ──驗傷通過──▶ s/backlog ──排進 milestone──▶ s
| E15 | 代理硬做只有人能做的事 | 代理端無對應 tool 或 token;唯一出口是開 `human/exec` 票 | ◐ 部分(credential 機制已擋一部分,D36) |
| E15 | 代理硬做只有人能做的事 | 代理端無對應 tool 或 token;唯一出口是開 `human/exec` 票 | ◐ 部分(credential 機制已擋一部分,D36) |
| E16 | 標籤漂移 | 走 Gitea labels API 依 `labels.yaml` 校正:缺的補、改的還原、多的**只告警不刪** | ❌ 待建(`ISEP#4` ) |
| E16 | 標籤漂移 | 走 Gitea labels API 依 `labels.yaml` 校正:缺的補、改的還原、多的**只告警不刪** | ❌ 待建(`ISEP#4` ) |
### 8.1 E1 的適用範圍(裁決記錄 )
### 8.1 E1 的適用範圍:**全部 repo、全部角色,一律 PR-only**( leo 2026-08-20 裁定 )
**只 有 ISEP 走 PR- only;其他 repo 維持現行「總管推 main 自己裁」。 **
> leo 原話:「 **所 有 subagent 都是 PR only,在雲端地端總管所做的都是 PR-only。**」
- 理由:ISEP 壞掉 = **所有 session 一起壞 ** ,值得多一道摩擦;其他 repo 壞掉只影響自己。
```
- 一刀切到 14 個 repo 會在 leo 最忙的時候把整條線卡在「等總管開 PR」。
subagent(地端/雲端) → 只能推自己的分支,開 PR ← 擋
- 這條命中四題公式的「跨專案結構」⇒ 已記為裁決題(`DIVERGENCE` §E1),leo 可打回。
總管 (地端/雲端) → 只能推自己的分支,開 PR ← 擋
leo → 他自己的操作不在此限
```
🔴 **沒有例外,不分 repo。 ** 這條推翻了總管原本的判斷(原提案:只有 ISEP 走 PR-only,
其他 repo 維持「總管推 main 自己裁」,理由是怕卡住 leo)。
leo 直接裁定全面適用——**歷史紀錄留在 `DIVERGENCE-v0.5.0-to-v0.6.0.md` §E1,該段已被本條推翻。**
**因此要改的 ** : `main-and-prod-push-guard.sh` 目前的判準是
「`CLAUDE_CODE_CHILD_SESSION=1` 才擋」⇒ 只擋 subagent、放行總管,**與本條不符**。
改成不分角色一律擋推預設分支;`/tmp/.main-push-ok` 那套「總管看過」的戳記機制隨之作廢
(PR 的 review 就是那道確認,不需要第二套)。排在群 4「派工與交付紀律」。
### 8.2 所有 job 第一版都不依賴 Gitea Actions runner
### 8.2 所有 job 第一版都不依賴 Gitea Actions runner
@@ -614,6 +627,15 @@ leo 08-17 診斷見公理 3; 08-17 實測:文字層的閘 **8 次誤攔、0
`#37` 兩份 repo 哪份為準(建議 `inkstone/*` )/`#5` `#8` 轉 hub 或作廢/
`#37` 兩份 repo 哪份為準(建議 `inkstone/*` )/`#5` `#8` 轉 hub 或作廢/
08-20 兩支未經 warn 期的 block 閘,隨盤點表(`docs/hooks-inventory.md` )一起審。
08-20 兩支未經 warn 期的 block 閘,隨盤點表(`docs/hooks-inventory.md` )一起審。
**已裁 ** : PR-only 全面適用(§8.1, 2026-08-20)。
### 15.5 跨 repo 的載體:ISEP 的六張群票
Gitea 的 milestone 只管得到同一個 repo,所以六個群在 `inkstone/ISEP` 各有一張 `hub` 票
( `ISEP#30` – `#35` ),別的 repo 的舊票用 **Gitea 原生 dependency ** 指到它
( leo 2026-08-20;跨 repo dependency 已實測可用)。
⇒ **群票的相依全關,群票才關得掉 ** ;六張群票的狀態就是六群的進度。
---
---
## 附:Label 全集(快照;唯一真相為 `labels.yaml`)
## 附:Label 全集(快照;唯一真相為 `labels.yaml`)