S4.9 Canonical Owner Response Envelope 規範
| 項目 |
內容 |
| 日期 |
2026-06-05 |
| 基準 |
gitea/main=b615bde5 docs(security): 補 S4.9 owner response 缺口稽核 [skip ci] |
| 範圍 |
S4.9 owner response 收件信封、欄位別名、隔離規則與驗收前狀態邊界 |
| 模式 |
只讀文件規範,不送 request、不收 owner response、不改 API、不改 UI、不改 runtime |
| 不可誤讀 |
本文件不是 request sent、不是 owner response received、不是 accepted、不是 Gitea / GitHub / refs / workflow / secret / runner / runtime 授權 |
1. 核心結論
S4.9 收件流程對外只接受一個 canonical owner response envelope。任何 source template、AwoooP handoff、reviewer note 或文件摘要,都可以保留細分欄位,但進入 S4.9 驗收前必須映射回六欄:
owner_role_or_team
decision
decision_reason
affected_scope
redacted_evidence_refs
followup_owner
沒有完成六欄映射前,不得把候選回覆視為 received;沒有完成預檢、隔離檢查、跨包一致性與 reviewer checklist 前,不得視為 accepted。
2. Canonical Envelope
| 欄位 |
必填 |
允許格式 |
缺漏處理 |
安全邊界 |
owner_role_or_team |
是 |
角色、團隊、責任單位;不需要個人敏感資料 |
request_more_evidence,不增加 received |
不收個人帳號密碼、token、session、private email |
decision |
是 |
confirm、defer、reject、request_more_evidence |
非允許值 hard_reject |
不得包含執行命令或批准 runtime action |
decision_reason |
是 |
一段脫敏摘要;可含 ticket id、文件路徑、hash、短原因 |
缺漏補件;疑似敏感 payload 先隔離 |
不渲染 raw secret、token、cookie、authorization header、未脫敏截圖 |
affected_scope |
是 |
repo 群、endpoint、namespace、host scope、legacy disposition、canonical owner 範圍 |
缺漏補件 |
不得把 scope 回覆解讀成 repo 建立、refs sync 或 primary 切換 |
redacted_evidence_refs |
是 |
文件路徑、snapshot id、ticket id、hash、脫敏 metadata pointer |
缺漏補件;疑似 payload 隔離 |
不收 secret value、masked token、partial token、private key、session value |
followup_owner |
是 |
後續補證、審查或決策負責角色 / 團隊 |
缺漏補件 |
不等於執行批准人;不等於 runtime operator |
3. Source Template Alias 映射
Source template 可以保留 domain-specific 欄位,方便 owner 回覆,但 S4.9 validator、AwoooP 顯示與 LOGBOOK 摘要必須使用 canonical 欄位。
| Canonical 欄位 |
可接受 alias |
映射規則 |
不可誤讀 |
owner_role_or_team |
owner_role、owner_team、review_owner、responsible_team、rollback_owner |
合併為負責角色 / 團隊;個人資訊只保留必要角色稱謂 |
不代表該 owner 已批准切 primary 或執行 rollback |
decision |
owner_decision、scope_decision、visibility_decision、canonical_decision、disposition |
只能轉成四個允許值;其他值需補件或拒收 |
confirm 只代表該題判定,不代表全包 accepted |
decision_reason |
reason、decision_summary、owner_note、review_note、rationale |
只保留脫敏摘要;含 payload 的段落移入 quarantine metadata,不回寫 raw text |
不得把長原文、聊天內容或抱怨放進產品文案 |
affected_scope |
affected_repos、affected_sources、affected_repos_or_sources_or_namespace、canonical_namespace、target_repos、host_scope、legacy_scope |
以人類可讀 scope 摘要呈現;必要時列出 repo / source ids,但不觸發任何 git action |
不代表可建立 repo、同步 refs、改 visibility、改 workflow |
redacted_evidence_refs |
evidence_refs、redacted_refs、source_refs、snapshot_refs、ticket_refs、metadata_refs |
只接受指標與脫敏 metadata;任何 raw payload 先隔離 |
不收 token value、secret value、hash fragment、authorization header、runner token |
followup_owner |
next_owner、followup_team、reviewer_owner、fallback_owner、resolution_owner |
映射為後續處理負責角色 / 團隊 |
不代表 AwoooP approval 或 security approval 已完成 |
4. 五題 Template 的 Canonical 投影
| 順序 |
Template |
affected_scope 投影 |
decision 判讀 |
redacted_evidence_refs 最低要求 |
| 1 |
response-public-only-vs-local-gitea-gap |
public-only / local Gitea scope、候選 repo、是否納入 inventory |
confirm、defer、reject、request_more_evidence |
public probe snapshot、local inventory ref、owner note id |
| 2 |
response-org-user-endpoint-identity |
wooo user / org endpoint、canonical endpoint、blocked endpoint 判讀 |
同上 |
endpoint probe summary、HTTP status metadata、owner note id |
| 3 |
response-internal-110-adjacent-scope |
110 adjacent repo / host / namespace 是否 in scope |
同上 |
local repo / host scope snapshot、redacted owner note |
| 4 |
response-repo-owner-canonical-scope |
repo owner、canonical source、GitHub target candidate、visibility review owner |
同上 |
refs truth summary、target probe summary、owner note id |
| 5 |
response-legacy-or-inaccessible-disposition |
legacy / inaccessible / external repo disposition 與後續 owner |
同上 |
disposition note、archive candidate summary、ticket id |
5. 收件狀態分離
S4.9 必須把以下狀態分開,不得連動調高:
| 狀態 |
可為 true / 大於 0 的前提 |
不得連動 |
request_sent / request_sent_count |
有人工送件 audit metadata,且送件內容未夾帶執行要求 |
不得同步調高 received / accepted |
received_response_count |
收到完整六欄 canonical envelope,且敏感 payload 已先隔離 |
不得同步視為 accepted |
accepted_response_count |
五題都通過 preflight、quarantine check、cross-packet consistency、reviewer checklist |
不得開 runtime gate |
rejected_response_count |
實際回覆被 hard reject,且 rejection reason 已記錄 |
不得自動要求 repo / host / runtime action |
quarantine_response_count |
疑似包含敏感 payload、執行要求或未脫敏 evidence |
不得渲染 raw payload,不得複製到 LOGBOOK |
6. Quarantine-first 規則
以下內容一律先隔離,不得進入一般文件、LOGBOOK、前端文案或 API response:
| 類別 |
範例 |
處理 |
| Secret / credential |
token、secret、private key、cookie、session、authorization header、runner token、webhook secret、database URL |
隔離並記錄類型與長度,不記值 |
| 未脫敏 evidence |
未遮蔽截圖、raw API response、含 private URL credential 的 log |
隔離,只保留 redacted evidence ref |
| 執行要求 |
建 repo、改 visibility、sync refs、delete refs、force push、改 workflow、啟 runner、Kali scan、/execute、host update |
hard_reject 或切出獨立人工批准流程 |
| 產品文案污染 |
內部對話、抱怨、Session 指令、聊天式同意 |
不進產品文案;只保留治理摘要 |
7. Reviewer Checklist
收件 reviewer 在標記 accepted 前必須逐項確認:
| 檢查 |
必須結果 |
| 六欄 canonical envelope |
全部存在且可讀 |
| 五題 response templates |
全部有對應回覆或明確補件狀態 |
| Alias mapping |
所有 source 欄位已映射回 canonical 欄位 |
| Sensitive payload check |
raw payload 已隔離,LOGBOOK / UI 只保留 redacted refs |
| Execution request check |
沒有 repo / refs / workflow / secret / runner / scan / host / runtime 執行要求 |
| Cross-packet consistency |
S4.9 / S4.10 / S4.11 / S4.12 口徑一致,沒有互相矛盾的 owner / scope / disposition |
| Count transition |
request sent、received、accepted、rejected 只依實際 audit metadata 分段更新 |
| Gate boundary |
active runtime gate、GitHub primary、Kali / host maintenance、Code Review candidate automation 仍需獨立人工批准 |
8. 驗收前仍必須維持
9. 本輪完成度
| 工作 |
完成度 |
說明 |
| Canonical owner response envelope |
100% |
六欄信封、alias 映射、五題投影、quarantine-first、reviewer checklist 已文件化 |
| S4.9 owner response gate |
0% |
尚未送 request、尚未收到 owner response、尚未 accepted |
| IwoooS 整體 |
維持 64% |
規範完成不代表 runtime readiness 提升 |
| active runtime gate |
0 |
不變 |