260 lines
18 KiB
Markdown
260 lines
18 KiB
Markdown
# Gitea 清冊 Owner Attestation Response 收件包
|
||
|
||
| 項目 | 內容 |
|
||
|------|------|
|
||
| 日期 | 2026-06-04 |
|
||
| 狀態 | 草案,等待 owner response |
|
||
| 資料契約 | `docs/schemas/gitea_inventory_owner_attestation_response_v1.schema.json` |
|
||
| 快照 | `docs/security/gitea-inventory-owner-attestation-response.snapshot.json` |
|
||
| 來源契約 | `gitea_inventory_coverage_attestation_v1` |
|
||
| 目標契約 | `gitea_repo_inventory_v1` |
|
||
| 模式 | `owner_response_intake_only` |
|
||
| 執行面授權 | `false` |
|
||
|
||
## 0. 核心結論
|
||
|
||
S4.9 補的是「owner 要怎麼回覆 S4.7 的 5 個 coverage attestation items」。
|
||
|
||
S4.7 已定義要問什麼,S4.8 已把它接到 AwoooP approval lane;S4.9 則把回覆欄位、驗收規則、拒收規則與允許輸出固定下來,避免 owner response 混入 token、DB dump、git object、repo 建立、refs sync 或 GitHub primary approval。
|
||
|
||
此文件不要求貼 token,不接受 raw secret,不寫 Gitea,不建立 GitHub repo,不 sync refs,也不把任何 attestation response 當成 migration approval。
|
||
|
||
## 1. Response 摘要
|
||
|
||
| 指標 | 值 |
|
||
|------|----|
|
||
| owner response 狀態 | `waiting_owner_response` |
|
||
| 必要 response items | 5 |
|
||
| 已收到 response | 0 |
|
||
| 已接受 response | 0 |
|
||
| 已拒收 response | 0 |
|
||
| response templates | 5 |
|
||
| owner response template statuses | 5 |
|
||
| owner response audit event templates | 3 |
|
||
| owner response redaction examples | 5 |
|
||
| owner response display sections | 8 |
|
||
| owner response request packet | 1 |
|
||
| owner response collection checks | 6 |
|
||
| intake preflight checks | 6 |
|
||
| intake outcome lanes | 5 |
|
||
| acceptance checks | 8 |
|
||
| rejection rules | 10 |
|
||
| 允許收集 token value | `false` |
|
||
| 允許 raw secret | `false` |
|
||
| 允許 repo write / refs sync | `false` |
|
||
| 授權切換 GitHub primary | `false` |
|
||
| 允許 action button | `false` |
|
||
|
||
## 1.1 2026-06-04 Current Intake Readiness
|
||
|
||
本段把 S4.9 從「已經有收件契約」再推進成「目前可直接照表收件與預檢」的狀態。這只代表收件準備度完成,不代表 request 已送出、owner 已回覆、response 已接受或任何執行授權。
|
||
|
||
| 指標 | 目前值 | 邊界 |
|
||
|------|--------|------|
|
||
| S4.9 收件準備度 | `100%` | 五個 templates、必填欄位、收件檢查、預檢、拒收規則與 outcome lanes 已可用 |
|
||
| S4.9 owner response gate | `0%` | `received_response_count=0`、`accepted_response_count=0`、`rejected_response_count=0` |
|
||
| 下一個收件焦點 | `S4.9 Gitea owner attestation response` | S4.10 / S4.11 / S4.12 仍排隊,不可提前視為 accepted |
|
||
| 可收資料 | owner role / team、decision、decision reason、affected scope、redacted evidence refs、followup owner | 只收脫敏 metadata 或 repo 內文件參照 |
|
||
| 不可收資料 | token、secret、private key、cookie、session、DB dump、git object、repo archive、private URL credential、執行 payload | 疑似敏感值先 quarantine,執行要求 hard reject |
|
||
| 可更新結果 | read-only coverage wording、migration matrix、decision table、readiness blocker | 不寫 Gitea、不建 GitHub repo、不同步 refs、不切 primary、不開 runtime gate |
|
||
|
||
### 1.1.1 五題缺口矩陣
|
||
|
||
| 順序 | Template | 目前缺口 | 合格回覆最小條件 | 失敗路由 |
|
||
|------|----------|----------|------------------|----------|
|
||
| 1 | `response-public-only-vs-local-gitea-gap` | `wooo/clawbot-v5`、`wooo/wooo-aiops` 是否屬本輪 scope 尚未由 owner 判定 | 逐 repo 填 owner、decision、reason、affected repos、redacted evidence refs、followup owner | 缺 repo 粒度時 `request_more_evidence`;含 refs / repo 執行要求時 `hard_reject` |
|
||
| 2 | `response-org-user-endpoint-identity` | `wooo` 應以 user、org 或兩者盤點尚未確認 | 指定 canonical namespace 或要求管理者補脫敏 evidence | 把 org 404 當完成時 `request_more_evidence`;要求 write/admin token 時 `hard_reject` |
|
||
| 3 | `response-internal-110-adjacent-scope` | 110 adjacent sources 是否納入本輪 scope 尚未確認 | 逐 source 判定 in-scope / out-of-scope / legacy / external / follow-up | 一句話排除全部時 `request_more_evidence`;要求 fetch / push / delete refs 時 `hard_reject` |
|
||
| 4 | `response-repo-owner-canonical-scope` | in-scope repo owner、canonical source、GitHub target 與 visibility review owner 尚未收齊 | 指定 repo owner、canonical source、GitHub target candidate、visibility review owner 與 evidence refs | 缺 owner 或 canonical 時 `request_more_evidence`;把 target candidate 當 repo creation approval 時 `hard_reject` |
|
||
| 5 | `response-legacy-or-inaccessible-disposition` | legacy、inaccessible、external repo disposition 與後續 owner 尚未收齊 | 指定 disposition、理由、後續 owner 與脫敏 evidence refs | 把 legacy candidate 當刪除 / 封存 approval 時 `hard_reject` |
|
||
|
||
### 1.1.2 收件結果分流
|
||
|
||
| Outcome | 何時使用 | 計數影響 |
|
||
|---------|----------|----------|
|
||
| `keep_waiting_owner_response` | 只有 request packet、template status 或空回覆 | received / accepted 維持 0 |
|
||
| `request_more_evidence` | 欄位缺漏、repo/source 粒度不足、evidence refs 不足 | 不增加 accepted |
|
||
| `quarantine_sensitive_payload` | 疑似含 token、secret、private key、cookie、session、未脫敏截圖或 private URL credential | 不保存 raw payload |
|
||
| `reject_execution_request` | 夾帶 repo / refs / workflow / secret / runner / Kali / primary 執行要求 | 不建立 action button、不進 runtime gate |
|
||
| `ready_for_reviewer_validation` | 五題欄位完整、evidence 已脫敏、無執行要求 | 只進 reviewer checklist;仍非 accepted |
|
||
|
||
## 2. Owner Response 必填欄位
|
||
|
||
每筆 response 至少要能回答:
|
||
|
||
1. `owner_role_or_team`:回覆者的角色或團隊,不要求個人敏感資訊。
|
||
2. `decision`:必須是該 S4.7 item 允許的決策值。
|
||
3. `decision_reason`:為什麼做此 scope / disposition 判定。
|
||
4. `affected_repos`、`affected_sources` 或 `canonical_namespace`:指出受影響 repo、namespace 或 110 adjacent source。
|
||
5. `evidence_refs`:只能指向 repo 內文件、snapshot 或 owner 提供的脫敏 metadata。
|
||
6. `followup_owner`:若需要補 evidence,需指定下一個負責角色或團隊。
|
||
|
||
## 2.0 Owner Response Request Packet
|
||
|
||
AwoooP 可顯示 `owner_response_request_packet` 給 owner,要求只回覆 S4.9 五個 templates:
|
||
|
||
1. `response-public-only-vs-local-gitea-gap`
|
||
2. `response-org-user-endpoint-identity`
|
||
3. `response-internal-110-adjacent-scope`
|
||
4. `response-repo-owner-canonical-scope`
|
||
5. `response-legacy-or-inaccessible-disposition`
|
||
|
||
允許填寫的內容只限 owner role/team、decision、decision reason、受影響 repo/source/namespace、canonical source、GitHub target candidate、visibility review owner、脫敏 evidence refs 與 followup owner。
|
||
|
||
禁止貼 token、secret、private key、cookie、session、DB dump、git object pack、repo archive、write/admin API request、repo/refs 執行要求或 workflow/secret/runner 執行要求。此 request packet 只是收件提示,不是 approval,也不授權 inventory、migration 或 primary。
|
||
|
||
## 2.0.1 Owner Response Collection Checklist
|
||
|
||
AwoooP 顯示 request packet 後,必須用 `owner_response_collection_checks` 維持 request / received / accepted 三種狀態分離:
|
||
|
||
| 順序 | 檢查 | 目的 |
|
||
|------|------|------|
|
||
| 1 | `collection-request-packet-displayed` | 只確認 request packet 已顯示,不代表 response 已收到 |
|
||
| 2 | `collection-read-only-submission-mode` | 限定 markdown response、redacted metadata pointer 或 request more evidence |
|
||
| 3 | `collection-five-template-tracking` | 五個 templates 逐項追蹤,不接受整體口頭同意 |
|
||
| 4 | `collection-redacted-evidence-only` | 只收 repo 內路徑或脫敏 metadata pointer |
|
||
| 5 | `collection-no-approval-language` | 不把「同意 / OK / 可進行」升級成 inventory、migration 或 primary approval |
|
||
| 6 | `collection-audit-metadata-only` | 只記錄 audit metadata,不保存敏感值 |
|
||
|
||
這 6 個 checks 只幫 AwoooP 維持收件秩序。request 已顯示仍然是 `waiting_owner_response`;部分 response 到齊也只能進 preflight / outcome lane,不能直接變成 accepted。
|
||
|
||
## 2.0.2 Owner Response Template Status Ledger
|
||
|
||
AwoooP 可用 `owner_response_template_statuses` 顯示五個 templates 的逐項狀態:
|
||
|
||
| 順序 | Template | 目前狀態 | Request 狀態 | Received / Accepted / Rejected | 下一步 |
|
||
|------|----------|----------|--------------|-------------------------------|--------|
|
||
| 1 | `response-public-only-vs-local-gitea-gap` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` | 逐項判定 `wooo/clawbot-v5`、`wooo/wooo-aiops` 是否屬本輪 scope |
|
||
| 2 | `response-org-user-endpoint-identity` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` | 說明 `wooo` 應以 user、org 或兩者盤點 |
|
||
| 3 | `response-internal-110-adjacent-scope` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` | 逐項判定 110 adjacent sources 是否納入 |
|
||
| 4 | `response-repo-owner-canonical-scope` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` | 指定 owner、canonical source、GitHub target candidate 與 visibility review owner |
|
||
| 5 | `response-legacy-or-inaccessible-disposition` | `waiting_owner_response` | `request_ready_not_sent` | `0 / 0 / 0` | 留下 legacy / inaccessible / external disposition、理由與後續 owner |
|
||
|
||
這個 ledger 只顯示逐項狀態,不是 approval queue。`request_ready_not_sent` 只代表 AwoooP 有資料可顯示;在 owner 真的回覆前,`received_response_count`、`accepted_response_count` 與 `rejected_response_count` 都必須維持 0。
|
||
|
||
## 2.0.3 Owner Response Audit Event Templates
|
||
|
||
AwoooP 可用 `owner_response_audit_event_templates` 做未來 audit metadata 的格式參考:
|
||
|
||
| 順序 | Event template | 觸發點 | 允許記錄 |
|
||
|------|----------------|--------|----------|
|
||
| 1 | `audit-owner-response-request-shown` | 顯示 request packet 時 | request id、template ids、target contract、顯示角色、台北時間與來源文件 |
|
||
| 2 | `audit-owner-response-received-metadata` | 收到 owner response metadata pointer 時 | template id、attestation item、owner role/team、台北時間與脫敏 evidence refs |
|
||
| 3 | `audit-owner-response-outcome-classified` | 完成 collection / preflight / outcome 分類時 | template id、collection status、outcome lane、next owner action、分類角色與台北時間 |
|
||
|
||
這 3 個 event templates 目前都是 `template_only_not_emitted`,`emitted_event_count=0`。它們不代表 AwoooP production ingestion 已啟用,也不保存 owner response raw body、token、secret、private key、cookie、session、DB dump、git object pack、repo archive 或 execution request payload。
|
||
|
||
## 2.0.4 Owner Response Redaction Examples
|
||
|
||
AwoooP 可用 `owner_response_redaction_examples` 顯示 owner 回覆時應該怎麼引用 evidence,而不是貼 raw payload:
|
||
|
||
| 順序 | Example | 用途 |
|
||
|------|---------|------|
|
||
| 1 | `redaction-existing-doc-ref` | 引用 repo 內既有文件或 snapshot,不貼 API raw body |
|
||
| 2 | `redaction-owner-decision-metadata` | 只填角色、decision、理由與 followup owner,不貼密碼、session 或 token |
|
||
| 3 | `redaction-private-url-metadata` | 私有 remote 只保留 host、namespace、repo slug 與 credential_present=true/false |
|
||
| 4 | `redaction-api-export-summary` | 只保留匯出來源類型、count、redaction status 與 evidence ref |
|
||
| 5 | `redaction-quarantine-pointer` | 不確定是否含敏感值時只留下 quarantine reason 與下一步,不保存原文 |
|
||
|
||
這 5 個 examples 全部都是 `template_example_only`,只供 AwoooP 顯示與 owner 填寫參考。它們不代表 response 已收到、不代表 response accepted、不啟用 production ingestion,也不允許保存 raw payload。
|
||
|
||
## 2.0.5 Owner Response Display Sections
|
||
|
||
AwoooP 顯示 S4.9 時,可依 `owner_response_display_sections` 固定 8 個只讀區塊:
|
||
|
||
| 順序 | Section | 顯示內容 |
|
||
|------|---------|----------|
|
||
| 1 | `display-owner-response-summary` | waiting 狀態、0/0/0 計數與 false flags |
|
||
| 2 | `display-owner-response-request-packet` | 五個 requested templates、允許欄位與 forbidden payloads |
|
||
| 3 | `display-template-status-ledger` | 五個 template 的 waiting / request ready / 0 counts |
|
||
| 4 | `display-audit-event-templates` | 0 emitted 的脫敏 audit metadata templates |
|
||
| 5 | `display-redaction-examples` | 安全回覆形狀、必要脫敏與 forbidden raw values |
|
||
| 6 | `display-collection-checks` | request / received / accepted 分離與收件模式 |
|
||
| 7 | `display-preflight-and-outcome-lanes` | 可審、補證、隔離、拒收或等待的分類 |
|
||
| 8 | `display-acceptance-and-rejection-rules` | acceptance checks、rejection rules 與 forbidden actions |
|
||
|
||
這 8 個 sections 全部都是 `display_contract_only`。AwoooP 只能顯示區塊與禁止事項,不得藉由 section 顯示啟用 action button、標記 received / accepted、建立 GitHub repo、寫 Gitea、sync refs 或切 GitHub primary。
|
||
|
||
## 2.1 AwoooP 收件前 Preflight
|
||
|
||
| 順序 | 檢查 | 失敗處理 |
|
||
|------|------|----------|
|
||
| 1 | 回覆必須對應 S4.7 已知 item | 要求 owner 修正 |
|
||
| 2 | 必填欄位完整 | 要求補 evidence |
|
||
| 3 | `decision` 在模板允許值內 | 要求 owner 修正 |
|
||
| 4 | 只接受脫敏 evidence refs | 進 mirror quarantine |
|
||
| 5 | 不得夾帶執行要求 | 拒收 execution request |
|
||
| 6 | 接受前需覆蓋五個 items | 維持 waiting 或 request more evidence |
|
||
|
||
這 6 個 preflight 只協助 AwoooP 判斷「可收、補證、隔離或拒收」。它們不授權 read-only inventory runtime、不建立 GitHub repo、不修改 Gitea、不 sync refs,也不切 GitHub primary。
|
||
|
||
## 2.2 AwoooP Outcome Lanes
|
||
|
||
| Lane | 何時顯示 | AwoooP 動作 |
|
||
|------|----------|-------------|
|
||
| `ready_for_owner_review` | 欄位完整、decision 合法、evidence 已脫敏且沒有執行要求 | 顯示可進 owner review |
|
||
| `request_more_evidence` | 缺欄位、decision 不合法、scope 不明或 evidence 不完整 | 顯示補證需求 |
|
||
| `quarantine_sensitive_payload` | 含 token、secret、cookie、session、private key、DB dump、git object pack 或未脫敏截圖 | 只送 mirror quarantine |
|
||
| `reject_execution_request` | 夾帶 repo、refs、workflow、secret、runner、scan 或 runtime 執行要求 | 拒收執行要求 |
|
||
| `keep_waiting_owner_response` | 五個 templates 未全部收到可驗收 response | 維持等待 owner response |
|
||
|
||
這些 lanes 只決定 AwoooP 顯示與稽核分類,不代表 accepted,也不會啟動 inventory、migration、refs、workflow、secret、runner 或 GitHub primary。
|
||
|
||
## 3. 五個 Response Template
|
||
|
||
| Template | 對應 S4.7 item | 驗收重點 |
|
||
|----------|----------------|----------|
|
||
| `response-public-only-vs-local-gitea-gap` | `public_only_vs_local_gitea_gap` | 逐項判定 `wooo/clawbot-v5`、`wooo/wooo-aiops` 是否屬本輪 scope |
|
||
| `response-org-user-endpoint-identity` | `org_user_endpoint_identity` | 說明 `wooo` 應以 user、org 或兩者盤點;不得把 404 視為完成 |
|
||
| `response-internal-110-adjacent-scope` | `internal_110_adjacent_scope` | 逐項判定 `bitan-pharmacy`、`root/momo-pro-system`、`tsenyang-website`、`wooo/wooo-infra-config` |
|
||
| `response-repo-owner-canonical-scope` | `repo_owner_canonical_scope` | 為 in-scope repo 指定 owner、canonical source、GitHub target candidate 與 visibility review owner |
|
||
| `response-legacy-or-inaccessible-disposition` | `legacy_or_inaccessible_repo_disposition` | 對 legacy / inaccessible / external repo 留下 disposition、理由與後續 owner |
|
||
|
||
## 4. 驗收規則
|
||
|
||
1. response 必須對應 S4.7 的 5 個 item 之一。
|
||
2. `decision` 必須在該 item 的允許值內。
|
||
3. 必須有 owner 理由,不能只有「同意」或「排除」。
|
||
4. `evidence_refs` 必須已脫敏,不得包含 token、secret、cookie、session、private key 或私有 URL 憑證。
|
||
5. 必須列出受影響 repo、namespace 或 source。
|
||
6. 不得夾帶 runtime 或 source-control 執行要求。
|
||
7. 要把 S4.7 標示為 accepted 前,5 個 items 都必須有可驗收 response。
|
||
8. response 通過後,GitHub primary readiness 仍維持 blocked,`primary_ready_count` 不得因此大於 0。
|
||
|
||
## 5. 必須拒收
|
||
|
||
1. token value、PAT、cookie、session、CSRF token 或 partial token。
|
||
2. webhook secret、repository secret value、runner registration token 或 deploy key private key。
|
||
3. private key、DB dump、git object pack、裸 repo tarball 或可還原 credential 的 artifact。
|
||
4. 要求使用 write-capable token、admin token 或 secret scope token。
|
||
5. 要求建立、刪除、封存或修改 Gitea repo。
|
||
6. 要求建立 GitHub repo、修改 visibility、sync refs、delete refs 或 force push。
|
||
7. 未逐項對應 S4.7 attestation item。
|
||
8. 只提供口頭同意、截圖或不完整 repo metadata。
|
||
9. 把 owner attestation 當成 repo migration approval 或 GitHub primary approval。
|
||
10. 任何不確定是否含敏感值的回覆。
|
||
|
||
## 6. AwoooP 可做
|
||
|
||
1. 顯示 5 個 owner response templates。
|
||
2. 顯示 owner response request packet、template status ledger、audit event templates、redaction examples、display sections、6 個 collection checks、6 個 intake preflight checks、5 個 outcome lanes、acceptance checks 與 rejection rules。
|
||
3. 在 owner response 到來後,只更新 read-only snapshot、matrix、decision table、readiness gate 與 status rollup。
|
||
4. 將不完整或可疑 response 放進 mirror quarantine。
|
||
5. 持續顯示 `received_response_count=0`、`accepted_response_count=0`,直到真的收到脫敏 response。
|
||
|
||
## 7. AwoooP 不可做
|
||
|
||
1. 不要求使用者貼 token、secret、private key、cookie、session 或 DB dump。
|
||
2. 不把 response 當成 read-only inventory 已執行。
|
||
3. 不把 response 當成 repo migration approval。
|
||
4. 不建立 GitHub repo。
|
||
5. 不修改 Gitea repo。
|
||
6. 不 sync refs。
|
||
7. 不新增執行按鈕。
|
||
|
||
## 8. 階段定位
|
||
|
||
S4.9 是 S4.7 / S4.8 後面的安全收件包。
|
||
|
||
它讓 owner response 變得可審、可驗收、可拒收,但仍然停在框架期。真正讓 `gitea_repo_inventory_v1.status=ok`,仍必須等 S4.6 脫敏 payload 通過、S4.7 五個 owner response 全部接受、refs truth / workflow-secret parity / rollback ADR / runtime gate 都補齊後,才能進下一階段。
|