# 資安鏡像驗收契約

| 項目 | 內容 |
|------|------|
| 日期 | 2026-05-13 |
| 狀態 | 草案 |
| Schema | `docs/schemas/security_mirror_acceptance_v1.schema.json` |
| Snapshot | `docs/security/security-mirror-acceptance.snapshot.json` |
| 模式 | `mirror_only` |
| runtime 執行授權 | `false` |

## 0. 核心結論

`security_mirror_acceptance_v1` 是 AwoooP 接收資安供應鏈 mirror-only 資料時的驗收契約。

它不新增功能，也不授權執行。它只定義 AwoooP 在接收前必須看見的條件：

1. Contract 數量與集合一致。
2. 每筆鏡像 payload 都有 `security_mirror_event_v1` 信封。
3. Route group 覆蓋所有 contract。
4. Evidence 必須脫敏。
5. LOW / MEDIUM observation、缺 owner response、partial mirror、source-control drift、Kali observe finding、workflow / secret name gap 與 headline holding 初期不阻擋。
6. Approval Queue 不等於 execution queue。
7. Channel Event 初期低噪音。
8. 進度估算只能顯示，不可被解讀成 runtime authorization。

## 1. 驗收 Checks

| Check | 目的 | 失敗時是否阻擋鏡像 |
|-------|------|--------------------|
| `CONTRACT_COUNT_MATCH` | 確認 manifest、readiness、route coverage 對齊 36 個 contracts | 是 |
| `EVENT_ENVELOPE_REQUIRED` | 確認每筆 payload 都不可執行、不可顯示執行按鈕 | 是 |
| `ROUTE_GROUP_COVERAGE` | 確認 5 個 route groups 覆蓋所有 contracts | 是 |
| `REDACTION_ONLY` | 確認不保存 raw sensitive value | 是 |
| `PROGRESS_ESTIMATE_NOT_AUTHORIZATION` | 確認 58% headline 進度與 micro progress delta ledger 只作跨 Session 狀態顯示，不授權 scan / execute / repo / refs / workflow / secret / runner / primary 動作 | 是 |
| `LOW_MEDIUM_NOT_BLOCKING` | 確認 7 條 low-friction non-blocking escalation lanes 初期只 observe / warn | 否 |
| `APPROVAL_IS_NOT_EXECUTION` | 確認 approval 只留痕、不自動執行 | 否 |
| `CHANNEL_LOW_NOISE` | 確認通知低噪音 | 否 |

## 2. AwoooP 可做

1. 顯示驗收結果。
2. 顯示哪個 check 失敗。
3. 將失敗 evidence 留在 Audit evidence。
4. 對 blocking check 失敗時暫停鏡像該批 payload。
5. 對非 blocking check 失敗時顯示 warn，保留低摩擦 rollout。
6. 依 `security_mirror_quarantine_v1` 顯示隔離 lane 與 retry gate。

## 3. AwoooP 不可做

1. 不把驗收契約轉成 runtime blocker。
2. 不把 Approval Queue 接成 execution queue。
3. 不自動補猜缺失 contract。
4. 不保存 raw secret、token、cookie、private key 或 exploit payload。
5. 不啟動 Kali scan。
6. 不建立 repo、不修改 visibility、不 sync refs、不切 GitHub primary。

## 4. 階段定位

S2.4 的目標是讓 AwoooP 消費 mirror-only 資安資料時有共同驗收語言。

它仍然屬於框架期，不是收緊期；只有「鏡像資料本身不完整或不脫敏」才阻擋該批 mirror ingestion，不阻擋產品、部署或使用者流程。
