# S4.9 Security Acceptance Record Template | 項目 | 內容 | |------|------| | 日期 | 2026-06-15 | | 基準 | `gitea/main=57df61da docs(iwooos): 記錄 AwoooP 前台脫敏正式驗證 [skip ci]` | | 上游文件 | `docs/security/S4-9-CANONICAL-OWNER-RESPONSE-ENVELOPE.md`、`docs/security/S4-9-OWNER-RESPONSE-INTAKE-FORM.md`、`docs/security/S4-9-REVIEWER-VALIDATION-CHECKLIST.md` | | 模式 | security acceptance record template only | | 不可誤讀 | 本文件不是 owner response、不是 reviewer validation 已通過、不是 accepted record、不是 GitHub primary / repo / refs / workflow / secret / runner / host / runtime 執行授權 | ## 1. 使用時機 本模板只能在 reviewer validation outcome 為 `ready_for_security_acceptance_record` 後使用。它的目的,是讓 security reviewer 把「可接受的脫敏 evidence、仍排除的 scope、後續 owner、不可授權聲明」記成一份可稽核紀錄。 建立本模板不代表: - request 已送出 - owner response 已收到 - reviewer validation 已通過 - security acceptance 已完成 - GitHub primary 可以切換 - repo / refs / workflow / secret / runner / host / runtime 可以執行任何變更 ## 2. 建立實際紀錄前置條件 | 前置條件 | 必須結果 | 不通過時 outcome | |----------|----------|------------------| | 最新基線 | 已 `git fetch gitea --prune` 並記錄 `baseline_commit` | `request_more_evidence` | | Intake form | 五題都有非空回覆,且能映射到六欄 canonical envelope | `request_more_evidence` | | Reviewer validation | V0-V8 全部通過,且 output 有 reviewer validation id | `request_more_evidence` | | Quarantine | 無未解的 sensitive payload、raw secret、未脫敏截圖或 private credential URL | `quarantine_sensitive_payload` | | Execution request | 沒有 repo create、visibility change、refs sync、workflow 修改、runner 啟用、Kali scan、`/execute`、SSH、host update、runtime restart / rollout / scale / delete | `reject_execution_request` | | Cross-packet consistency | S4.5 / S4.10 / S4.11 / S4.12 / rollback ADR / runtime gate 沒有 owner、scope、disposition 矛盾 | `request_more_evidence` | | Not approval statement | 已明確寫入「本紀錄不是執行批准」 | 不得建立 accepted record | ## 3. Acceptance Record 欄位 | 欄位 | 必填 | 填寫規則 | |------|------|----------| | `acceptance_record_id` | 是 | 格式建議 `s4-9-security-acceptance-YYYYMMDD-NN` | | `baseline_commit` | 是 | 建立紀錄時的 `gitea/main` commit | | `intake_form_ref` | 是 | owner 回覆使用的 intake form 版本或文件路徑 | | `owner_response_refs` | 是 | 五題 owner response 的脫敏 metadata refs;不得貼 raw 回覆 | | `reviewer_validation_ref` | 是 | reviewer validation output id / 文件路徑 / ticket id | | `security_reviewer_role_or_team` | 是 | 最終 security acceptance reviewer 角色或團隊 | | `security_acceptance_decision` | 是 | 只能填 `accept_redacted_evidence`、`defer`、`reject`、`request_more_evidence`、`quarantine_before_acceptance` | | `decision_reason` | 是 | 一段脫敏摘要;不得包含 token、secret、cookie、session、authorization header、runner token | | `accepted_scope` | 是 | 只列被接受的 source-control / evidence scope;不包含 runtime action | | `excluded_scope` | 是 | 明列仍未接受或不在本輪的 repo、refs、workflow、secret、host、runtime scope | | `redacted_evidence_refs` | 是 | 文件路徑、snapshot id、ticket id、hash、脫敏 metadata pointer | | `unresolved_risks` | 是 | 仍需補證、owner attestation、rollback、primary readiness 或 runtime approval 的風險 | | `followup_owner` | 是 | 後續補證、正式批准或下一階段 owner | | `counts_after_record` | 是 | 只能依第 4 節規則填寫;模板本身全部維持 0 / false | | `not_approval_statement` | 是 | 必須使用第 7 節的不可授權聲明 | ## 4. Count Transition 規則 | Count / Flag | 何時可更新 | 本模板建立時 | |--------------|------------|--------------| | `request_sent_count` | 有人工送件 audit metadata,且送件內容只含脫敏表單與禁止條款 | 不更新 | | `received_response_count` | 收到非空 owner response,五題與六欄可讀,敏感 payload 已分流 | 不更新 | | `accepted_response_count` | 實際 security acceptance record 已填寫、decision 為 `accept_redacted_evidence`,且 reviewer validation ref 通過 | 不更新 | | `rejected_response_count` | 實際 owner response 被拒收,且 rejection reason 已記錄 | 不更新 | | `redacted_payload_ingested` | 脫敏 metadata 已通過 reviewer validation 並被 acceptance record 接受 | 不更新 | | `runtime_execution_authorized` | 另有獨立人工批准、rollback、post-check、disable plan 與 audit record | 永遠不得由 S4.9 文件更新 | | `github_primary_switch_authorized` | 另有 primary readiness、owner acceptance、rollback ADR 與 cutover approval | 永遠不得由本模板更新 | ## 5. Decision Outcome 處理 | Decision | 使用條件 | 後續 | |----------|----------|------| | `accept_redacted_evidence` | 五題、六欄、reviewer validation、cross-packet consistency 全部通過,且只接受脫敏 evidence | 可建立 accepted record;仍不開 runtime gate | | `defer` | scope 或 owner 時機未成熟,但無敏感 payload 或執行要求 | 保留 followup owner 與補件期限 | | `reject` | owner response 與 scope / evidence 不符合本輪要求 | 記錄 rejection reason,不建立 action button | | `request_more_evidence` | 欄位不足、scope 不清、refs / workflow / rollback owner 有矛盾 | 回到補件 | | `quarantine_before_acceptance` | 疑似 sensitive payload、未脫敏 evidence 或 private credential URL | 先隔離;不得建立 accepted record | ## 6. Evidence Redaction 規則 允許: - repo path、branch / tag / commit hash、workflow file path - snapshot id、ticket id、run id、redacted owner note id - HTTP status metadata、resource kind、namespace、non-secret key name - quarantine pointer,但不得含 raw payload 禁止: - token、secret、private key、cookie、session、authorization header - runner token、webhook secret、database URL、private URL credential - DB dump、repo archive、git object pack、裸 repo tarball - masked token、partial token、hash fragment、base64 secret payload - 未脫敏截圖、raw API body、raw log 中的敏感欄位 ## 7. 必填不可授權聲明 實際 acceptance record 的 `not_approval_statement` 必須包含以下語意: ```text 本 S4.9 security acceptance record 只接受脫敏 owner response evidence 與 scope 判定。 它不是 GitHub primary switch 批准,不是 repo 建立 / visibility change / refs sync 批准, 不是 workflow 修改 / runner 啟用 / Secret 讀取批准, 不是 Kali active scan、/execute、SSH、host update 或 runtime restart / rollout / scale / delete 批准。 任何執行面變更必須另有獨立人工批准、rollback、post-check、disable plan 與 audit record。 ``` ## 8. 空白模板 ```text acceptance_record_id: baseline_commit: intake_form_ref: owner_response_refs: reviewer_validation_ref: security_reviewer_role_or_team: security_acceptance_decision: decision_reason: accepted_scope: excluded_scope: redacted_evidence_refs: unresolved_risks: followup_owner: counts_after_record: request_sent_count: received_response_count: accepted_response_count: rejected_response_count: redacted_payload_ingested: runtime_execution_authorized: github_primary_switch_authorized: not_approval_statement: ``` ## 9. 驗收前狀態 ```text request_sent=false request_sent_count=0 received_response_count=0 accepted_response_count=0 rejected_response_count=0 owner_response_received_count=0 owner_response_accepted_count=0 redacted_payload_ingested=false active_runtime_gate_count=0 runtime_execution_authorized=false action_buttons_allowed=false repo_creation_authorized=false refs_sync_authorized=false workflow_modification_authorized=false github_primary_switch_authorized=false host_update_authorized=false active_scan_authorized=false secret_value_collection_authorized=false ``` ## 10. 本輪完成度 | 工作 | 完成度 | 說明 | |------|--------|------| | S4.9 security acceptance record template | 100% | 前置條件、欄位、count transition、decision outcome、evidence redaction 與不可授權聲明已固定 | | S4.9 owner response gate | 0% | 尚未送件、尚未收到 owner response、尚未 reviewer validation passed、尚未 accepted | | IwoooS 整體 | 維持 64% | Acceptance record 模板完成不代表 runtime readiness 提升 | | active runtime gate | 0 | 不變 |