# IwoooS Public Gateway Rendered Diff Gate 草稿

| 項目 | 內容 |
|------|------|
| 日期 | 2026-06-14 |
| 狀態 | `rendered_diff_gate_draft_ready_no_runtime_action` |
| 工具 | `scripts/security/public-gateway-rendered-diff-gate-draft.py` |
| 輸入 | `docs/security/public-gateway-redacted-export-intake-preflight.snapshot.json` |
| Snapshot | `docs/security/public-gateway-rendered-diff-gate-draft.snapshot.json` |
| runtime gate | `0` |

## 1. 目的

P0-16 已建立 redacted export 收件預檢，但即使未來收到並接受脫敏 ref，也不能直接進 `nginx -t`、reload 或 route smoke。P0-17 的目的，是先把 rendered diff、`nginx -t`、reload、route smoke、DNS / TLS probe、certbot renew、maintenance window、rollback owner 與 post-check 拆成分階段 gate 草稿。

本文件只定義 future gate draft。它不是 redacted export accepted、不是 rendered diff ready、不是 `nginx -t` 授權、不是 Nginx reload、不是 route smoke、不是 DNS / TLS probe、不是 certbot renew、不是 host write，也不是 production write 或 runtime gate。

## 2. 摘要

| 指標 | 值 | 說明 |
|------|----|------|
| diff gate candidate count | `3` | 對應三份 redacted export intake candidate |
| C0 diff gate candidate count | `2` | 188 all sites、188 internal tools HTTPS |
| diff gate field count | `12` | 每份 diff gate 草稿欄位 |
| preflight stage count | `7` | redacted export accepted 到 rollback / post-check 的分段 gate |
| blocked action count | `14` | 不可直接執行或不可誤讀的動作 |
| redacted export accepted | `0` | 尚未收到 / 接受 |
| rendered diff candidate / ready | `0 / 0` | 尚未產生 |
| nginx test authorized / executed | `0 / 0` | 尚未批准且未執行 |
| reload authorized / executed | `0 / 0` | 尚未批准且未執行 |
| route smoke authorized / executed | `0 / 0` | 尚未批准且未執行 |
| DNS / TLS probe、certbot renew | `0 / 0` | 尚未批准且未執行 |
| maintenance window / rollback owner | `0 / 0` | 尚未接受 |
| runtime gate / action button | `0 / 0` | 未開啟 |

## 3. Diff Gate 欄位

| 欄位 | 內容規則 |
|------|----------|
| `diff_gate_id` | 固定對應 public gateway rendered diff gate，不建立 runtime action |
| `intake_id` | 對應 P0-16 redacted export intake candidate |
| `export_request_id` | 對應 P0-15 live conf export request |
| `config_id` | 對應 public gateway preflight row |
| `control_tier` | 保留 C0 / C1 風險分級 |
| `source_config_ref` | 指向 repo-only source config snapshot |
| `redacted_live_conf_ref` | 未接受前為空 |
| `rendered_diff_ref` | 未產生前為空 |
| `nginx_test_plan_ref` | 未批准前為空 |
| `route_smoke_plan_ref` | 未批准前為空 |
| `rollback_owner` | 未指定前為 `pending_rollback_owner` |
| `not_approval` | 必須為 `true` |

## 4. Preflight Stages

| Stage | 規則 |
|-------|------|
| `redacted_export_acceptance_required` | 必須先有合格 redacted export accepted metadata |
| `normalize_without_raw_conf_storage` | 只可在隔離工作區以脫敏 ref 產生 normalized diff |
| `rendered_diff_owner_review_required` | rendered diff 只可成為 owner review candidate |
| `nginx_test_approval_package_required` | `nginx -t` 必須另有人工批准包、rollback owner 與維護窗口 |
| `reload_approval_separate` | reload 與 public route change 必須獨立批准 |
| `route_smoke_matrix_required` | route smoke 需列 affected routes、預期 status、TLS / WebSocket / ACME checks |
| `postcheck_and_rollback_required` | 未來執行前需 rollback owner、post-check 與失敗撤回條件 |

## 5. Blocked Actions

| Action | 邊界 |
|--------|------|
| `read_live_conf_over_ssh` | 未授權不得執行 |
| `store_raw_live_conf` | 不得寫入 repo、LOGBOOK 或前端 |
| `render_diff_from_unredacted_payload` | 必須拒收或隔離 |
| `nginx_test_without_approval` | 不得執行 |
| `nginx_reload_without_approval` | 不得執行 |
| `route_smoke_without_plan` | 不得執行 |
| `dns_probe_without_approval` | 不得執行 |
| `tls_probe_without_approval` | 不得執行 |
| `certbot_renew_without_approval` | 不得執行 |
| `modify_nginx_conf` | 不得改 live conf |
| `modify_dns_tls_config` | 不得改 DNS / TLS / certbot |
| `change_public_route` | 不得變更公開路由 |
| `write_production_host` | 不得主機寫入 |
| `open_runtime_gate` | 不得開 runtime gate |

## 6. 指令

產生 committed snapshot：

```bash
python3 scripts/security/public-gateway-rendered-diff-gate-draft.py \
  --root . \
  --intake-preflight-report docs/security/public-gateway-redacted-export-intake-preflight.snapshot.json \
  --output docs/security/public-gateway-rendered-diff-gate-draft.snapshot.json \
  --generated-at 2026-06-14T20:05:00+08:00
```

驗證 guard：

```bash
python3 scripts/security/security-mirror-progress-guard.py --root .
```

## 7. 完成度

| 工作 | 完成度 | 說明 |
|------|--------|------|
| rendered diff gate draft artifact | `100%` | 產生器、snapshot 與文件已固定 |
| redacted export accepted | `0%` | 尚未收到 / 接受 |
| rendered diff candidate / ready | `0%` | 尚未產生 |
| nginx test / reload / route smoke | `0%` | 尚未批准且未執行 |
| DNS / TLS / certbot | `0%` | 尚未批准且未執行 |
| runtime reload / host write | `0%` | 未授權且未執行 |
