2279 lines
107 KiB
JSON
2279 lines
107 KiB
JSON
{
|
||
"schema_version": "source_control_owner_response_validation_rollup_v1",
|
||
"status": "draft_waiting_owner_responses",
|
||
"date": "2026-06-12",
|
||
"mode": "owner_response_validation_rollup_only",
|
||
"runtime_execution_authorized": false,
|
||
"source_contracts": [
|
||
"gitea_inventory_owner_attestation_response_v1",
|
||
"github_target_owner_decision_response_v1",
|
||
"source_control_ref_truth_owner_response_v1",
|
||
"source_control_workflow_secret_name_owner_response_v1"
|
||
],
|
||
"source_indexes": [
|
||
"docs/security/gitea-inventory-owner-attestation-response.snapshot.json",
|
||
"docs/security/github-target-owner-decision-response.snapshot.json",
|
||
"docs/security/source-control-ref-truth-owner-response.snapshot.json",
|
||
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json",
|
||
"docs/security/security-mirror-status-rollup.snapshot.json",
|
||
"docs/security/source-control-primary-readiness-gate.snapshot.json",
|
||
"docs/security/security-approval-review-packet.snapshot.json",
|
||
"docs/security/security-followup-runtime-gate.snapshot.json"
|
||
],
|
||
"summary": {
|
||
"rollup_status": "waiting_owner_responses",
|
||
"response_packet_count": 4,
|
||
"validation_lane_count": 4,
|
||
"total_response_template_count": 24,
|
||
"total_received_response_count": 0,
|
||
"total_accepted_response_count": 0,
|
||
"total_rejected_response_count": 0,
|
||
"total_acceptance_check_count": 32,
|
||
"total_rejection_rule_count": 40,
|
||
"owner_response_evidence_routing_rule_count": 6,
|
||
"owner_response_validation_display_section_count": 8,
|
||
"owner_response_validation_state_transition_rule_count": 7,
|
||
"owner_response_validation_reviewer_checklist_count": 9,
|
||
"owner_response_validation_reviewer_outcome_lane_count": 7,
|
||
"owner_response_validation_reviewer_audit_event_template_count": 4,
|
||
"owner_response_validation_reviewer_audit_display_section_count": 5,
|
||
"owner_response_validation_reviewer_audit_collection_check_count": 6,
|
||
"owner_response_validation_reviewer_audit_redaction_example_count": 5,
|
||
"owner_response_validation_reviewer_audit_retention_rule_count": 5,
|
||
"owner_response_validation_reviewer_audit_retention_check_count": 6,
|
||
"quarantine_required": true,
|
||
"primary_ready_count": 0,
|
||
"runtime_execution_authorized": false,
|
||
"token_value_collection_allowed": false,
|
||
"secret_value_collection_allowed": false,
|
||
"write_token_allowed": false,
|
||
"repo_creation_authorized": false,
|
||
"visibility_change_authorized": false,
|
||
"gitea_repo_write_authorized": false,
|
||
"refs_sync_authorized": false,
|
||
"refs_delete_authorized": false,
|
||
"force_push_authorized": false,
|
||
"workflow_modification_authorized": false,
|
||
"runner_enablement_authorized": false,
|
||
"github_hosted_runner_enable_authorized": false,
|
||
"github_primary_switch_authorized": false,
|
||
"action_buttons_allowed": false,
|
||
"owner_response_validation_reviewer_audit_handoff_packet_count": 6,
|
||
"owner_response_validation_reviewer_audit_handoff_check_count": 6,
|
||
"owner_response_validation_parallel_session_sync_check_count": 6,
|
||
"owner_response_validation_parallel_session_conflict_lane_count": 6,
|
||
"owner_response_validation_parallel_session_recovery_check_count": 6,
|
||
"owner_response_validation_parallel_session_recovery_outcome_lane_count": 7
|
||
},
|
||
"validation_lanes": [
|
||
{
|
||
"lane_id": "s4_9_gitea_inventory_owner_attestation_response",
|
||
"source_contract": "gitea_inventory_owner_attestation_response_v1",
|
||
"response_packet": "docs/security/gitea-inventory-owner-attestation-response.snapshot.json",
|
||
"human_doc": "docs/security/GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.md",
|
||
"scope_summary": "5 個 Gitea coverage attestation items:public-only/local gap、org/user endpoint、110 adjacent scope、canonical owner、legacy/inaccessible disposition。",
|
||
"response_template_count": 5,
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"rejected_response_count": 0,
|
||
"required_before_ready": [
|
||
"5 個 S4.7 attestation items 皆有可驗收 owner response",
|
||
"response 只能引用脫敏 evidence refs",
|
||
"不得保存 token value、raw secret、DB dump、git object 或 repo write payload"
|
||
],
|
||
"allowed_outputs": [
|
||
"更新 read-only Gitea coverage matrix wording",
|
||
"更新 owner / canonical / legacy disposition 欄位",
|
||
"維持 gitea_repo_inventory_v1.status=partial 直到 S4.6 payload 驗收通過"
|
||
],
|
||
"forbidden_actions": [
|
||
"store_token_value",
|
||
"write_gitea_repo",
|
||
"sync_refs",
|
||
"switch_github_primary"
|
||
],
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"lane_id": "s4_10_github_target_owner_decision_response",
|
||
"source_contract": "github_target_owner_decision_response_v1",
|
||
"response_packet": "docs/security/github-target-owner-decision-response.snapshot.json",
|
||
"human_doc": "docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md",
|
||
"scope_summary": "9 個 approval-required GitHub targets 的 owner、visibility、canonical response。",
|
||
"response_template_count": 9,
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"rejected_response_count": 0,
|
||
"required_before_ready": [
|
||
"9 個 target response 都有 owner / visibility / canonical disposition",
|
||
"not_found_or_private 不得自動解讀為可建立 repo",
|
||
"response 不得夾帶 repo creation、visibility change 或 refs sync payload"
|
||
],
|
||
"allowed_outputs": [
|
||
"更新 read-only GitHub target decision table wording",
|
||
"更新 repo-by-repo approval package 的 owner / visibility / canonical 欄位",
|
||
"維持 primary_ready_count=0"
|
||
],
|
||
"forbidden_actions": [
|
||
"create_github_repo",
|
||
"change_repo_visibility",
|
||
"sync_refs",
|
||
"switch_github_primary"
|
||
],
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"lane_id": "s4_11_ref_truth_owner_response",
|
||
"source_contract": "source_control_ref_truth_owner_response_v1",
|
||
"response_packet": "docs/security/source-control-ref-truth-owner-response.snapshot.json",
|
||
"human_doc": "docs/security/SOURCE-CONTROL-REF-TRUTH-OWNER-RESPONSE.md",
|
||
"scope_summary": "S4.11 request packet、template status ledger、audit event templates、redaction examples、collection checks、intake preflight checks,加上 194 個 refs review items 的 main/dev truth、deprecated drift、release tag retention、GitHub-only refs disposition。",
|
||
"response_template_count": 5,
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"rejected_response_count": 0,
|
||
"required_before_ready": [
|
||
"main/dev truth 與 release tags 必須有 deploy / artifact / rollback owner",
|
||
"deprecated candidate 只能更新 disposition,不代表 delete approval",
|
||
"backfill candidate 只能更新 review wording,不代表 push approval"
|
||
],
|
||
"allowed_outputs": [
|
||
"更新 read-only ref truth classification disposition",
|
||
"更新 draft reconcile plan wording",
|
||
"維持 refs sync / delete / force push disabled"
|
||
],
|
||
"forbidden_actions": [
|
||
"fetch_refs",
|
||
"push_refs",
|
||
"delete_refs",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
],
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"lane_id": "s4_12_workflow_secret_name_owner_response",
|
||
"source_contract": "source_control_workflow_secret_name_owner_response_v1",
|
||
"response_packet": "docs/security/source-control-workflow-secret-name-owner-response.snapshot.json",
|
||
"human_doc": "docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md",
|
||
"scope_summary": "webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity 的 redacted owner response request / template status ledger / audit event templates / redaction examples / collection checks / intake preflight checks / response。",
|
||
"response_template_count": 5,
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"rejected_response_count": 0,
|
||
"required_before_ready": [
|
||
"每個 lane 只能保存允許欄位與脫敏 metadata",
|
||
"GitHub hosted runner 只能進 risk review,不得啟用或消耗 hosted minutes",
|
||
"secret name parity 只保存名稱、scope、owner 與 present/absent,不保存 value/hash/partial token",
|
||
"request packet 只提示 owner 要回覆什麼,不代表 request sent、response received、secret value collection、workflow modification 或 runner enablement",
|
||
"template status ledger 只逐項顯示 waiting_owner_response,不代表 request sent、response received 或 accepted",
|
||
"audit event templates 只定義 0 emitted 的脫敏 metadata,不代表 production ingestion 或 runtime authorization",
|
||
"redaction examples 只示範安全回覆形狀,不代表 owner response received、accepted 或 secret value collection",
|
||
"collection checks 只維持 request / received / accepted 分離,不代表 owner response received、accepted 或 workflow / secret 執行授權",
|
||
"intake preflight checks 只分類可審、補證、隔離或拒收,不代表 owner response accepted 或 workflow / secret 執行授權"
|
||
],
|
||
"allowed_outputs": [
|
||
"更新 read-only workflow / secret name inventory wording",
|
||
"更新 redacted export request disposition",
|
||
"維持 workflow / secret parity blocker 直到實際 redacted evidence 完成"
|
||
],
|
||
"forbidden_actions": [
|
||
"store_secret_value",
|
||
"modify_workflow",
|
||
"enable_runner",
|
||
"enable_github_hosted_runner",
|
||
"switch_github_primary"
|
||
],
|
||
"execution_authorized": false
|
||
}
|
||
],
|
||
"cross_packet_acceptance_checks": [
|
||
{
|
||
"check_id": "all_source_packets_schema_valid",
|
||
"title": "四個 source response packets 都必須 JSON / schema 結構有效",
|
||
"required": true,
|
||
"pass_condition": "source packet 可被解析,且 summary 欄位存在",
|
||
"failure_lane": "mirror_quarantine",
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"check_id": "template_counts_match",
|
||
"title": "response template count 必須與各 source packet summary 一致",
|
||
"required": true,
|
||
"pass_condition": "5 + 9 + 5 + 5 = 24",
|
||
"failure_lane": "mirror_quarantine",
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"check_id": "response_counts_explicit",
|
||
"title": "received / accepted / rejected count 必須明確列出",
|
||
"required": true,
|
||
"pass_condition": "所有 source packets 目前皆為 0 / 0 / 0",
|
||
"failure_lane": "request_more_evidence",
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"check_id": "accepted_response_does_not_unlock_runtime",
|
||
"title": "即使未來 response 被接受,也不得直接解鎖 runtime",
|
||
"required": true,
|
||
"pass_condition": "readiness effect 只允許更新 read-only wording 或 matrix 欄位",
|
||
"failure_lane": "block_candidate",
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"check_id": "rejection_rules_present",
|
||
"title": "四個 packets 都必須保留 rejection rules",
|
||
"required": true,
|
||
"pass_condition": "每包 10 個 rejection rules,總數 40",
|
||
"failure_lane": "mirror_quarantine",
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"check_id": "no_secret_or_token_value",
|
||
"title": "不得收集 token、secret、private key、cookie、session 或 partial credential",
|
||
"required": true,
|
||
"pass_condition": "所有收件與輸出欄位只允許脫敏 evidence refs 或名稱 metadata",
|
||
"failure_lane": "hard_reject",
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"check_id": "no_write_or_admin_action",
|
||
"title": "不得夾帶 write token、admin API、repo write、workflow 修改或 runner 啟用",
|
||
"required": true,
|
||
"pass_condition": "所有 write / admin / execution flags 皆為 false",
|
||
"failure_lane": "hard_reject",
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"check_id": "no_refs_or_primary_action",
|
||
"title": "不得把 owner response 當成 refs sync、delete、force push 或 primary approval",
|
||
"required": true,
|
||
"pass_condition": "refs_sync / refs_delete / force_push / github_primary_switch 皆為 false",
|
||
"failure_lane": "hard_reject",
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"check_id": "quarantine_uncertain_payload",
|
||
"title": "任何不確定是否含敏感值的 response 必須隔離",
|
||
"required": true,
|
||
"pass_condition": "quarantine_required=true 且 quarantine rules 已列出",
|
||
"failure_lane": "mirror_quarantine",
|
||
"execution_authorized": false
|
||
},
|
||
{
|
||
"check_id": "rollup_and_readiness_must_be_updated_together",
|
||
"title": "接受 response 後必須同步更新 rollup 與 readiness wording",
|
||
"required": true,
|
||
"pass_condition": "更新 source packet、validation rollup、security mirror rollup、primary readiness gate 與 LOGBOOK",
|
||
"failure_lane": "request_more_evidence",
|
||
"execution_authorized": false
|
||
}
|
||
],
|
||
"quarantine_rules": [
|
||
"response 夾帶 token、secret、cookie、session、private key、deploy key material、runner token 或 partial credential 時 hard reject。",
|
||
"response 夾帶完整 webhook URL、query token、header、body、未脫敏 screenshot 或 private URL credential 時 hard reject。",
|
||
"response 要求 write API、repo 建立、visibility change、workflow 修改、runner 啟用、secret rotate、refs sync、delete refs、force push 或 GitHub primary switch 時 hard reject。",
|
||
"response 缺 lane、repo、provider、owner、decision、decision_reason 或 evidence_refs 時 request_more_evidence。",
|
||
"response 的敏感性不確定時先 quarantine,不猜測、不修補、不自動接受。"
|
||
],
|
||
"owner_response_evidence_routing_rules": [
|
||
{
|
||
"rule_id": "evidence-routing-known-lane",
|
||
"display_order": 1,
|
||
"title": "已知 owner response lane 才能進入對應 source packet preflight",
|
||
"match_condition": "evidence pointer 明確標示 S4.9 / S4.10 / S4.11 / S4.12 其中一個 lane,且 template_id 屬於該 lane 的既有 response templates。",
|
||
"safe_route": "route_to_source_packet_intake_preflight",
|
||
"blocked_route": "request_more_evidence_if_lane_or_template_unknown",
|
||
"awooop_display_mode": "display_evidence_route_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "evidence-routing-required-fields",
|
||
"display_order": 2,
|
||
"title": "缺少 owner / decision / evidence refs 時只要求補證",
|
||
"match_condition": "lane 已知,但 owner、decision、decision_reason、repo/provider metadata 或 evidence_refs 缺漏。",
|
||
"safe_route": "request_more_evidence",
|
||
"blocked_route": "do_not_increment_received_or_accepted_count",
|
||
"awooop_display_mode": "display_evidence_route_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "evidence-routing-sensitive-payload",
|
||
"display_order": 3,
|
||
"title": "疑似敏感 payload 一律先送 mirror quarantine",
|
||
"match_condition": "evidence pointer、摘要或附件暗示 token、secret、private key、cookie、session、runner token、webhook secret、deploy key material、authorization header、private URL credential 或未脫敏截圖。",
|
||
"safe_route": "mirror_quarantine",
|
||
"blocked_route": "do_not_store_raw_payload_or_render_sensitive_material",
|
||
"awooop_display_mode": "display_evidence_route_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "evidence-routing-execution-request",
|
||
"display_order": 4,
|
||
"title": "夾帶執行要求時 hard reject",
|
||
"match_condition": "response 要求建立 repo、修改 visibility、write token、sync/delete/force push refs、修改 workflow/webhook/runner/deploy key/branch protection/repository secret、啟用 GitHub hosted runner、Kali scan 或 GitHub primary switch。",
|
||
"safe_route": "hard_reject_execution_request",
|
||
"blocked_route": "do_not_create_runtime_gate_or_action_button",
|
||
"awooop_display_mode": "display_evidence_route_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "evidence-routing-cross-packet-conflict",
|
||
"display_order": 5,
|
||
"title": "跨包互相矛盾時只進 owner review",
|
||
"match_condition": "S4.9 canonical owner、S4.10 GitHub target、S4.11 refs truth 或 S4.12 workflow / secret name parity 之間出現 owner、repo、visibility、truth source 或 secret 名稱矛盾。",
|
||
"safe_route": "cross_packet_owner_review",
|
||
"blocked_route": "do_not_auto_merge_or_override_source_packet",
|
||
"awooop_display_mode": "display_evidence_route_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "evidence-routing-accepted-metadata",
|
||
"display_order": 6,
|
||
"title": "通過驗收後只允許更新只讀 wording",
|
||
"match_condition": "source packet preflight、acceptance checks、cross-packet checks 與 quarantine rules 全部通過,且 evidence refs 完全脫敏。",
|
||
"safe_route": "read_only_readiness_wording_update",
|
||
"blocked_route": "do_not_unlock_repo_refs_workflow_secret_runner_or_primary_actions",
|
||
"awooop_display_mode": "display_evidence_route_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_display_sections": [
|
||
{
|
||
"section_id": "display-validation-summary",
|
||
"display_order": 1,
|
||
"title": "Owner response validation 總覽",
|
||
"content_source": "summary:response_packet_count、validation_lane_count、total_response_template_count、received / accepted / rejected count、runtime flags。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_validation_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-missing-response-lanes",
|
||
"display_order": 2,
|
||
"title": "Missing owner response lanes",
|
||
"content_source": "missing_response_lanes:S4.9 / S4.10 / S4.11 / S4.12 四條缺口、next_owner_action 與 still_forbidden。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_validation_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-owner-response-collection-order",
|
||
"display_order": 3,
|
||
"title": "Owner response collection order",
|
||
"content_source": "owner_response_collection_order:四步收件順序、required_packet、minimum_response 與 blocked_until_received。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_validation_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-next-collection-candidate",
|
||
"display_order": 4,
|
||
"title": "Next collection candidate",
|
||
"content_source": "next_collection_candidate:目前只顯示 S4.9 Gitea owner attestation response,received / accepted 皆為 0。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_validation_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-cross-packet-acceptance-checks",
|
||
"display_order": 5,
|
||
"title": "Cross-packet acceptance checks",
|
||
"content_source": "cross_packet_acceptance_checks:10 個跨包驗收檢查,只作 read-only validation,不授權 runtime。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_validation_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-evidence-routing-rules",
|
||
"display_order": 6,
|
||
"title": "Evidence routing rules",
|
||
"content_source": "owner_response_evidence_routing_rules:6 條 evidence pointer 只讀路由,補證、隔離、拒收、跨包 review 或只讀更新。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_validation_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-quarantine-and-forbidden-actions",
|
||
"display_order": 7,
|
||
"title": "Quarantine 與禁止事項",
|
||
"content_source": "quarantine_rules、forbidden_actions、summary false flags:顯示敏感 payload、write/admin/action button 與 primary 禁令。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_validation_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-latest-local-validation",
|
||
"display_order": 8,
|
||
"title": "最新本機只讀驗證",
|
||
"content_source": "latest_local_validation:repo_snapshot_only、SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK、received / accepted count 仍為 0。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_validation_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_state_transition_rules": [
|
||
{
|
||
"rule_id": "transition-waiting-to-received-pending-validation",
|
||
"display_order": 1,
|
||
"from_state": "waiting_owner_response",
|
||
"trigger": "收到已知 S4.9 / S4.10 / S4.11 / S4.12 lane 的 owner response evidence pointer。",
|
||
"required_checks": [
|
||
"lane 與 template_id 已知",
|
||
"owner、decision、decision_reason、repo/provider metadata 與 evidence_refs 完整",
|
||
"evidence refs 已脫敏且沒有 raw secret/token/private URL credential"
|
||
],
|
||
"next_state": "received_pending_validation",
|
||
"allowed_update": "只允許 source packet 與 rollup 顯示 received_pending_validation 候選;不得增加 accepted count。",
|
||
"blocked_updates": [
|
||
"mark_accepted",
|
||
"create_runtime_gate",
|
||
"add_action_button",
|
||
"repo_or_refs_or_workflow_secret_change"
|
||
],
|
||
"awooop_display_mode": "display_state_transition_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "transition-missing-required-fields-to-request-more-evidence",
|
||
"display_order": 2,
|
||
"from_state": "waiting_owner_response",
|
||
"trigger": "response 缺少必填 owner、decision、reason、repo/provider metadata 或 evidence_refs。",
|
||
"required_checks": [
|
||
"已能判斷 lane 或 template 缺口",
|
||
"沒有敏感 payload",
|
||
"沒有執行要求"
|
||
],
|
||
"next_state": "request_more_evidence",
|
||
"allowed_update": "只允許顯示補證缺口與下一步 owner action。",
|
||
"blocked_updates": [
|
||
"increment_received_count",
|
||
"increment_accepted_count",
|
||
"store_raw_payload",
|
||
"unlock_primary_readiness"
|
||
],
|
||
"awooop_display_mode": "display_state_transition_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "transition-sensitive-payload-to-mirror-quarantine",
|
||
"display_order": 3,
|
||
"from_state": "waiting_owner_response_or_received_pending_validation",
|
||
"trigger": "response 或 evidence pointer 疑似含 token、secret、private key、cookie、session、runner token、webhook secret、deploy key material、authorization header、private URL credential 或未脫敏截圖。",
|
||
"required_checks": [
|
||
"敏感性不確定即視為需要隔離",
|
||
"不得渲染或保存 raw payload",
|
||
"不得把 masked/partial credential 當成可保存 evidence"
|
||
],
|
||
"next_state": "mirror_quarantine",
|
||
"allowed_update": "只允許顯示 quarantine pointer 與 redaction request。",
|
||
"blocked_updates": [
|
||
"store_sensitive_payload",
|
||
"render_sensitive_material",
|
||
"increment_received_count",
|
||
"increment_accepted_count"
|
||
],
|
||
"awooop_display_mode": "display_state_transition_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "transition-execution-request-to-hard-rejected",
|
||
"display_order": 4,
|
||
"from_state": "waiting_owner_response_or_received_pending_validation",
|
||
"trigger": "response 夾帶 repo creation、visibility change、refs sync/delete/force push、workflow/webhook/runner/deploy key/branch protection/repository secret、Kali scan、GitHub hosted runner 或 GitHub primary switch 要求。",
|
||
"required_checks": [
|
||
"偵測到任何 write/admin/runtime intent",
|
||
"blocked route 已指向 do_not_create_runtime_gate_or_action_button",
|
||
"仍保留 redacted rejection evidence"
|
||
],
|
||
"next_state": "hard_rejected_execution_request",
|
||
"allowed_update": "只允許顯示拒收原因與仍禁止事項。",
|
||
"blocked_updates": [
|
||
"create_runtime_gate",
|
||
"enqueue_execution",
|
||
"add_action_button",
|
||
"change_repo_refs_workflow_secret_runner_or_primary"
|
||
],
|
||
"awooop_display_mode": "display_state_transition_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "transition-cross-packet-conflict-to-owner-review",
|
||
"display_order": 5,
|
||
"from_state": "received_pending_validation",
|
||
"trigger": "S4.9 owner/canonical、S4.10 target/visibility、S4.11 refs truth 或 S4.12 workflow/secret name parity 互相矛盾。",
|
||
"required_checks": [
|
||
"矛盾欄位可指向來源 packet",
|
||
"不得自動覆蓋 source packet",
|
||
"不得把任一 packet 視為較高權威"
|
||
],
|
||
"next_state": "cross_packet_owner_review",
|
||
"allowed_update": "只允許顯示 reviewer 需要確認的欄位與 evidence refs。",
|
||
"blocked_updates": [
|
||
"auto_merge_response",
|
||
"override_source_packet",
|
||
"mark_primary_ready",
|
||
"unlock_refs_or_workflow_actions"
|
||
],
|
||
"awooop_display_mode": "display_state_transition_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "transition-validation-pass-to-read-only-update",
|
||
"display_order": 6,
|
||
"from_state": "received_pending_validation",
|
||
"trigger": "source packet preflight、acceptance checks、cross-packet checks 與 quarantine rules 全部通過。",
|
||
"required_checks": [
|
||
"所有 evidence refs 完全脫敏",
|
||
"source packet、validation rollup、security mirror rollup、primary readiness wording 與 LOGBOOK 可同步更新",
|
||
"received / accepted count 的變更仍只限文件與 snapshot"
|
||
],
|
||
"next_state": "accepted_read_only_update",
|
||
"allowed_update": "只允許更新 read-only evidence、matrix、decision table、reconcile wording 或 readiness wording。",
|
||
"blocked_updates": [
|
||
"create_repo",
|
||
"sync_or_delete_refs",
|
||
"modify_workflow_or_secret",
|
||
"enable_runner_or_primary"
|
||
],
|
||
"awooop_display_mode": "display_state_transition_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "transition-post-update-stays-waiting-runtime-gate",
|
||
"display_order": 7,
|
||
"from_state": "accepted_read_only_update",
|
||
"trigger": "read-only wording 已更新,但仍未取得 runtime gate、owner approval、rollback ADR、redacted payload ingestion 或 primary readiness。",
|
||
"required_checks": [
|
||
"active_runtime_gate_count 仍為 0",
|
||
"github_primary_ready_count 仍為 0",
|
||
"action_buttons_allowed 仍為 false"
|
||
],
|
||
"next_state": "waiting_followup_runtime_gate",
|
||
"allowed_update": "只允許提示後續需要人工批准與獨立 runtime gate。",
|
||
"blocked_updates": [
|
||
"treat_read_only_update_as_runtime_approval",
|
||
"auto_execute_scan_or_migration",
|
||
"switch_github_primary",
|
||
"consume_github_hosted_runner_minutes"
|
||
],
|
||
"awooop_display_mode": "display_state_transition_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_checklist": [
|
||
{
|
||
"checklist_id": "checklist-confirm-lane-and-template",
|
||
"display_order": 1,
|
||
"title": "確認 owner response lane 與 template 已知",
|
||
"reviewer_action": "確認 evidence pointer 只屬於 S4.9 / S4.10 / S4.11 / S4.12 的既有 lane 與 template_id。",
|
||
"required_evidence": [
|
||
"lane_id",
|
||
"template_id",
|
||
"source_packet_path"
|
||
],
|
||
"pass_state": "received_pending_validation",
|
||
"fail_route": "request_more_evidence",
|
||
"awooop_display_mode": "display_reviewer_checklist_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"checklist_id": "checklist-confirm-required-owner-fields",
|
||
"display_order": 2,
|
||
"title": "確認 owner / decision / reason / metadata 欄位完整",
|
||
"reviewer_action": "確認 owner、decision、decision_reason、repo/provider metadata 與 evidence_refs 都存在且可追溯。",
|
||
"required_evidence": [
|
||
"owner",
|
||
"decision",
|
||
"decision_reason",
|
||
"repo_or_provider_metadata",
|
||
"evidence_refs"
|
||
],
|
||
"pass_state": "received_pending_validation",
|
||
"fail_route": "request_more_evidence",
|
||
"awooop_display_mode": "display_reviewer_checklist_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"checklist_id": "checklist-confirm-redacted-evidence-refs",
|
||
"display_order": 3,
|
||
"title": "確認 evidence refs 已脫敏且不含 raw payload",
|
||
"reviewer_action": "只接受文件路徑、ticket id、hash 或摘要;不得貼入 token、secret、private URL credential 或未脫敏截圖。",
|
||
"required_evidence": [
|
||
"redacted_evidence_refs",
|
||
"no_raw_payload_statement"
|
||
],
|
||
"pass_state": "received_pending_validation",
|
||
"fail_route": "mirror_quarantine",
|
||
"awooop_display_mode": "display_reviewer_checklist_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"checklist_id": "checklist-confirm-source-packet-preflight",
|
||
"display_order": 4,
|
||
"title": "確認 source packet preflight 通過",
|
||
"reviewer_action": "依對應 S4.9 / S4.10 / S4.11 / S4.12 intake preflight checks 判定可審、補證、隔離或拒收。",
|
||
"required_evidence": [
|
||
"source_packet_preflight_result",
|
||
"preflight_check_ids"
|
||
],
|
||
"pass_state": "received_pending_validation",
|
||
"fail_route": "source_packet_preflight_failure_route",
|
||
"awooop_display_mode": "display_reviewer_checklist_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"checklist_id": "checklist-confirm-cross-packet-consistency",
|
||
"display_order": 5,
|
||
"title": "確認 S4.9-S4.12 跨包一致性",
|
||
"reviewer_action": "確認 owner、repo、visibility、truth source、workflow / secret name parity 沒有互相矛盾。",
|
||
"required_evidence": [
|
||
"cross_packet_acceptance_check_ids",
|
||
"consistency_summary"
|
||
],
|
||
"pass_state": "received_pending_validation",
|
||
"fail_route": "cross_packet_owner_review",
|
||
"awooop_display_mode": "display_reviewer_checklist_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"checklist_id": "checklist-confirm-no-sensitive-payload",
|
||
"display_order": 6,
|
||
"title": "確認沒有敏感 payload",
|
||
"reviewer_action": "確認 response 不含 token、secret、private key、cookie、session、runner token、webhook secret、deploy key material、authorization header、private URL credential 或 partial credential。",
|
||
"required_evidence": [
|
||
"sensitive_payload_scan_result",
|
||
"redaction_summary"
|
||
],
|
||
"pass_state": "received_pending_validation",
|
||
"fail_route": "mirror_quarantine",
|
||
"awooop_display_mode": "display_reviewer_checklist_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"checklist_id": "checklist-confirm-no-execution-intent",
|
||
"display_order": 7,
|
||
"title": "確認沒有執行意圖",
|
||
"reviewer_action": "確認 response 沒有要求 repo creation、visibility change、refs sync/delete/force push、workflow/webhook/runner/deploy key/branch protection/repository secret 變更、Kali scan、GitHub hosted runner 或 GitHub primary switch。",
|
||
"required_evidence": [
|
||
"execution_intent_review_result",
|
||
"blocked_action_summary"
|
||
],
|
||
"pass_state": "received_pending_validation",
|
||
"fail_route": "hard_rejected_execution_request",
|
||
"awooop_display_mode": "display_reviewer_checklist_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"checklist_id": "checklist-confirm-read-only-update-scope",
|
||
"display_order": 8,
|
||
"title": "確認通過後只更新 read-only wording",
|
||
"reviewer_action": "確認即使 response 通過,也只更新 evidence、matrix、decision table、reconcile wording 或 readiness wording。",
|
||
"required_evidence": [
|
||
"read_only_update_targets",
|
||
"no_runtime_unlock_statement"
|
||
],
|
||
"pass_state": "accepted_read_only_update",
|
||
"fail_route": "block_candidate",
|
||
"awooop_display_mode": "display_reviewer_checklist_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"checklist_id": "checklist-confirm-followup-runtime-gate-still-required",
|
||
"display_order": 9,
|
||
"title": "確認後續 runtime gate 仍需獨立批准",
|
||
"reviewer_action": "確認 active_runtime_gate_count 仍為 0、github_primary_ready_count 仍為 0、action_buttons_allowed 仍為 false。",
|
||
"required_evidence": [
|
||
"active_runtime_gate_count",
|
||
"github_primary_ready_count",
|
||
"action_buttons_allowed"
|
||
],
|
||
"pass_state": "waiting_followup_runtime_gate",
|
||
"fail_route": "block_candidate",
|
||
"awooop_display_mode": "display_reviewer_checklist_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_outcome_lanes": [
|
||
{
|
||
"outcome_lane_id": "outcome-keep-waiting-owner-response",
|
||
"display_order": 1,
|
||
"title": "繼續等待 owner response",
|
||
"when_reviewer_finds": "尚未收到 owner response evidence pointer,或目前只看到 request packet / template status / audit template / redaction example / display section。",
|
||
"safe_result": "keep_waiting_owner_response",
|
||
"allowed_update": "只顯示 waiting 狀態、缺口摘要與 next collection candidate。",
|
||
"blocked_updates": [
|
||
"increment_received_count",
|
||
"increment_accepted_count",
|
||
"mark_primary_ready",
|
||
"create_runtime_gate"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"outcome_lane_id": "outcome-request-more-evidence",
|
||
"display_order": 2,
|
||
"title": "要求補證",
|
||
"when_reviewer_finds": "lane / template 已知但缺 owner、decision、reason、repo/provider metadata、evidence refs 或 source packet preflight 結果。",
|
||
"safe_result": "request_more_evidence",
|
||
"allowed_update": "只顯示缺哪些欄位與下一步 owner action。",
|
||
"blocked_updates": [
|
||
"increment_accepted_count",
|
||
"unlock_primary_readiness",
|
||
"enqueue_execution",
|
||
"store_raw_payload"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"outcome_lane_id": "outcome-mirror-quarantine-sensitive-payload",
|
||
"display_order": 3,
|
||
"title": "敏感 payload 進 mirror quarantine",
|
||
"when_reviewer_finds": "evidence pointer 或 response 疑似含 token、secret、private key、cookie、session、runner token、webhook secret、deploy key material、authorization header、private URL credential、partial credential 或未脫敏截圖。",
|
||
"safe_result": "mirror_quarantine",
|
||
"allowed_update": "只顯示 quarantine pointer、redaction request 與不得保存 raw payload 的提示。",
|
||
"blocked_updates": [
|
||
"store_sensitive_payload",
|
||
"render_sensitive_material",
|
||
"increment_received_count",
|
||
"increment_accepted_count"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"outcome_lane_id": "outcome-hard-reject-execution-request",
|
||
"display_order": 4,
|
||
"title": "拒收執行要求",
|
||
"when_reviewer_finds": "response 夾帶 repo creation、visibility change、refs sync/delete/force push、workflow/webhook/runner/deploy key/branch protection/repository secret、Kali scan、GitHub hosted runner 或 GitHub primary switch 要求。",
|
||
"safe_result": "hard_rejected_execution_request",
|
||
"allowed_update": "只顯示拒收原因、blocked action summary 與仍禁止事項。",
|
||
"blocked_updates": [
|
||
"create_runtime_gate",
|
||
"enqueue_execution",
|
||
"add_action_button",
|
||
"change_repo_refs_workflow_secret_runner_or_primary"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"outcome_lane_id": "outcome-cross-packet-owner-review",
|
||
"display_order": 5,
|
||
"title": "跨包 owner review",
|
||
"when_reviewer_finds": "S4.9 / S4.10 / S4.11 / S4.12 之間的 owner、repo、visibility、truth source 或 workflow / secret name parity 互相矛盾。",
|
||
"safe_result": "cross_packet_owner_review",
|
||
"allowed_update": "只顯示矛盾欄位、來源 packet 與 reviewer 需要確認的 evidence refs。",
|
||
"blocked_updates": [
|
||
"auto_merge_response",
|
||
"override_source_packet",
|
||
"mark_primary_ready",
|
||
"unlock_refs_or_workflow_actions"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"outcome_lane_id": "outcome-read-only-update-candidate",
|
||
"display_order": 6,
|
||
"title": "只讀更新候選",
|
||
"when_reviewer_finds": "source packet preflight、acceptance checks、cross-packet checks、reviewer checklist 與 quarantine rules 全部通過,且 evidence refs 完全脫敏。",
|
||
"safe_result": "accepted_read_only_update_candidate",
|
||
"allowed_update": "只允許更新 evidence、matrix、decision table、reconcile wording、readiness wording 與 LOGBOOK。",
|
||
"blocked_updates": [
|
||
"create_repo",
|
||
"sync_or_delete_refs",
|
||
"modify_workflow_or_secret",
|
||
"enable_runner_or_primary"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"outcome_lane_id": "outcome-waiting-followup-runtime-gate",
|
||
"display_order": 7,
|
||
"title": "仍等待後續 runtime gate",
|
||
"when_reviewer_finds": "只讀 wording 已完成或可完成,但 active_runtime_gate_count=0、github_primary_ready_count=0、action_buttons_allowed=false。",
|
||
"safe_result": "waiting_followup_runtime_gate",
|
||
"allowed_update": "只顯示後續仍需人工批准、rollback / disable plan 與獨立 runtime gate。",
|
||
"blocked_updates": [
|
||
"treat_read_only_update_as_runtime_approval",
|
||
"auto_execute_scan_or_migration",
|
||
"switch_github_primary",
|
||
"consume_github_hosted_runner_minutes"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_audit_event_templates": [
|
||
{
|
||
"event_template_id": "audit-reviewer-outcome-review-opened",
|
||
"display_order": 1,
|
||
"title": "Reviewer 開始檢查 owner response outcome",
|
||
"event_status": "template_only_not_emitted",
|
||
"event_trigger": "Reviewer 打開 S4.13 owner response validation rollup 並準備依 checklist / outcome lanes 做只讀分類。",
|
||
"allowed_metadata": [
|
||
"reviewer_id_or_role",
|
||
"lane_id",
|
||
"template_id",
|
||
"source_packet_path",
|
||
"review_started_at_taipei",
|
||
"redacted_evidence_ref_count"
|
||
],
|
||
"forbidden_payloads": [
|
||
"raw_owner_response_body",
|
||
"token_or_secret_value",
|
||
"private_key_or_deploy_key_material",
|
||
"cookie_or_session",
|
||
"authorization_header",
|
||
"private_url_credential",
|
||
"unredacted_screenshot"
|
||
],
|
||
"emitted_event_count": 0,
|
||
"stored_raw_payload_allowed": false,
|
||
"awooop_display_mode": "display_reviewer_audit_template_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"event_template_id": "audit-reviewer-outcome-classified",
|
||
"display_order": 2,
|
||
"title": "Reviewer outcome lane 已分類",
|
||
"event_status": "template_only_not_emitted",
|
||
"event_trigger": "Reviewer 依 7 條 outcome lanes 將 evidence pointer 分類為等待、補證、隔離、拒收、跨包 review、只讀候選或等待 runtime gate。",
|
||
"allowed_metadata": [
|
||
"outcome_lane_id",
|
||
"classification_reason",
|
||
"checklist_pass_count",
|
||
"checklist_fail_count",
|
||
"redacted_evidence_refs",
|
||
"reviewed_at_taipei"
|
||
],
|
||
"forbidden_payloads": [
|
||
"raw_owner_response_body",
|
||
"token_or_secret_value",
|
||
"secret_hash_or_masked_token",
|
||
"partial_credential",
|
||
"runner_token",
|
||
"webhook_secret",
|
||
"deploy_key_value",
|
||
"private_url_credential"
|
||
],
|
||
"emitted_event_count": 0,
|
||
"stored_raw_payload_allowed": false,
|
||
"awooop_display_mode": "display_reviewer_audit_template_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"event_template_id": "audit-reviewer-quarantine-or-reject-recorded",
|
||
"display_order": 3,
|
||
"title": "隔離或拒收原因已留痕模板",
|
||
"event_status": "template_only_not_emitted",
|
||
"event_trigger": "Reviewer 將 response 分類為 mirror quarantine 或 hard rejected execution request。",
|
||
"allowed_metadata": [
|
||
"outcome_lane_id",
|
||
"blocked_reason_code",
|
||
"redaction_required",
|
||
"quarantine_pointer",
|
||
"blocked_action_summary",
|
||
"reviewed_at_taipei"
|
||
],
|
||
"forbidden_payloads": [
|
||
"sensitive_payload",
|
||
"raw_request_body",
|
||
"raw_response_body",
|
||
"credential_value",
|
||
"private_key",
|
||
"authorization_header",
|
||
"cookie_or_session",
|
||
"execution_payload"
|
||
],
|
||
"emitted_event_count": 0,
|
||
"stored_raw_payload_allowed": false,
|
||
"awooop_display_mode": "display_reviewer_audit_template_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"event_template_id": "audit-reviewer-readonly-update-noted",
|
||
"display_order": 4,
|
||
"title": "只讀更新候選已記錄模板",
|
||
"event_status": "template_only_not_emitted",
|
||
"event_trigger": "Reviewer 將 response 分類為 read-only update candidate 或 waiting follow-up runtime gate。",
|
||
"allowed_metadata": [
|
||
"outcome_lane_id",
|
||
"read_only_update_targets",
|
||
"followup_runtime_gate_required",
|
||
"active_runtime_gate_count",
|
||
"github_primary_ready_count",
|
||
"action_buttons_allowed"
|
||
],
|
||
"forbidden_payloads": [
|
||
"runtime_approval",
|
||
"execution_command",
|
||
"repo_write_token",
|
||
"refs_update_payload",
|
||
"workflow_secret_value",
|
||
"runner_registration_token",
|
||
"github_primary_switch_payload"
|
||
],
|
||
"emitted_event_count": 0,
|
||
"stored_raw_payload_allowed": false,
|
||
"awooop_display_mode": "display_reviewer_audit_template_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_audit_display_sections": [
|
||
{
|
||
"section_id": "display-reviewer-audit-template-summary",
|
||
"display_order": 1,
|
||
"title": "Reviewer audit template 總覽",
|
||
"content_source": "顯示 4 個 reviewer audit event templates、template_only_not_emitted、emitted_event_count=0 與 not approval 邊界。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_reviewer_audit_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-reviewer-audit-metadata-fields",
|
||
"display_order": 2,
|
||
"title": "允許顯示的脫敏 metadata 欄位",
|
||
"content_source": "只顯示 reviewer role、lane、template、source packet、classification reason、checklist pass/fail count、redacted evidence refs、read-only targets 與 gate count 等 metadata 名稱;不得顯示 raw owner response。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_reviewer_audit_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-reviewer-audit-forbidden-payloads",
|
||
"display_order": 3,
|
||
"title": "禁止 payload 顯示與保存",
|
||
"content_source": "顯示 forbidden_payloads 清單,明確擋住 token、secret、private key、deploy key material、cookie、session、authorization header、private URL credential、partial credential、runner token、webhook secret、raw request / response body、未脫敏截圖與 execution payload。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_reviewer_audit_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-reviewer-audit-emission-status",
|
||
"display_order": 4,
|
||
"title": "Reviewer audit emitted 狀態",
|
||
"content_source": "顯示全部 reviewer audit templates 目前 emitted_event_count=0、stored_raw_payload_allowed=false,代表尚未啟用 production ingestion。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_reviewer_audit_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"section_id": "display-reviewer-audit-non-authorization-boundary",
|
||
"display_order": 5,
|
||
"title": "非授權邊界",
|
||
"content_source": "顯示 reviewer audit display sections 只固定 UI 呈現,不代表 owner response received、accepted、approval、runtime gate、execution queue、action button、repo / refs / workflow / secret / runner 變更、Kali scan 或 GitHub primary switch。",
|
||
"section_status": "display_contract_only",
|
||
"awooop_display_mode": "display_reviewer_audit_section_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_audit_collection_checks": [
|
||
{
|
||
"check_id": "check-reviewer-audit-template-visible",
|
||
"display_order": 1,
|
||
"title": "Reviewer audit templates 必須先可見",
|
||
"check_requirement": "AwoooP 只能在顯示 4 個 reviewer audit event templates 與 5 個 reviewer audit display sections 後,才顯示 reviewer audit collection check 狀態。",
|
||
"safe_result": "display_collection_check_waiting_not_ingested",
|
||
"blocked_interpretations": [
|
||
"treat_template_visible_as_event_emitted",
|
||
"treat_display_section_as_audit_ingestion",
|
||
"skip_template_boundary_before_collection_check"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_collection_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-metadata-only",
|
||
"display_order": 2,
|
||
"title": "Reviewer audit 僅允許 metadata",
|
||
"check_requirement": "collection check 只能確認 allowed_metadata 欄位名稱、redacted evidence refs 與 count 類數值,不得要求或保存 raw owner response。",
|
||
"safe_result": "metadata_only_check_pass_or_waiting",
|
||
"blocked_interpretations": [
|
||
"request_raw_owner_response",
|
||
"store_unredacted_evidence",
|
||
"accept_sensitive_value_as_metadata"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_collection_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-forbidden-payloads-blocked",
|
||
"display_order": 3,
|
||
"title": "Forbidden payload 必須阻擋",
|
||
"check_requirement": "任何 token、secret、private key、deploy key material、cookie、session、authorization header、private URL credential、partial credential、runner token、webhook secret、raw body、未脫敏截圖或 execution payload 都只能進 quarantine / reject 顯示。",
|
||
"safe_result": "forbidden_payloads_blocked_or_quarantined",
|
||
"blocked_interpretations": [
|
||
"store_sensitive_payload_for_audit",
|
||
"mask_then_accept_secret_value",
|
||
"turn_execution_payload_into_action"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_collection_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-emitted-remains-zero",
|
||
"display_order": 4,
|
||
"title": "Reviewer audit emitted 必須仍為 0",
|
||
"check_requirement": "在 production ingestion 未另行批准前,所有 reviewer audit event templates 的 emitted_event_count 必須維持 0,stored_raw_payload_allowed 必須維持 false。",
|
||
"safe_result": "template_only_not_emitted",
|
||
"blocked_interpretations": [
|
||
"treat_zero_emitted_template_as_production_ingestion",
|
||
"increment_emitted_count_from_display",
|
||
"store_raw_payload_after_collection_check"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_collection_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-no-runtime-side-effect",
|
||
"display_order": 5,
|
||
"title": "Reviewer audit 檢查不得有 runtime side effect",
|
||
"check_requirement": "collection checks 只顯示 pass / waiting / blocked 的只讀狀態,不得建立 runtime gate、execution queue、action button、scan request、repo action 或 workflow / secret change。",
|
||
"safe_result": "read_only_check_no_runtime_side_effect",
|
||
"blocked_interpretations": [
|
||
"create_runtime_gate",
|
||
"enqueue_execution",
|
||
"add_action_button",
|
||
"start_kali_scan",
|
||
"modify_repo_or_workflow"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_collection_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-owner-response-counts-unchanged",
|
||
"display_order": 6,
|
||
"title": "Owner response counters 不得因 audit check 增加",
|
||
"check_requirement": "reviewer audit collection checks 通過也不能增加 received_response_count、accepted_response_count、reviewer_audit_events_emitted、primary_ready_count 或 active_runtime_gate_count。",
|
||
"safe_result": "counters_unchanged_waiting_owner_response",
|
||
"blocked_interpretations": [
|
||
"treat_collection_check_pass_as_owner_response_received",
|
||
"treat_collection_check_pass_as_owner_response_accepted",
|
||
"treat_collection_check_pass_as_primary_ready",
|
||
"treat_collection_check_pass_as_runtime_gate"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_collection_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_audit_redaction_examples": [
|
||
{
|
||
"example_id": "redaction-reviewer-role-lane-template-metadata",
|
||
"display_order": 1,
|
||
"title": "Reviewer / lane / template metadata 脫敏範例",
|
||
"unsafe_input_shape": "Reviewer 開始檢查時可能附帶原始 owner response 文字、內部截圖、私有 URL 或未脫敏 evidence 內容。",
|
||
"safe_metadata_shape": "只顯示 reviewer_role、lane_id、template_id、source_packet_path、review_started_at_taipei 與 redacted_evidence_ref_count。",
|
||
"blocked_payloads": [
|
||
"raw_owner_response_body",
|
||
"unredacted_screenshot",
|
||
"private_url_credential",
|
||
"authorization_header",
|
||
"cookie_or_session"
|
||
],
|
||
"redaction_status": "example_only_not_response",
|
||
"awooop_display_mode": "display_reviewer_audit_redaction_example_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"example_id": "redaction-classification-reason-summary",
|
||
"display_order": 2,
|
||
"title": "Outcome classification reason 脫敏範例",
|
||
"unsafe_input_shape": "Reviewer 分類理由可能引用 token 片段、secret hash、partial credential、runner token 或 webhook secret。",
|
||
"safe_metadata_shape": "只顯示 outcome_lane_id、classification_reason_summary、checklist_pass_count、checklist_fail_count、redacted_evidence_ref_ids 與 reviewed_at_taipei。",
|
||
"blocked_payloads": [
|
||
"token_or_secret_value",
|
||
"secret_hash_or_masked_token",
|
||
"partial_credential",
|
||
"runner_token",
|
||
"webhook_secret"
|
||
],
|
||
"redaction_status": "example_only_not_response",
|
||
"awooop_display_mode": "display_reviewer_audit_redaction_example_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"example_id": "redaction-quarantine-pointer",
|
||
"display_order": 3,
|
||
"title": "Quarantine pointer 脫敏範例",
|
||
"unsafe_input_shape": "隔離或拒收原因可能包含 raw request body、raw response body、credential value、private key 或 execution payload。",
|
||
"safe_metadata_shape": "只顯示 outcome_lane_id、blocked_reason_code、redaction_required=true、quarantine_pointer_id、blocked_action_summary 與 reviewed_at_taipei。",
|
||
"blocked_payloads": [
|
||
"raw_request_body",
|
||
"raw_response_body",
|
||
"credential_value",
|
||
"private_key",
|
||
"execution_payload"
|
||
],
|
||
"redaction_status": "example_only_not_response",
|
||
"awooop_display_mode": "display_reviewer_audit_redaction_example_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"example_id": "redaction-readonly-update-targets",
|
||
"display_order": 4,
|
||
"title": "Read-only update targets 脫敏範例",
|
||
"unsafe_input_shape": "只讀更新候選可能被誤寫成 execution command、refs update payload、workflow secret value 或 GitHub primary switch payload。",
|
||
"safe_metadata_shape": "只顯示 outcome_lane_id、read_only_update_target_ids、followup_runtime_gate_required、active_runtime_gate_count、github_primary_ready_count 與 action_buttons_allowed=false。",
|
||
"blocked_payloads": [
|
||
"execution_command",
|
||
"repo_write_token",
|
||
"refs_update_payload",
|
||
"workflow_secret_value",
|
||
"github_primary_switch_payload"
|
||
],
|
||
"redaction_status": "example_only_not_response",
|
||
"awooop_display_mode": "display_reviewer_audit_redaction_example_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"example_id": "redaction-runtime-gate-counter-summary",
|
||
"display_order": 5,
|
||
"title": "Runtime gate counter summary 脫敏範例",
|
||
"unsafe_input_shape": "Reviewer audit summary 可能把 collection check pass 誤寫成 owner response received、accepted、primary ready 或 runtime gate active。",
|
||
"safe_metadata_shape": "只顯示 received_response_count=0、accepted_response_count=0、reviewer_audit_events_emitted=0、primary_ready_count=0、active_runtime_gate_count=0 與 not_authorization=true。",
|
||
"blocked_payloads": [
|
||
"runtime_approval",
|
||
"execution_queue_id",
|
||
"action_button_payload",
|
||
"scan_request_payload",
|
||
"primary_switch_payload"
|
||
],
|
||
"redaction_status": "example_only_not_response",
|
||
"awooop_display_mode": "display_reviewer_audit_redaction_example_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_audit_retention_rules": [
|
||
{
|
||
"rule_id": "retention-reviewer-start-metadata-only",
|
||
"display_order": 1,
|
||
"title": "Reviewer start metadata retention",
|
||
"retained_metadata_shape": "只可保留 reviewer_role、lane_id、template_id、source_packet_path、review_started_at_taipei 與 redacted_evidence_ref_count。",
|
||
"retention_boundary": "保留範圍僅限 reviewer audit metadata;不得保留 owner response 內文、截圖內容、私有 URL credential 或 session 類資料。",
|
||
"blocked_payloads": [
|
||
"raw_owner_response_body",
|
||
"unredacted_screenshot",
|
||
"private_url_credential",
|
||
"authorization_header",
|
||
"cookie_or_session"
|
||
],
|
||
"retention_status": "metadata_retention_rule_only",
|
||
"awooop_display_mode": "display_reviewer_audit_retention_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "retention-classification-summary-only",
|
||
"display_order": 2,
|
||
"title": "Classification summary retention",
|
||
"retained_metadata_shape": "只可保留 outcome_lane_id、classification_reason_summary、checklist_pass_count、checklist_fail_count、redacted_evidence_ref_ids 與 reviewed_at_taipei。",
|
||
"retention_boundary": "分類理由必須是摘要;不得保留 token 片段、secret hash、partial credential、runner token 或 webhook secret。",
|
||
"blocked_payloads": [
|
||
"token_or_secret_value",
|
||
"secret_hash_or_masked_token",
|
||
"partial_credential",
|
||
"runner_token",
|
||
"webhook_secret"
|
||
],
|
||
"retention_status": "metadata_retention_rule_only",
|
||
"awooop_display_mode": "display_reviewer_audit_retention_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "retention-quarantine-pointer-only",
|
||
"display_order": 3,
|
||
"title": "Quarantine pointer retention",
|
||
"retained_metadata_shape": "只可保留 outcome_lane_id、blocked_reason_code、redaction_required、quarantine_pointer_id、blocked_action_summary 與 reviewed_at_taipei。",
|
||
"retention_boundary": "隔離資料只保留 pointer 與 reason code;不得保留 raw request / response body、credential value、private key 或 execution payload。",
|
||
"blocked_payloads": [
|
||
"raw_request_body",
|
||
"raw_response_body",
|
||
"credential_value",
|
||
"private_key",
|
||
"execution_payload"
|
||
],
|
||
"retention_status": "metadata_retention_rule_only",
|
||
"awooop_display_mode": "display_reviewer_audit_retention_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "retention-readonly-update-targets-only",
|
||
"display_order": 4,
|
||
"title": "Read-only update target retention",
|
||
"retained_metadata_shape": "只可保留 outcome_lane_id、read_only_update_target_ids、followup_runtime_gate_required、active_runtime_gate_count、github_primary_ready_count 與 action_buttons_allowed=false。",
|
||
"retention_boundary": "只讀更新候選只保留目標 ID 與 gate counter;不得保留 execution command、repo write token、refs update payload、workflow secret value 或 primary switch payload。",
|
||
"blocked_payloads": [
|
||
"execution_command",
|
||
"repo_write_token",
|
||
"refs_update_payload",
|
||
"workflow_secret_value",
|
||
"github_primary_switch_payload"
|
||
],
|
||
"retention_status": "metadata_retention_rule_only",
|
||
"awooop_display_mode": "display_reviewer_audit_retention_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"rule_id": "retention-counter-snapshot-only",
|
||
"display_order": 5,
|
||
"title": "Counter snapshot retention",
|
||
"retained_metadata_shape": "只可保留 received_response_count=0、accepted_response_count=0、reviewer_audit_events_emitted=0、primary_ready_count=0、active_runtime_gate_count=0 與 not_authorization=true。",
|
||
"retention_boundary": "counter snapshot 只作狀態顯示;不得把 counter 或 check pass 轉成 runtime approval、execution queue、action button、scan request 或 primary switch。",
|
||
"blocked_payloads": [
|
||
"runtime_approval",
|
||
"execution_queue_id",
|
||
"action_button_payload",
|
||
"scan_request_payload",
|
||
"primary_switch_payload"
|
||
],
|
||
"retention_status": "metadata_retention_rule_only",
|
||
"awooop_display_mode": "display_reviewer_audit_retention_rule_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_audit_retention_checks": [
|
||
{
|
||
"check_id": "check-reviewer-audit-retention-rules-visible",
|
||
"display_order": 1,
|
||
"title": "Retention rules visible before retention check",
|
||
"check_requirement": "AwoooP 只能在顯示 5 條 reviewer audit retention rules 後,才顯示 retention check 狀態。",
|
||
"safe_result": "display_retention_check_waiting_not_ingested",
|
||
"blocked_interpretations": [
|
||
"run_retention_check_before_rules_visible",
|
||
"treat_retention_check_as_ingestion_ready",
|
||
"enable_audit_storage_from_check"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_retention_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-retained-metadata-only",
|
||
"display_order": 2,
|
||
"title": "Retained metadata shape only",
|
||
"check_requirement": "retention check 只能確認 retained_metadata_shape、reason code、pointer、counter 與 redacted evidence refs,不得要求或保存 raw payload。",
|
||
"safe_result": "metadata_only_retention_check",
|
||
"blocked_interpretations": [
|
||
"store_raw_owner_response_for_retention",
|
||
"store_unredacted_evidence_for_retention",
|
||
"store_private_url_or_session"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_retention_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-raw-payloads-blocked",
|
||
"display_order": 3,
|
||
"title": "Raw payload retention blocked",
|
||
"check_requirement": "raw request body、raw response body、unredacted screenshot、execution payload、private key 與 credential value 必須被拒收或隔離。",
|
||
"safe_result": "raw_payload_retention_blocked",
|
||
"blocked_interpretations": [
|
||
"retain_raw_request_body",
|
||
"retain_raw_response_body",
|
||
"retain_unredacted_screenshot",
|
||
"retain_execution_payload"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_retention_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-secret-retention-blocked",
|
||
"display_order": 4,
|
||
"title": "Secret retention blocked",
|
||
"check_requirement": "token、secret、secret hash、partial credential、runner token、webhook secret、authorization header 與 cookie / session 都不得進入 retention。",
|
||
"safe_result": "secret_retention_blocked",
|
||
"blocked_interpretations": [
|
||
"retain_token_value",
|
||
"retain_secret_hash",
|
||
"retain_partial_credential",
|
||
"retain_authorization_header"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_retention_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-counter-snapshot-only",
|
||
"display_order": 5,
|
||
"title": "Counter snapshot only",
|
||
"check_requirement": "retention checks 通過也不能增加 received_response_count、accepted_response_count、reviewer_audit_events_emitted、primary_ready_count 或 active_runtime_gate_count。",
|
||
"safe_result": "counter_snapshot_only",
|
||
"blocked_interpretations": [
|
||
"treat_retention_check_pass_as_owner_response_received",
|
||
"treat_retention_check_pass_as_owner_response_accepted",
|
||
"treat_retention_check_pass_as_audit_event_emitted",
|
||
"treat_retention_check_pass_as_runtime_gate"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_retention_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-reviewer-audit-no-runtime-retention-side-effect",
|
||
"display_order": 6,
|
||
"title": "No runtime retention side effect",
|
||
"check_requirement": "retention checks 只顯示 pass / waiting / blocked 的只讀狀態,不得建立 runtime gate、execution queue、action button、scan request、repo action 或 workflow / secret change。",
|
||
"safe_result": "read_only_retention_check_no_side_effect",
|
||
"blocked_interpretations": [
|
||
"create_runtime_gate_from_retention_check",
|
||
"create_execution_queue_from_retention_check",
|
||
"add_action_button_from_retention_check",
|
||
"start_scan_from_retention_check"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_retention_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_audit_handoff_packets": [
|
||
{
|
||
"packet_id": "handoff-current-counters-and-boundary",
|
||
"display_order": 1,
|
||
"title": "目前 counters 與非授權邊界",
|
||
"handoff_content": "交接時必須顯示 received=0、accepted=0、reviewer audit emitted=0、primary ready=0、active runtime gate=0 與 headline 58%。",
|
||
"safe_consumer_action": "AwoooP / 另一個 Session 只能把它當成只讀狀態摘要與 resume pointer。",
|
||
"blocked_interpretations": [
|
||
"treat_handoff_as_progress_approval",
|
||
"treat_handoff_as_runtime_gate",
|
||
"increase_received_or_accepted_count"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_packet_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"packet_id": "handoff-required-source-packets",
|
||
"display_order": 2,
|
||
"title": "必讀 source packets",
|
||
"handoff_content": "接手者必須同時讀取 S4.9 Gitea、S4.10 GitHub target、S4.11 refs truth、S4.12 workflow / secret name 四包 owner response snapshot,以及 S4.13 validation rollup 與 security mirror status rollup。",
|
||
"safe_consumer_action": "只把這些檔案當成顯示與人工 review 的上下文來源,不能跳過 source packet preflight。",
|
||
"blocked_interpretations": [
|
||
"accept_owner_response_from_handoff_only",
|
||
"skip_source_packet_preflight",
|
||
"treat_handoff_packet_as_source_of_truth_override"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_packet_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"packet_id": "handoff-safe-display-fields",
|
||
"display_order": 3,
|
||
"title": "安全顯示欄位",
|
||
"handoff_content": "交接畫面只顯示 lane id、template id、count、waiting / blocked / quarantine 狀態、脫敏 evidence refs、reason code、pointer 與 metadata shape。",
|
||
"safe_consumer_action": "Operator Console 可顯示摘要、缺口、下一個收件項目與 reviewer audit metadata 欄位名稱。",
|
||
"blocked_interpretations": [
|
||
"render_raw_owner_response",
|
||
"render_unredacted_screenshot",
|
||
"render_private_url_or_authorization_header"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_packet_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"packet_id": "handoff-forbidden-runtime-interpretations",
|
||
"display_order": 4,
|
||
"title": "禁止 runtime 誤讀",
|
||
"handoff_content": "handoff packet 不能被解讀成 repo creation、visibility change、refs sync/delete/force push、workflow/webhook/runner/deploy key/branch protection/repository secret 變更、Kali scan、GitHub hosted runner 或 GitHub primary switch。",
|
||
"safe_consumer_action": "只顯示禁止事項與 blocked reason,不新增 action button、execution queue 或 runner job。",
|
||
"blocked_interpretations": [
|
||
"create_action_button_from_handoff",
|
||
"enqueue_runtime_job_from_handoff",
|
||
"start_scan_or_repo_action_from_handoff"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_packet_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"packet_id": "handoff-next-owner-response-focus",
|
||
"display_order": 5,
|
||
"title": "下一個 owner response focus",
|
||
"handoff_content": "下一個建議收件仍是 S4.9 Gitea owner attestation response,需依 5 個 Gitea coverage attestation templates 回覆脫敏 evidence refs。",
|
||
"safe_consumer_action": "AwoooP 只能顯示 next_collection_candidate=S4.9 與 request packet,不得自動催收、代填或接受 response。",
|
||
"blocked_interpretations": [
|
||
"auto_collect_owner_response_from_handoff",
|
||
"mark_s4_9_received_from_handoff",
|
||
"accept_owner_decision_without_redacted_evidence"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_packet_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"packet_id": "handoff-post-review-followup-gates",
|
||
"display_order": 6,
|
||
"title": "交接後仍需 follow-up gates",
|
||
"handoff_content": "未來即使 owner response 通過,也仍需 redacted payload 驗收、rollback ADR owner approval、逐 repo 人工批准與獨立 runtime gate,才能討論執行層動作。",
|
||
"safe_consumer_action": "接手者只能把後續 gate 顯示為 waiting / approval required,不得把 handoff completion 當成落地完成。",
|
||
"blocked_interpretations": [
|
||
"treat_handoff_complete_as_primary_ready",
|
||
"treat_handoff_complete_as_payload_ingested",
|
||
"treat_handoff_complete_as_runtime_approved"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_packet_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_reviewer_audit_handoff_checks": [
|
||
{
|
||
"check_id": "check-handoff-packets-visible",
|
||
"display_order": 1,
|
||
"title": "Handoff packets visible before consumption",
|
||
"check_requirement": "AwoooP 只能在 6 個 reviewer audit handoff packets 全部可見後,才顯示 handoff consumption check 狀態。",
|
||
"safe_result": "display_handoff_check_waiting_not_consumed",
|
||
"blocked_interpretations": [
|
||
"consume_handoff_before_packets_visible",
|
||
"treat_handoff_check_as_runtime_ready",
|
||
"hide_missing_handoff_packet"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-handoff-counters-remain-zero",
|
||
"display_order": 2,
|
||
"title": "Counters remain zero",
|
||
"check_requirement": "handoff checks 通過也不能增加 received_response_count、accepted_response_count、reviewer_audit_events_emitted、primary_ready_count 或 active_runtime_gate_count。",
|
||
"safe_result": "handoff_counter_snapshot_only",
|
||
"blocked_interpretations": [
|
||
"treat_handoff_check_pass_as_owner_response_received",
|
||
"treat_handoff_check_pass_as_owner_response_accepted",
|
||
"treat_handoff_check_pass_as_audit_event_emitted",
|
||
"treat_handoff_check_pass_as_runtime_gate"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-handoff-source-packets-required",
|
||
"display_order": 3,
|
||
"title": "Source packets required before review",
|
||
"check_requirement": "接手者必須先讀 S4.9、S4.10、S4.11、S4.12 四包 owner response source packets 與 S4.13 rollup,不能只靠 handoff 摘要接受 response。",
|
||
"safe_result": "source_packet_preflight_required",
|
||
"blocked_interpretations": [
|
||
"accept_owner_response_from_handoff_only",
|
||
"skip_source_packet_preflight",
|
||
"override_source_packet_from_handoff"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-handoff-safe-display-only",
|
||
"display_order": 4,
|
||
"title": "Safe display fields only",
|
||
"check_requirement": "handoff consumption 只能顯示 lane id、template id、count、狀態、脫敏 evidence refs、reason code、pointer 與 metadata shape。",
|
||
"safe_result": "safe_display_only",
|
||
"blocked_interpretations": [
|
||
"render_raw_owner_response",
|
||
"render_unredacted_screenshot",
|
||
"render_authorization_header_or_private_url"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-handoff-runtime-interpretations-blocked",
|
||
"display_order": 5,
|
||
"title": "Runtime interpretations blocked",
|
||
"check_requirement": "handoff consumption 不得新增 runtime gate、execution queue、action button、scan request、repo action、refs action、workflow / secret change、runner enablement 或 primary switch。",
|
||
"safe_result": "handoff_runtime_interpretation_blocked",
|
||
"blocked_interpretations": [
|
||
"create_action_button_from_handoff_check",
|
||
"enqueue_runtime_job_from_handoff_check",
|
||
"start_scan_or_repo_action_from_handoff_check",
|
||
"switch_primary_from_handoff_check"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-handoff-next-focus-not-received",
|
||
"display_order": 6,
|
||
"title": "Next focus remains not received",
|
||
"check_requirement": "handoff checks 只能顯示 next_collection_candidate=S4.9,不能自動催收、代填、標記 received、標記 accepted 或建立 follow-up runtime gate。",
|
||
"safe_result": "next_focus_display_only_not_received",
|
||
"blocked_interpretations": [
|
||
"auto_collect_owner_response_from_handoff_check",
|
||
"mark_s4_9_received_from_handoff_check",
|
||
"mark_s4_9_accepted_from_handoff_check",
|
||
"create_followup_runtime_gate_from_handoff_check"
|
||
],
|
||
"awooop_display_mode": "display_reviewer_audit_handoff_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_parallel_session_sync_checks": [
|
||
{
|
||
"check_id": "check-parallel-session-same-pr-branch",
|
||
"display_order": 1,
|
||
"title": "Same PR branch before continuing",
|
||
"check_requirement": "AwoooP 主線與另一個 Security Supply Chain Session 必須先確認正在讀取同一個 PR #117 分支 codex/security-supply-chain-contracts-20260512,且本地與遠端無分歧。",
|
||
"safe_result": "same_branch_read_only_sync_required",
|
||
"blocked_interpretations": [
|
||
"continue_on_unfetched_branch",
|
||
"treat_parallel_session_as_runtime_owner",
|
||
"merge_without_branch_sync"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_sync_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-parallel-session-latest-delta-visible",
|
||
"display_order": 2,
|
||
"title": "Latest delta visible",
|
||
"check_requirement": "接手前必須顯示 latest progress delta,避免另一個 Session 只讀到舊的 handoff packets 或舊 ledger。",
|
||
"safe_result": "latest_delta_display_only",
|
||
"blocked_interpretations": [
|
||
"continue_from_stale_delta",
|
||
"skip_progress_ledger_review",
|
||
"treat_delta_visibility_as_authorization"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_sync_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-parallel-session-owner-response-counters-zero",
|
||
"display_order": 3,
|
||
"title": "Owner response counters remain zero",
|
||
"check_requirement": "同步檢查通過也不得增加 received_response_count、accepted_response_count、reviewer_audit_events_emitted、primary_ready_count 或 active_runtime_gate_count。",
|
||
"safe_result": "parallel_sync_counter_snapshot_only",
|
||
"blocked_interpretations": [
|
||
"treat_parallel_sync_as_owner_response_received",
|
||
"treat_parallel_sync_as_owner_response_accepted",
|
||
"treat_parallel_sync_as_audit_event_emitted",
|
||
"treat_parallel_sync_as_runtime_gate"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_sync_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-parallel-session-runtime-flags-false",
|
||
"display_order": 4,
|
||
"title": "Runtime flags stay false",
|
||
"check_requirement": "兩個 Session 同步後仍必須確認 runtime_execution_authorized、repo_creation_authorized、refs_sync_authorized、workflow_modification_authorized、github_primary_switch_authorized 與 action_buttons_allowed 都是 false。",
|
||
"safe_result": "parallel_sync_runtime_flags_false",
|
||
"blocked_interpretations": [
|
||
"treat_sync_complete_as_runtime_authorized",
|
||
"create_action_button_from_parallel_sync",
|
||
"enqueue_runtime_job_from_parallel_sync",
|
||
"start_kali_or_repo_action_from_parallel_sync"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_sync_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-parallel-session-source-control-mutations-blocked",
|
||
"display_order": 5,
|
||
"title": "Source-control mutations blocked",
|
||
"check_requirement": "同步檢查只允許 docs/schema/snapshot/guard 類只讀更新;不得建立 repo、改 visibility、sync/delete refs、force push、改 workflow/secret/runner、切 GitHub primary 或停用 Gitea。",
|
||
"safe_result": "parallel_sync_source_control_mutations_blocked",
|
||
"blocked_interpretations": [
|
||
"create_repo_from_parallel_sync",
|
||
"sync_refs_from_parallel_sync",
|
||
"modify_workflow_or_secret_from_parallel_sync",
|
||
"switch_primary_from_parallel_sync"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_sync_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-parallel-session-next-focus-stays-s4-9",
|
||
"display_order": 6,
|
||
"title": "Next focus stays S4.9",
|
||
"check_requirement": "同步檢查只能顯示 next_collection_candidate=S4.9 Gitea owner attestation response;不得把另一個 Session 的接手視為催收、代填、received、accepted 或 follow-up runtime gate。",
|
||
"safe_result": "parallel_sync_next_focus_s4_9_display_only",
|
||
"blocked_interpretations": [
|
||
"auto_collect_owner_response_from_parallel_sync",
|
||
"mark_s4_9_received_from_parallel_sync",
|
||
"mark_s4_9_accepted_from_parallel_sync",
|
||
"create_followup_runtime_gate_from_parallel_sync"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_sync_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_parallel_session_conflict_lanes": [
|
||
{
|
||
"lane_id": "conflict-stale-or-diverged-branch",
|
||
"display_order": 1,
|
||
"title": "Stale or diverged PR branch",
|
||
"conflict_condition": "任一 Session 發現本地 HEAD 與 gitea/codex/security-supply-chain-contracts-20260512 不是 0/0 同步,或不是 PR #117 的同一分支。",
|
||
"safe_result": "pause_and_resync_branch_read_only",
|
||
"required_operator_action": "只顯示需要 fetch / rebase planning / 人工確認;不得自動 merge、force push 或覆蓋另一個 Session 的更新。",
|
||
"blocked_actions": [
|
||
"auto_merge_diverged_branch",
|
||
"force_push_to_reconcile_sessions",
|
||
"overwrite_other_session_changes"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_conflict_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "conflict-stale-progress-delta",
|
||
"display_order": 2,
|
||
"title": "Stale progress delta",
|
||
"conflict_condition": "另一個 Session 看到的 latest delta、ledger length 或 LOGBOOK latest entry 與本 rollup 不一致。",
|
||
"safe_result": "refresh_rollup_and_logbook_before_continue",
|
||
"required_operator_action": "只顯示需要重讀 status rollup、LOGBOOK、handoff 與 guard output;不得把舊 delta 當成可繼續工作的授權。",
|
||
"blocked_actions": [
|
||
"continue_from_stale_delta",
|
||
"skip_logbook_refresh",
|
||
"treat_stale_delta_as_authorization"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_conflict_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "conflict-owner-response-counter-drift",
|
||
"display_order": 3,
|
||
"title": "Owner response counter drift",
|
||
"conflict_condition": "任一 Session 看到 received、accepted、reviewer audit emitted、primary ready 或 active runtime gate count 不是 0,且沒有對應 source packet 與人工驗收紀錄。",
|
||
"safe_result": "hold_as_counter_drift_until_evidence_review",
|
||
"required_operator_action": "只顯示 counter drift,需要人工比對 source packet、audit metadata 與 LOGBOOK;不得自動採信或回寫 counter。",
|
||
"blocked_actions": [
|
||
"auto_accept_counter_drift",
|
||
"mark_owner_response_received_without_source_packet",
|
||
"create_runtime_gate_from_counter_drift"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_conflict_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "conflict-runtime-flag-drift",
|
||
"display_order": 4,
|
||
"title": "Runtime flag drift",
|
||
"conflict_condition": "任一 Session 看到 runtime_execution_authorized、repo_creation_authorized、refs_sync_authorized、workflow_modification_authorized、github_primary_switch_authorized 或 action_buttons_allowed 變成 true。",
|
||
"safe_result": "block_runtime_flag_drift_for_manual_review",
|
||
"required_operator_action": "只顯示 false flag drift 與需人工 review 的欄位;不得建立 action button、runtime queue 或 scan request。",
|
||
"blocked_actions": [
|
||
"treat_true_flag_as_approved",
|
||
"create_action_button_from_flag_drift",
|
||
"enqueue_runtime_job_from_flag_drift"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_conflict_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "conflict-source-control-mutation-request",
|
||
"display_order": 5,
|
||
"title": "Source-control mutation request",
|
||
"conflict_condition": "任一 Session 或外部要求把同步檢查結果轉成 repo creation、visibility change、refs sync/delete/force push、workflow/secret/runner change、Gitea disable 或 GitHub primary switch。",
|
||
"safe_result": "reject_mutation_request_in_mirror_phase",
|
||
"required_operator_action": "只顯示拒收原因、blocked action summary 與仍需 owner response / runtime gate;不得排入執行。",
|
||
"blocked_actions": [
|
||
"create_repo_from_conflict_lane",
|
||
"sync_refs_from_conflict_lane",
|
||
"modify_workflow_secret_runner_from_conflict_lane",
|
||
"disable_gitea_or_switch_primary_from_conflict_lane"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_conflict_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "conflict-next-focus-drift",
|
||
"display_order": 6,
|
||
"title": "Next focus drift",
|
||
"conflict_condition": "任一 Session 看到 next_collection_candidate 不是 S4.9,或把 S4.10 / S4.11 / S4.12 提前當成可 accepted。",
|
||
"safe_result": "restore_next_focus_to_s4_9_display_only",
|
||
"required_operator_action": "只顯示需回到 S4.9 Gitea owner attestation response 的收件順序;不得催收、代填、標記 received/accepted 或建立 follow-up runtime gate。",
|
||
"blocked_actions": [
|
||
"auto_collect_owner_response_from_focus_drift",
|
||
"mark_later_lane_accepted_from_focus_drift",
|
||
"create_followup_runtime_gate_from_focus_drift"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_conflict_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_parallel_session_recovery_checks": [
|
||
{
|
||
"check_id": "check-recovery-fetch-and-compare-branch",
|
||
"display_order": 1,
|
||
"title": "Fetch and compare branch before recovery",
|
||
"check_requirement": "命中 conflict lane 後,AwoooP 與另一個 Session 必須先顯示 git fetch 後的 HEAD 對 gitea/codex/security-supply-chain-contracts-20260512 為 0/0;若不是 0/0,只能停下請人工判定。",
|
||
"safe_result": "recovery_branch_compare_read_only",
|
||
"blocked_interpretations": [
|
||
"auto_rebase_after_conflict",
|
||
"auto_merge_after_conflict",
|
||
"force_push_after_conflict"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-recovery-read-latest-ledger",
|
||
"display_order": 2,
|
||
"title": "Read latest ledger and LOGBOOK",
|
||
"check_requirement": "復原前必須重新讀取 status rollup latest delta、progress_delta_ledger length、LOGBOOK latest entry 與 handoff summary;不得從衝突前的舊上下文繼續。",
|
||
"safe_result": "recovery_latest_ledger_read_only",
|
||
"blocked_interpretations": [
|
||
"continue_from_pre_conflict_context",
|
||
"skip_logbook_after_conflict",
|
||
"treat_ledger_read_as_authorization"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-recovery-rerun-readonly-guards",
|
||
"display_order": 3,
|
||
"title": "Rerun read-only guards",
|
||
"check_requirement": "復原前必須重跑 source-control-owner-response guard 與 security-mirror-progress guard;guard pass 只代表 snapshot 邊界一致,不代表 owner response、runtime gate 或 source-control mutation 授權。",
|
||
"safe_result": "recovery_guards_pass_display_only",
|
||
"blocked_interpretations": [
|
||
"treat_guard_pass_as_owner_response",
|
||
"treat_guard_pass_as_runtime_gate",
|
||
"treat_guard_pass_as_primary_approval"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-recovery-review-staged-diff-only",
|
||
"display_order": 4,
|
||
"title": "Review staged diff before continuing",
|
||
"check_requirement": "若復原後有 staged 或 unstaged diff,只能顯示 docs/schema/snapshot/guard 類只讀變更;不得把別的 Session 的變更覆蓋、丟棄或自動合併。",
|
||
"safe_result": "recovery_diff_review_read_only",
|
||
"blocked_interpretations": [
|
||
"overwrite_other_session_changes",
|
||
"drop_unreviewed_changes",
|
||
"stage_runtime_or_secret_change_from_recovery"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-recovery-keep-runtime-flags-false",
|
||
"display_order": 5,
|
||
"title": "Keep runtime flags false after recovery",
|
||
"check_requirement": "復原後仍必須確認 runtime_execution_authorized、repo_creation_authorized、refs_sync_authorized、workflow_modification_authorized、github_primary_switch_authorized 與 action_buttons_allowed 全部為 false。",
|
||
"safe_result": "recovery_runtime_flags_false",
|
||
"blocked_interpretations": [
|
||
"create_action_button_after_recovery",
|
||
"enqueue_runtime_job_after_recovery",
|
||
"start_kali_or_repo_action_after_recovery"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"check_id": "check-recovery-record-next-focus-s4-9",
|
||
"display_order": 6,
|
||
"title": "Record next focus remains S4.9",
|
||
"check_requirement": "復原完成後只能把 next_collection_candidate 顯示為 S4.9 Gitea owner attestation response;不得把復原完成視為催收、代填、received、accepted 或 follow-up runtime gate。",
|
||
"safe_result": "recovery_next_focus_s4_9_display_only",
|
||
"blocked_interpretations": [
|
||
"auto_collect_owner_response_after_recovery",
|
||
"mark_s4_9_received_after_recovery",
|
||
"create_followup_runtime_gate_after_recovery"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_check_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"owner_response_validation_parallel_session_recovery_outcome_lanes": [
|
||
{
|
||
"lane_id": "outcome-recovery-ready-readonly",
|
||
"display_order": 1,
|
||
"title": "Recovery ready for read-only continuation",
|
||
"outcome_condition": "branch compare 為 0/0、latest ledger / LOGBOOK 已重讀、兩個只讀 guard 通過、diff 只含 docs/schema/snapshot/guard 類更新、false flags 仍為 false,且 next_collection_candidate 仍是 S4.9。",
|
||
"safe_result": "continue_read_only_from_latest_head",
|
||
"allowed_next_step": "只允許在最新 HEAD 上繼續下一個 mirror-only docs/schema/snapshot/guard 階段;不得把 recovery ready 視為 owner response received、accepted 或 runtime gate。",
|
||
"blocked_interpretations": [
|
||
"treat_recovery_ready_as_merge_approval",
|
||
"treat_recovery_ready_as_owner_response",
|
||
"treat_recovery_ready_as_runtime_gate"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "outcome-recovery-branch-still-diverged",
|
||
"display_order": 2,
|
||
"title": "Branch still diverged after fetch",
|
||
"outcome_condition": "git fetch 後本地 HEAD 與遠端 PR 分支仍不是 0/0,或不是 codex/security-supply-chain-contracts-20260512 同一分支。",
|
||
"safe_result": "pause_for_manual_branch_review",
|
||
"allowed_next_step": "停下並只顯示分支分歧狀態;人工判定前不得 rebase、merge、force push、覆蓋或丟棄另一個 Session 的變更。",
|
||
"blocked_interpretations": [
|
||
"auto_rebase_still_diverged_branch",
|
||
"auto_merge_still_diverged_branch",
|
||
"force_push_still_diverged_branch"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "outcome-recovery-ledger-still-stale",
|
||
"display_order": 3,
|
||
"title": "Ledger or handoff still stale",
|
||
"outcome_condition": "latest delta、progress_delta_ledger length、LOGBOOK latest entry 或 AwoooP handoff summary 仍不一致。",
|
||
"safe_result": "pause_and_reread_handoff_sources",
|
||
"allowed_next_step": "只允許重讀 rollup、LOGBOOK、handoff 與 guard output;不得從舊上下文繼續,也不得標記任何 owner response received/accepted。",
|
||
"blocked_interpretations": [
|
||
"continue_from_stale_ledger",
|
||
"skip_latest_logbook_after_recovery",
|
||
"mark_response_received_from_stale_handoff"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "outcome-recovery-guard-failed",
|
||
"display_order": 4,
|
||
"title": "Read-only guard failed",
|
||
"outcome_condition": "source-control-owner-response guard、security-mirror-progress guard、JSON parse 或 targeted jq 任一失敗。",
|
||
"safe_result": "block_recovery_until_snapshot_fixed",
|
||
"allowed_next_step": "只允許修正 docs/schema/snapshot/guard 的一致性或更新證據;不得把 guard failed 轉成 runtime action、source-control mutation 或人工批准。",
|
||
"blocked_interpretations": [
|
||
"ignore_guard_failure",
|
||
"treat_guard_failure_as_runtime_incident",
|
||
"open_action_button_from_guard_failure"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "outcome-recovery-diff-out-of-scope",
|
||
"display_order": 5,
|
||
"title": "Diff out of mirror-only scope",
|
||
"outcome_condition": "staged 或 unstaged diff 含 runtime code、workflow、secret、runner、refs、deploy、Kali execute、GitHub primary 或 Gitea disable 相關變更。",
|
||
"safe_result": "quarantine_diff_for_human_review",
|
||
"allowed_next_step": "只允許把 out-of-scope diff 標示給人工 review;不得自動 stage、commit、push、丟棄、套用或合併。",
|
||
"blocked_interpretations": [
|
||
"stage_out_of_scope_diff",
|
||
"commit_out_of_scope_diff",
|
||
"drop_out_of_scope_diff_without_review"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "outcome-recovery-runtime-flag-drift",
|
||
"display_order": 6,
|
||
"title": "Runtime flag drift after recovery",
|
||
"outcome_condition": "runtime_execution_authorized、repo_creation_authorized、refs_sync_authorized、workflow_modification_authorized、github_primary_switch_authorized 或 action_buttons_allowed 任一變成 true。",
|
||
"safe_result": "block_runtime_interpretation_and_review_flags",
|
||
"allowed_next_step": "只允許回查是哪個 snapshot 或文件讓 false flag 漂移;人工批准前不得建立 action button、runtime queue 或 source-control operation。",
|
||
"blocked_interpretations": [
|
||
"accept_runtime_flag_drift",
|
||
"create_action_button_from_flag_drift",
|
||
"enqueue_runtime_job_from_flag_drift"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
},
|
||
{
|
||
"lane_id": "outcome-recovery-next-focus-drift",
|
||
"display_order": 7,
|
||
"title": "Next focus drift after recovery",
|
||
"outcome_condition": "復原後 next_collection_candidate 不是 S4.9,或 S4.10 / S4.11 / S4.12 被提前視為 received / accepted。",
|
||
"safe_result": "restore_s4_9_display_only_focus",
|
||
"allowed_next_step": "只允許把下一個 owner response focus 顯示回 S4.9 Gitea owner attestation response;不得催收、代填、標記 received/accepted 或建立 follow-up runtime gate。",
|
||
"blocked_interpretations": [
|
||
"advance_next_focus_without_owner_response",
|
||
"mark_later_packet_received_after_recovery",
|
||
"create_followup_gate_from_focus_drift"
|
||
],
|
||
"awooop_display_mode": "display_parallel_session_recovery_outcome_lane_only",
|
||
"execution_authorized": false,
|
||
"not_approval": true
|
||
}
|
||
],
|
||
"readiness_effects": [
|
||
{
|
||
"effect_id": "gitea_owner_response_accepted",
|
||
"when_all_checks_pass": "S4.9 request packet 已顯示、template status ledger / audit event templates / redaction examples / display sections / collection checks 已確認 request / received / accepted 分離,audit events emitted=0,且 5 個 response templates 全部接受;S4.6 redacted payload 仍需另外驗收。",
|
||
"allowed_update": "只更新 Gitea coverage matrix、owner / canonical disposition 與 readiness wording;gitea_repo_inventory_v1 仍不得直接標記 ok。",
|
||
"still_forbidden": [
|
||
"store_token_value",
|
||
"write_gitea_repo",
|
||
"sync_refs",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
{
|
||
"effect_id": "github_target_owner_response_accepted",
|
||
"when_all_checks_pass": "S4.10 9 個 target response 全部接受。",
|
||
"allowed_update": "只更新 GitHub target decision table、repo approval package 與 primary readiness blocker wording。",
|
||
"still_forbidden": [
|
||
"create_github_repo",
|
||
"change_visibility",
|
||
"sync_refs",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
{
|
||
"effect_id": "ref_truth_owner_response_accepted",
|
||
"when_all_checks_pass": "S4.11 request packet 已顯示,template status ledger 已維持 request / received / accepted 分離,audit event templates 維持 0 emitted,redaction examples 未被當成 response,collection checks 未被當成 approval,intake preflight checks 未被當成 execution authorization,5 個 lane response 全部接受,且 batch scope 可重現。",
|
||
"allowed_update": "只更新 ref truth classification disposition 與 draft reconcile plan wording。",
|
||
"still_forbidden": [
|
||
"fetch_refs",
|
||
"push_refs",
|
||
"delete_refs",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
{
|
||
"effect_id": "workflow_secret_owner_response_accepted",
|
||
"when_all_checks_pass": "S4.12 request packet、template status ledger、audit event templates、redaction examples、collection checks 與 intake preflight checks 只作顯示,5 個 workflow / secret lanes 全部接受,且所有 evidence 已脫敏。",
|
||
"allowed_update": "只更新 workflow / secret name inventory、redacted export request 與 readiness wording。",
|
||
"still_forbidden": [
|
||
"store_secret_value",
|
||
"modify_workflow",
|
||
"enable_runner",
|
||
"enable_github_hosted_runner",
|
||
"switch_github_primary"
|
||
]
|
||
}
|
||
],
|
||
"allowed_outputs": [
|
||
"mirror_owner_response_validation_rollup",
|
||
"display_cross_packet_counts",
|
||
"display_missing_owner_response_lanes",
|
||
"display_next_collection_candidate",
|
||
"display_owner_response_evidence_routing_rules",
|
||
"display_owner_response_validation_sections",
|
||
"display_owner_response_validation_state_transition_rules",
|
||
"display_owner_response_validation_reviewer_checklist",
|
||
"display_owner_response_validation_reviewer_outcome_lanes",
|
||
"display_owner_response_validation_reviewer_audit_event_templates",
|
||
"display_owner_response_validation_reviewer_audit_display_sections",
|
||
"display_owner_response_validation_reviewer_audit_collection_checks",
|
||
"display_owner_response_validation_reviewer_audit_redaction_examples",
|
||
"display_owner_response_validation_reviewer_audit_retention_rules",
|
||
"display_owner_response_validation_reviewer_audit_retention_checks",
|
||
"display_owner_response_validation_reviewer_audit_handoff_packets",
|
||
"display_owner_response_validation_reviewer_audit_handoff_checks",
|
||
"display_owner_response_validation_parallel_session_sync_checks",
|
||
"display_owner_response_validation_parallel_session_conflict_lanes",
|
||
"display_owner_response_validation_parallel_session_recovery_checks",
|
||
"display_owner_response_validation_parallel_session_recovery_outcome_lanes",
|
||
"route_invalid_response_to_quarantine",
|
||
"update_read_only_readiness_wording_after_accepted_response"
|
||
],
|
||
"missing_response_lanes": [
|
||
{
|
||
"lane_id": "s4_9_gitea_inventory_owner_attestation_response",
|
||
"source_contract": "gitea_inventory_owner_attestation_response_v1",
|
||
"response_template_count": 5,
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"current_status": "waiting_owner_response",
|
||
"next_owner_action": "Owner 需依 S4.9 owner response request packet 回覆 5 個 Gitea coverage attestation items;AwoooP 需用 template status ledger / audit event templates / redaction examples / display sections / collection checks 逐項追蹤,且只能引用脫敏 evidence refs。",
|
||
"awooop_display_mode": "observe_missing_response",
|
||
"still_forbidden": [
|
||
"store_token_value",
|
||
"write_gitea_repo",
|
||
"sync_refs",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
{
|
||
"lane_id": "s4_10_github_target_owner_decision_response",
|
||
"source_contract": "github_target_owner_decision_response_v1",
|
||
"response_template_count": 9,
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"current_status": "waiting_owner_response",
|
||
"next_owner_action": "Owner 需依 S4.10 request packet、template status ledger、audit event templates、redaction examples、collection checks 與 intake preflight checks 回覆 9 個 GitHub target 的 owner / visibility / canonical disposition。",
|
||
"awooop_display_mode": "observe_missing_response",
|
||
"still_forbidden": [
|
||
"create_github_repo",
|
||
"change_repo_visibility",
|
||
"sync_refs",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
{
|
||
"lane_id": "s4_11_ref_truth_owner_response",
|
||
"source_contract": "source_control_ref_truth_owner_response_v1",
|
||
"response_template_count": 5,
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"current_status": "waiting_owner_response",
|
||
"next_owner_action": "Owner 需依 S4.11 request packet、template status ledger、audit event templates、redaction examples、collection checks 與 intake preflight checks 回覆 refs truth、deprecated drift、release tags 與 GitHub-only refs disposition。",
|
||
"awooop_display_mode": "observe_missing_response",
|
||
"still_forbidden": [
|
||
"fetch_refs",
|
||
"push_refs",
|
||
"delete_refs",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
{
|
||
"lane_id": "s4_12_workflow_secret_name_owner_response",
|
||
"source_contract": "source_control_workflow_secret_name_owner_response_v1",
|
||
"response_template_count": 5,
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"current_status": "waiting_owner_response",
|
||
"next_owner_action": "Owner 需依 S4.12 request packet、template status ledger、audit event templates、redaction examples、collection checks 與 intake preflight checks 回覆 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity 的脫敏狀態;template status ledger 會維持 waiting、audit event templates 維持 0 emitted、redaction examples 只作參考,直到實際收到脫敏 response。",
|
||
"awooop_display_mode": "observe_missing_response",
|
||
"still_forbidden": [
|
||
"store_secret_value",
|
||
"modify_workflow",
|
||
"enable_runner",
|
||
"enable_github_hosted_runner",
|
||
"switch_github_primary"
|
||
]
|
||
}
|
||
],
|
||
"owner_response_collection_order": [
|
||
{
|
||
"order": 1,
|
||
"lane_id": "s4_9_gitea_inventory_owner_attestation_response",
|
||
"reason": "先確認 Gitea 覆蓋範圍與 canonical owner,避免後續 GitHub target / refs 判定建立在不完整 inventory 上。",
|
||
"required_packet": "docs/security/GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.md",
|
||
"minimum_response": [
|
||
"public-only/local gap disposition",
|
||
"org/user endpoint disposition",
|
||
"110 adjacent source scope",
|
||
"canonical owner",
|
||
"legacy/inaccessible disposition"
|
||
],
|
||
"awooop_action": "display_next_collection_item",
|
||
"blocked_until_received": true,
|
||
"execution_authorized": false,
|
||
"still_forbidden": [
|
||
"store_token_value",
|
||
"write_gitea_repo",
|
||
"sync_refs",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
{
|
||
"order": 2,
|
||
"lane_id": "s4_10_github_target_owner_decision_response",
|
||
"reason": "再確認 GitHub target owner / visibility / canonical,避免 not_found_or_private 被誤解成可直接建立 repo。",
|
||
"required_packet": "docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md",
|
||
"minimum_response": [
|
||
"repo owner",
|
||
"target visibility",
|
||
"canonical target disposition",
|
||
"not_found_or_private handling",
|
||
"new VibeWork / agent-bounty-protocol target disposition"
|
||
],
|
||
"awooop_action": "display_next_collection_item",
|
||
"blocked_until_received": true,
|
||
"execution_authorized": false,
|
||
"still_forbidden": [
|
||
"create_github_repo",
|
||
"change_repo_visibility",
|
||
"sync_refs",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
{
|
||
"order": 3,
|
||
"lane_id": "s4_11_ref_truth_owner_response",
|
||
"reason": "GitHub target owner / visibility 明確後,再判定 branch / tag 真相來源,避免 refs sync 或 delete 被提前誤用。",
|
||
"required_packet": "docs/security/SOURCE-CONTROL-REF-TRUTH-OWNER-RESPONSE.md",
|
||
"minimum_response": [
|
||
"main/dev truth disposition",
|
||
"deprecated drift disposition",
|
||
"release tag retention",
|
||
"GitHub-only refs disposition"
|
||
],
|
||
"awooop_action": "display_next_collection_item",
|
||
"blocked_until_received": true,
|
||
"execution_authorized": false,
|
||
"still_forbidden": [
|
||
"fetch_refs",
|
||
"push_refs",
|
||
"delete_refs",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
{
|
||
"order": 4,
|
||
"lane_id": "s4_12_workflow_secret_name_owner_response",
|
||
"reason": "最後補 workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 parity,避免 secret 或 runner 變更早於 source truth。",
|
||
"required_packet": "docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md",
|
||
"minimum_response": [
|
||
"webhook redacted state",
|
||
"runner label owner",
|
||
"deploy key redacted state",
|
||
"branch protection / CODEOWNERS state",
|
||
"repository secret name parity"
|
||
],
|
||
"awooop_action": "display_next_collection_item",
|
||
"blocked_until_received": true,
|
||
"execution_authorized": false,
|
||
"still_forbidden": [
|
||
"store_secret_value",
|
||
"modify_workflow",
|
||
"enable_runner",
|
||
"enable_github_hosted_runner",
|
||
"switch_github_primary"
|
||
]
|
||
}
|
||
],
|
||
"next_collection_candidate": {
|
||
"order": 1,
|
||
"lane_id": "s4_9_gitea_inventory_owner_attestation_response",
|
||
"display_status": "next_owner_response_required",
|
||
"source_contract": "gitea_inventory_owner_attestation_response_v1",
|
||
"required_packet": "docs/security/GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.md",
|
||
"required_response_template_count": 5,
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"minimum_response": [
|
||
"public-only/local gap disposition",
|
||
"org/user endpoint disposition",
|
||
"110 adjacent source scope",
|
||
"canonical owner",
|
||
"legacy/inaccessible disposition"
|
||
],
|
||
"awooop_display_mode": "display_next_collection_item_only",
|
||
"why_next": "S4.9 是後續 GitHub target、refs truth 與 workflow / secret parity 判定的前置 scope / canonical owner 來源;未收到前不得推進後續 source-control owner response 接受狀態。",
|
||
"blocked_until_received": true,
|
||
"execution_authorized": false,
|
||
"not_approval": true,
|
||
"still_forbidden": [
|
||
"store_token_value",
|
||
"write_gitea_repo",
|
||
"sync_refs",
|
||
"switch_github_primary"
|
||
]
|
||
},
|
||
"latest_local_validation": {
|
||
"status": "repo_snapshot_guard_pass",
|
||
"date": "2026-06-12",
|
||
"scope": "repo_snapshot_only",
|
||
"command": "python3 scripts/security/source-control-owner-response-guard.py --root .",
|
||
"result": "SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK",
|
||
"validated_lanes": [
|
||
"s4_9_gitea_inventory_owner_attestation_response",
|
||
"s4_10_github_target_owner_decision_response",
|
||
"s4_11_ref_truth_owner_response",
|
||
"s4_12_workflow_secret_name_owner_response"
|
||
],
|
||
"received_response_count": 0,
|
||
"accepted_response_count": 0,
|
||
"runtime_actions_authorized": false,
|
||
"repo_or_refs_actions_authorized": false,
|
||
"workflow_or_secret_actions_authorized": false,
|
||
"not_authorization": true
|
||
},
|
||
"forbidden_actions": [
|
||
"runtime_execution",
|
||
"store_token_or_secret_value",
|
||
"use_write_token",
|
||
"create_repo",
|
||
"change_repo_visibility",
|
||
"write_gitea_repo",
|
||
"sync_refs",
|
||
"delete_refs",
|
||
"force_push",
|
||
"modify_workflow_or_secret",
|
||
"enable_runner",
|
||
"enable_github_hosted_runner",
|
||
"switch_github_primary",
|
||
"add_action_button"
|
||
]
|
||
}
|