# Gitea 認證清冊匯入驗收契約

| 項目 | 內容 |
|------|------|
| 日期 | 2026-05-17 |
| 狀態 | 草案，等待脫敏清冊 payload |
| 資料契約 | `docs/schemas/gitea_authenticated_inventory_import_acceptance_v1.schema.json` |
| 快照 | `docs/security/gitea-authenticated-inventory-import-acceptance.snapshot.json` |
| 來源契約 | `gitea_repo_inventory_v1` |
| 上游請求 | `gitea_authenticated_inventory_export_request_v1` |
| 覆蓋 Attestation | `docs/security/GITEA-INVENTORY-COVERAGE-ATTESTATION.md` |
| Attestation response 收件包 | `docs/security/GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.md` |
| 模式 | `redacted_payload_acceptance_only` |
| 執行面授權 | `false` |

## 0. 核心結論

S4.6 定義「收到 owner 或 Gitea 管理者提供的脫敏清冊後，怎麼驗收、怎麼拒收、怎麼隔離」。

這不是實際匯入，也不是宣告 Gitea inventory 完成。它只把未來可接受的 payload 形狀、必要欄位、拒收規則、隔離 lane 與允許輸出先固定下來，避免 owner 提供資料時把 token、DB dump、git object 或 repo 操作要求混進來。

S4.7 已補 owner coverage attestation，S4.9 已補 owner response request packet、template status ledger、audit event templates、redaction examples、display sections、collection checks 與收件包：即使 payload 通過 S4.6，也仍需 owner 依 S4.9 request packet 回覆 public-only / local remote gap、org/user endpoint、110 internal adjacent source、canonical owner 與 legacy/inaccessible disposition，且 template status ledger、audit event templates、redaction examples、display sections、collection checks 與 response 驗收通過後，才可把 blocker 往 primary readiness 下一關推進；audit event templates 目前只允許顯示 0 emitted 的脫敏 metadata 模板，redaction examples 只供填寫參考，display sections 只供只讀 UI 顯示，不代表 production ingestion。

## 1. 驗收摘要

| 指標 | 值 |
|------|----|
| 目標契約 | `gitea_repo_inventory_v1.status=ok` |
| 目前 payload 狀態 | `waiting_redacted_payload` |
| 可接受 visibility scope | `authenticated` / `admin_export` |
| 最低 repo count | 2 |
| 本機可見 Gitea unique repos | 4 |
| 需要解釋的缺口 | 3 |
| 已收到 payload | 0 |
| 已接受 payload | 0 |
| 已拒收 payload | 0 |
| 驗收檢查 | 10 |
| 拒收規則 | 10 |
| 敏感 payload 必須隔離 | `true` |
| 允許收集 token value | `false` |
| 允許 DB dump / git object | `false` |
| 允許 repo write / refs sync | `false` |
| 授權切換 GitHub primary | `false` |
| S4.7 owner attestation items | 5 |

## 2. 可接受 Payload 形狀

必須具備 top-level 欄位：

1. `schema_version`。
2. `base_url`。
3. `org`。
4. `visibility_scope`。
5. `token_present`。
6. `status`。
7. `repo_count`。
8. `repos`。
9. `coverage_gap_explanation`。
10. `redaction_attestation`。

每筆 repo 必須具備：

1. `full_name`。
2. `name`。
3. `owner.login`。
4. `private`。
5. `archived`。
6. `empty`。
7. `default_branch`。
8. `clone_url_redacted`。
9. `ssh_url_redacted`。
10. `github_repo_candidate`。

## 3. 必須拒收

1. token value、PAT、cookie、session、CSRF token 或 partial token。
2. webhook secret、repository secret value、runner registration token。
3. deploy key private key 或任何 private key material。
4. Gitea DB dump、完整 git object pack、裸 repo tarball。
5. write-capable token、admin token 或 secret scope token。
6. 建立、刪除、封存或修改 Gitea repo 的要求。
7. 建立 GitHub repo、修改 visibility、sync refs、delete refs、force push 或切 GitHub primary 的要求。
8. 未解釋未認證公開範圍 2 repos 與本機 Gitea 4 unique repos 差異的 payload。
9. 未說明 110 內部相鄰來源 scope 的 payload。
10. 任何不確定是否含敏感值的 payload。

## 4. 隔離 Lane

| 條件 | 隔離 lane |
|------|-----------|
| 出現 token、password、cookie、session、private key、webhook secret 或 runner registration token | `sensitive_value_payload_quarantine` |
| 出現 Gitea DB dump、git object pack、裸 repo tarball 或完整 artifact | `oversized_or_wrong_artifact_quarantine` |
| 欄位不足、repo_count 不一致或 coverage gap 未解釋 | `schema_or_evidence_gap_quarantine` |
| payload 夾帶 repo 建立、refs sync、primary switch 或 workflow / secret 修改要求 | `execution_request_quarantine` |

## 5. 允許輸出

1. 產出或更新脫敏後的 `gitea_repo_inventory_v1.status=ok` snapshot。
2. 更新 `SOURCE-CONTROL-MIGRATION-MATRIX.md` 與 source-control decision table。
3. 更新 `source_control_primary_readiness_gate_v1` 的 Gitea inventory blocker 狀態。
4. 更新 `security_mirror_status_rollup_v1` 與 `docs/LOGBOOK.md`。
5. 對缺口建立人工 owner review lane，不建立 execution action。

## 6. AwoooP 可做

1. 顯示 S4.6 匯入驗收格式。
2. 顯示 payload 驗收 / 拒收 / 隔離規則。
3. 在 owner 提供 payload 後，只做 schema / redaction / coverage gap 檢查。
4. 將敏感或不完整 payload 送進隔離 lane。
5. 將通過驗收的脫敏 metadata 顯示為等待人工 review 的 evidence。

## 7. AwoooP 不可做

1. 不要求使用者貼 token、secret、private key、cookie、session 或 DB dump。
2. 不把 payload 驗收成功當成 GitHub primary 已批准。
3. 不建立 GitHub repo。
4. 不修改 Gitea repo。
5. 不 sync refs。
6. 不新增執行按鈕。

## 8. 階段定位

S4.6 補的是 S4.5 後面的「安全收件規格」。它讓下一個 owner export / admin export 有清楚門檻，但仍然停在框架期。

真正讓 `gitea_repo_inventory_v1.status=ok`，必須等到脫敏 payload 實際產生、通過驗收、經人工 review，並完成 S4.7 owner coverage attestation 後，再另行提交 snapshot。此文件本身不代表 inventory 已完成。
