# 低摩擦資安 Rollout Policy

| 項目 | 內容 |
|------|------|
| 日期 | 2026-06-04 |
| 狀態 | IwoooS active policy；仍採 observe-first |
| JSON snapshot | `docs/security/security-rollout-policy.snapshot.json` |
| Schema | `docs/schemas/security_rollout_policy_v1.schema.json` |
| 原則 | 初期先建立框架、可見性與追溯性，不把資安限制一次拉到最高 |

## 0. 核心結論

本資安網初期採 `observe-first`，不是 `block-first`。

目標是讓 Kali、Code Review、GitHub、Gitea、Codex、AwoooP 先共享 evidence、狀態與 approval boundary。初期不應把每個 LOW / MEDIUM finding、repo 差異、文件缺口、owner 待定都變成阻擋條件。

## 0.1 IwoooS 2026-06-04 補充邊界

IwoooS 目前整體維持 64%，框架 / 只讀證據 / 前台可視化維持 92%，runtime landing 維持 40-45%，active runtime gate 維持 0。這些數字只是治理與可視化狀態，不是執行授權。

| 規則 | 說明 |
|------|------|
| S4.9 owner response 是第一優先 | owner role / team、decision、decision reason、affected scope、redacted evidence refs、followup owner 都齊全且通過預檢前，received / accepted 維持 0 |
| AwoooP approval 不是資安批准 | AwoooP 可顯示候選與 approval boundary，但不得把它當 security approval decision record |
| UI 可見不是 runtime 授權 | IwoooS 卡片、Gate、矩陣、候選狀態只代表可視化，不代表 scan、execute、host update、repo / refs / workflow / secret / primary switch |
| Code Review 候選只可人工轉派 | 審查後修正候選必須走人工批准，再轉 Codex patch / PR / guard；不得直接自動改 code 或自動 deploy |
| Kali / 主機維護需獨立窗口 | 192.168.0.112 / 111 / 168 仍先 observe-only；不得直接 `apt upgrade`、restart、hardening、active scan、credentialed scan 或 `/execute` |
| 跨 Session 必須先同步 | 每次改檔前先 `git fetch gitea`、確認 `gitea/main`、比對另一個 Session 的 commit / run / production evidence；禁止 force push |

## 1. 四種模式

| Mode | 用途 | 初期處理 |
|------|------|----------|
| `observe` | read-only inventory、evidence mirror、狀態追蹤 | 允許持續推進，不阻擋 |
| `warn` | LOW / MEDIUM observation、非不可逆差異 | 產生 follow-up，不自動卡流程 |
| `approve_required` | 會碰 token、repo 建立、visibility、refs、secret、deploy、primary switch | 建立 approval candidate，批准後才執行下一步 |
| `block_candidate` | 無 rollback 的破壞性動作、保存 raw secret、force push | 預設不執行，只能走人工 exception |

## 2. 低摩擦矩陣

| 條件 | Mode | 可以做 | 不可以做 |
|------|------|--------|----------|
| Read-only inventory / evidence mirror | `observe` | 收 metadata、寫 redacted snapshot、更新文件、mirror 到 AwoooP | 寫入遠端、刪 repo、sync refs |
| LOW / MEDIUM observation，且不涉及不可逆變更 | `warn` | 標風險、建 follow-up、準備草案 | 擋 deploy、自動 patch、自動 merge |
| 使用 read-only token 或管理匯出 | `approve_required` | 人工批准後單次執行、只保存 `token_present` | 保存 token value、使用寫入 token、建立 repo |
| 建 repo / 改 visibility / sync refs | `approve_required` | 建 approval candidate、準備 migration / rollback plan | 未批准直接執行、直接 push refs、切 primary |
| secret / RBAC / NetworkPolicy / firewall / deploy / primary switch | `approve_required` | 建 approval event、準備 dry-run / rollback | auto execute、保存 secret value、跳過人工 review |
| 無 rollback 的破壞性動作或保存 raw secret | `block_candidate` | 記錄原因、要求人工 exception | force push、delete repo、保存 raw secret、關閉 audit |

## 3. 非阻擋升級分流

這 7 條 lane 是 AwoooP 與平行 Session 的共用低摩擦護欄。它們只決定「先 observe / warn，什麼時候需要 owner review」，不授權 runtime blocker、deploy blocker、repo / refs action、Kali active scan 或自動修復。

| Lane | 初始模式 | 可以做 | 禁止升級 |
|------|----------|--------|----------|
| LOW / MEDIUM observation | `warn` | 標記風險、建立 follow-up、補 evidence_ref、準備草案 | 阻擋 deploy、自動 patch、自動 merge、建立 runtime blocker |
| Owner response missing | `observe` | 顯示 missing lane、next collection candidate、template status、request packet | 把未回覆當拒絕、停止產品流程、自動補 owner response |
| Mirror data incomplete | `warn` | 顯示 partial / quarantine reason、要求補 redacted snapshot、保留 retry gate | 阻擋無關 runtime、當 production incident、吞入未脫敏 payload |
| Source-control drift draft | `warn` | 維持 draft reconcile plan、ADR、read-only diff、owner review lane | sync refs、delete refs、force push、建立 repo、修改 visibility、切 GitHub primary |
| Kali observe finding | `warn` | 顯示 redacted finding summary、evidence_ref、scan scope approval candidate、block reason | 自動啟動 active scan、呼叫 `/execute`、直接變 deploy blocker |
| Workflow / secret name gap | `warn` | 要求 redacted export、顯示 owner response template、更新 readiness wording | 收集 secret value、啟用 GitHub hosted runner、修改 workflow / webhook / repository secret |
| Progress display holding | `observe` | 顯示 micro progress、latest delta、not_authorization、下一個高層 gate | 把 58% 解讀成卡住、把 micro progress 當 runtime approval |

每一條 lane 都要求 `owner_review_required_before_blocking=true`、`runtime_blocking_allowed=false` 與 `not_authorization=true`。AwoooP 可以顯示 `display_non_blocking_escalation_lanes` 與建立 follow-up，但不能把 follow-up 轉成阻擋條件。

## 4. AwoooP 初期行為

AwoooP 初期只應：

1. mirror Runtime State / Channel Event / Audit evidence。
2. 計算 read-only policy 建議。
3. 建立必要的 approval candidate。
4. 顯示阻塞原因，但不直接執行修復。

AwoooP 初期不應：

1. 直接啟動 Kali active scan。
2. 直接呼叫 Codex patch runner。
3. 直接建 GitHub repo 或修改 visibility。
4. 直接同步 refs 或切 GitHub primary。
5. 把所有 observation 都變成 blocking incident。

## 5. 階段性收斂

| 階段 | 目標 | 控制強度 |
|------|------|----------|
| S0 | 文件與契約同步 | observe |
| S1 | read-only evidence 建立 | observe / warn |
| S2 | AwoooP mirror-only | observe / warn |
| S3 | 高風險 approval gate | approve_required |
| S4 | 受控 migration / execution | approve_required + rollback |
| S5 | 規則收斂與自動化 | 只在 evidence 成熟後逐步提高 |

## 6. 永久邊界

即使後續提高資安等級，以下仍不得自動化：

1. 保存 raw secret / token value。
2. 無 rollback 的 repo 刪除 / force push。
3. 未經 owner 批准的 visibility 修改。
4. 未完成 parity 的 GitHub primary switch。
5. 未經人工批准的 production deploy。
