# IwoooS 高價值配置變更 Gate

| 項目 | 內容 |
|------|------|
| 日期 | 2026-06-11 |
| 狀態 | `classification_gate_ready` |
| 工具 | `scripts/security/high-value-config-change-gate.py` |
| Snapshot | `docs/security/high-value-config-change-gate.snapshot.json` |
| runtime gate | `0` |

## 1. 目的

此 Gate 將「所有重要配置都要被控管」落成可重跑的只讀分類流程。它會讀取 git diff 或手動指定檔案，判斷是否碰到 C0 / C1 / C2 / C3 高價值配置，並列出後續 owner response、rollback、redacted evidence 與驗證需求。

本階段是低摩擦分類 Gate，不接 CI blocking，不修改 workflow、不讀 secret value、不 SSH、不 reload、不部署、不開 runtime gate。

## 2. 納管配置

| 優先 | 等級 | 配置類別 |
|------|------|----------|
| P0 | C0 | Nginx / reverse proxy / public route |
| P0 | C0 | DNS / TLS / certbot / certificate path |
| P0 | C0 | K8s / ArgoCD / production manifests |
| P0 | C0 | Secret metadata / injection / redaction |
| P0 | C0 | Gitea workflow / runner / deploy key / webhook / branch protection |
| P0 | C0 | Public / admin / API / frontend runtime config |
| P0 | C0 | Backup / restore / escrow / retention |
| P0 | C0 | `agent-bounty-protocol` runtime / MCP / A2A / treasury boundary |
| P1 | C1 | Prometheus / Alertmanager / Grafana / SigNoz / Sentry / Langfuse |
| P1 | C1 | Docker Compose / systemd / host service config |
| P1 | C1 | SSH / sudoers / known_hosts / firewall / WireGuard / NodePort |
| P1 | C1 | AI provider / model routing / Ollama proxy / cost and privacy |
| P2 | C2 | AWOOOI / AwoooP / IwoooS / VibeWork / other product runtime routes |
| P3 | C3 | Security evidence / snapshot / guard tooling |

### 2.1 2026-06-14 P0 pattern 補強

本輪補上兩類已存在但原本未被分類的 P0 路徑，避免 Nginx / certbot 相關檔案被視為普通文件或工具變更：

| 新增 pattern | 歸屬類別 | 理由 |
|--------------|----------|------|
| `k8s/nginx/**` | P0 / C0 Nginx public gateway | `k8s/nginx/awoooi-prod.conf` 會影響公開入口與 upstream，必須要求 public gateway owner response、rendered diff、`nginx -t`、route smoke 與 rollback ref |
| `scripts/ops/**/*cert*`、`scripts/ops/**/*tls*` | P0 / C0 DNS / TLS / certbot | `scripts/ops/*certbot*` 會影響憑證修復、renewal 或 ACME 路徑，必須要求 domain / TLS owner response、renewal window、ACME smoke、public HTTPS smoke 與 rollback ref |

驗證 sample：`k8s/nginx/awoooi-prod.conf`、`scripts/ops/188-registry-certbot-fix.sh`、`scripts/ops/fix-188-registry-certbot-renewal.sh` 皆命中 C0；owner evidence 仍為 incomplete，runtime execution 仍為 `false`。

## 3. 指令

檢查目前工作樹的 staged、unstaged 與 untracked 檔案：

```bash
python3 scripts/security/high-value-config-change-gate.py \
  --root .
```

檢查目前 commit 相對前一個 commit：

```bash
python3 scripts/security/high-value-config-change-gate.py \
  --root . \
  --base HEAD~1 \
  --head HEAD
```

手動分類單一檔案：

```bash
python3 scripts/security/high-value-config-change-gate.py \
  --root . \
  --changed-file infra/ansible/roles/nginx/templates/188-all-sites.conf.j2
```

更新 committed snapshot：

```bash
python3 scripts/security/high-value-config-change-gate.py \
  --root . \
  --base HEAD~1 \
  --head HEAD \
  --generated-at 2026-06-11T12:30:00+08:00 \
  --output docs/security/high-value-config-change-gate.snapshot.json
```

未來若要升級成更嚴格的人工審核，可提供 owner response evidence JSON：

```bash
python3 scripts/security/high-value-config-change-gate.py \
  --root . \
  --base gitea/main \
  --head HEAD \
  --evidence /path/to/redacted-owner-response.json \
  --fail-on-missing-evidence
```

## 4. owner response 欄位

所有 C0 / C1 高價值配置變更至少要補：

1. `owner_role_or_team`
2. `decision`
3. `decision_reason`
4. `affected_scope`
5. `redacted_evidence_refs`
6. `followup_owner`
7. `rollback_owner`
8. `maintenance_window`
9. `validation_plan`

這些欄位只是讓 reviewer 可以判斷，不等同 runtime 授權。

## 5. 必須維持 false

| flag | 要求 |
|------|------|
| `runtime_execution_authorized` | `false` |
| `host_write_authorized` | `false` |
| `secret_value_collection_allowed` | `false` |
| `workflow_modification_authorized` | `false` |
| `runner_change_authorized` | `false` |
| `refs_sync_authorized` | `false` |
| `force_push_authorized` | `false` |
| `active_scan_authorized` | `false` |
| `action_buttons_allowed` | `false` |

## 6. 判讀規則

| 狀態 | 意義 | 可做事項 |
|------|------|----------|
| `impacted_c0_category_count > 0` | 變更碰到公開入口、secret、部署、備份、agent runtime 等最高風險配置 | 先建立 owner response packet；不可直接 reload、deploy、sync 或修改主機 |
| `impacted_c1_category_count > 0` | 變更碰到監控、主機服務、網路、AI provider 等近程高風險配置 | 建立 maintenance window、rollback owner 與驗證計畫 |
| 只有 C2 | 產品 runtime route 或前端呈現變更 | 需要產品 owner、i18n、desktop / mobile smoke |
| 只有 C3 | 文件、snapshot、guard 或 evidence tooling | 跑 guard、JSON parse、doc secret sanity；不可提高 runtime gate |

## 7. 邊界

1. 本工具不接 CI blocking。
2. 本工具不修改 `.gitea/workflows`。
3. 本工具不讀 secret value、hash、partial token、private key、runner token 或 webhook secret。
4. 本工具不 SSH、不執行 `nginx -t`、不 reload / restart。
5. 本工具不做 DNS 修改、TLS renew、ArgoCD sync、kubectl、active scan 或 agent-bounty runtime execution。
6. IwoooS UI 可顯示分類結果，但不得把分類結果當 runtime 授權。

## 8. 完成度

| 工作 | 完成度 | 說明 |
|------|--------|------|
| 高價值配置 path pattern 分類 | `100%` | 已覆蓋 Nginx、DNS / TLS、K8s、secret、workflow、runner、backup、monitoring、host service、network、AI provider、agent-bounty-protocol 與產品 route |
| owner response 欄位檢查 | `70%` | 支援 evidence JSON 欄位與 false flag 檢查；尚未接正式收件 API |
| CI blocking | `0%` | 本階段刻意不接，避免初期摩擦過大 |
| live runtime 驗證 | `0%` | 本工具只分類，不執行 live probe |
