{ "schema_version": "gitea_inventory_owner_attestation_response_v1", "status": "draft_waiting_owner_response", "date": "2026-06-04", "mode": "owner_response_intake_only", "runtime_execution_authorized": false, "source_contract": "gitea_inventory_coverage_attestation_v1", "target_contract": "gitea_repo_inventory_v1", "source_indexes": [ "docs/security/gitea-inventory-coverage-attestation.snapshot.json", "docs/security/GITEA-INVENTORY-COVERAGE-ATTESTATION.md", "docs/security/gitea-authenticated-inventory-export-request.snapshot.json", "docs/security/gitea-authenticated-inventory-import-acceptance.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": { "owner_response_status": "waiting_owner_response", "required_response_item_count": 5, "received_response_count": 0, "accepted_response_count": 0, "rejected_response_count": 0, "response_template_count": 5, "owner_response_template_status_count": 5, "owner_response_audit_event_template_count": 3, "owner_response_redaction_example_count": 5, "owner_response_display_section_count": 8, "owner_response_request_packet_count": 1, "owner_response_collection_check_count": 6, "owner_response_intake_handoff_queue_count": 5, "owner_response_intake_handoff_queue_ready_count": 0, "owner_response_intake_handoff_queue_received_count": 0, "owner_response_intake_handoff_queue_accepted_count": 0, "owner_response_intake_handoff_queue_runtime_gate_count": 0, "owner_response_intake_handoff_queue_raw_payload_allowed": false, "owner_response_intake_handoff_queue_action_buttons_allowed": false, "owner_response_metadata_intake_field_count": 6, "owner_response_metadata_intake_required_count": 6, "owner_response_metadata_intake_filled_count": 0, "owner_response_metadata_intake_received_count": 0, "owner_response_metadata_intake_accepted_count": 0, "owner_response_metadata_intake_runtime_gate_count": 0, "owner_response_metadata_intake_redacted_ref_required": true, "owner_response_metadata_intake_raw_payload_allowed": false, "owner_response_metadata_intake_secret_plaintext_allowed": false, "owner_response_metadata_intake_action_buttons_allowed": false, "intake_preflight_check_count": 6, "intake_outcome_lane_count": 5, "acceptance_check_count": 8, "rejection_rule_count": 10, "token_value_collection_allowed": false, "raw_secret_allowed": false, "repo_write_allowed": false, "refs_sync_allowed": false, "github_primary_switch_authorized": false, "action_buttons_allowed": false }, "response_templates": [ { "template_id": "response-public-only-vs-local-gitea-gap", "attestation_item_id": "public_only_vs_local_gitea_gap", "title": "public-only 與本機 Gitea remote 覆蓋缺口回覆", "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "affected_repos", "evidence_refs", "followup_owner" ], "acceptable_decisions": [ "in_scope", "out_of_scope", "legacy_archived", "external_system", "inaccessible_requires_followup", "unknown_requires_more_evidence" ], "minimum_evidence_refs": [ "docs/security/gitea-repo-inventory.snapshot.json", "docs/security/local-git-remote-inventory.snapshot.json" ], "acceptance_criteria": [ "必須逐項說明 `wooo/clawbot-v5` 與 `wooo/wooo-aiops` 是否屬本輪 inventory / migration scope", "若標示 out_of_scope、legacy_archived 或 external_system,必須附 owner 理由", "若標示 in_scope,必須指定後續 repo owner 與 GitHub target review owner" ], "rejection_conditions": [ "只回覆整體同意但沒有逐 repo decision", "要求直接建立 GitHub repo、sync refs 或切 GitHub primary", "貼出 token、credential、私有 clone URL 或未脫敏截圖" ], "allowed_outputs": [ "更新 attestation snapshot 的 read-only decision 欄位", "更新 migration matrix 與 decision table 的 scope 欄位", "維持 gitea_repo_inventory_v1.status=partial" ], "execution_authorized": false }, { "template_id": "response-org-user-endpoint-identity", "attestation_item_id": "org_user_endpoint_identity", "title": "Gitea `wooo` org/user endpoint 身分回覆", "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "canonical_namespace", "evidence_refs", "followup_owner" ], "acceptable_decisions": [ "in_scope", "out_of_scope", "inaccessible_requires_followup", "unknown_requires_more_evidence" ], "minimum_evidence_refs": [ "docs/security/gitea-org-repo-inventory-blocked.snapshot.json", "docs/security/gitea-authenticated-inventory-export-request.snapshot.json" ], "acceptance_criteria": [ "必須說明 `wooo` 在 Gitea 中應以 user、org 或兩者盤點", "必須標示 canonical endpoint 或要求管理者補脫敏 evidence", "不得把 org endpoint 404 自動解釋為不存在 private/internal repos" ], "rejection_conditions": [ "只說 public API 查不到就當完成", "要求使用 write/admin token", "提供未脫敏 API response 或 token value" ], "allowed_outputs": [ "更新 Gitea inventory query mode 的待判定說明", "更新 AwoooP review lane 的 endpoint scope 顯示", "維持 read-only / approval-only 狀態" ], "execution_authorized": false }, { "template_id": "response-internal-110-adjacent-scope", "attestation_item_id": "internal_110_adjacent_scope", "title": "110 內部相鄰來源 scope 回覆", "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "affected_sources", "evidence_refs", "followup_owner" ], "acceptable_decisions": [ "in_scope", "out_of_scope", "legacy_archived", "external_system", "inaccessible_requires_followup", "unknown_requires_more_evidence" ], "minimum_evidence_refs": [ "docs/security/git-remote-refs-bitan-tsenyang.snapshot.json", "docs/security/git-remote-refs-wooo-infra-config.snapshot.json", "docs/security/local-git-remote-inventory.snapshot.json" ], "acceptance_criteria": [ "必須逐項說明 `bitan-pharmacy`、`root/momo-pro-system`、`tsenyang-website`、`wooo/wooo-infra-config` 是否納入本輪 scope", "若屬外部或 legacy,必須指定後續 owner 或排除理由", "若屬 in_scope,必須標示是否需要後續 refs truth / workflow-secret parity" ], "rejection_conditions": [ "用單一句話排除所有 110 adjacent sources", "把內部相鄰來源直接推到 GitHub primary readiness", "要求 fetch/push/delete refs" ], "allowed_outputs": [ "更新 source-control migration matrix 的 scope 欄位", "更新 primary readiness blocker 說明", "建立 request_more_evidence lane" ], "execution_authorized": false }, { "template_id": "response-repo-owner-canonical-scope", "attestation_item_id": "repo_owner_canonical_scope", "title": "repo owner / canonical / GitHub target scope 回覆", "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "repo_owner", "canonical_source", "github_target_candidate", "visibility_review_owner", "evidence_refs" ], "acceptable_decisions": [ "in_scope", "out_of_scope", "external_system", "unknown_requires_more_evidence" ], "minimum_evidence_refs": [ "docs/security/github-target-decision.snapshot.json", "docs/security/source-control-approval-board.snapshot.json", "docs/security/local-repo-canonical-ewoooc-momo.snapshot.json" ], "acceptance_criteria": [ "每個 in-scope repo 必須有 owner、canonical source、GitHub target candidate 與 visibility review owner", "若 GitHub target 目前 not_found_or_private,必須維持 pending approval,不得自動建立", "若 canonical 關係未定,必須標示 unknown_requires_more_evidence" ], "rejection_conditions": [ "把 not_found_or_private 當成可建立 repo 的批准", "沒有 visibility / owner 責任人", "要求修改 repo visibility 或建立 GitHub repo" ], "allowed_outputs": [ "更新 canonical decision table", "更新 GitHub target review package", "更新 primary readiness gate 的 owner/canonical blocker" ], "execution_authorized": false }, { "template_id": "response-legacy-or-inaccessible-disposition", "attestation_item_id": "legacy_or_inaccessible_repo_disposition", "title": "legacy / inaccessible repo disposition 回覆", "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "affected_repos_or_sources", "disposition", "evidence_refs", "followup_owner" ], "acceptable_decisions": [ "out_of_scope", "legacy_archived", "external_system", "inaccessible_requires_followup", "unknown_requires_more_evidence" ], "minimum_evidence_refs": [ "docs/security/gitea-authenticated-inventory-import-acceptance.snapshot.json", "docs/security/source-control-primary-readiness-gate.snapshot.json" ], "acceptance_criteria": [ "每個 legacy / inaccessible / external repo 必須有 disposition 與 owner 理由", "inaccessible_requires_followup 必須指定下一個 evidence owner", "unknown_requires_more_evidence 必須維持 blocker,不得進 primary readiness" ], "rejection_conditions": [ "沒有列出受影響 repo 或 source", "把未出現在 payload 的 repo 自動視為已完成 inventory", "要求 archive/delete/disable Gitea repo" ], "allowed_outputs": [ "更新 legacy / inaccessible review lane", "更新 status rollup 的 blocked reason", "維持 source-control primary readiness blocker" ], "execution_authorized": false } ], "owner_response_template_statuses": [ { "template_id": "response-public-only-vs-local-gitea-gap", "attestation_item_id": "public_only_vs_local_gitea_gap", "display_order": 1, "collection_status": "waiting_owner_response", "request_status": "request_ready_not_sent", "received_response_count": 0, "accepted_response_count": 0, "rejected_response_count": 0, "latest_outcome_lane": "keep_waiting_owner_response", "next_owner_action": "Owner 需逐項判定 `wooo/clawbot-v5` 與 `wooo/wooo-aiops` 是否屬本輪 inventory / migration scope,並只引用脫敏 evidence refs。", "awooop_display_mode": "display_template_status_only", "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_without_owner_response", "mark_accepted_without_acceptance_checks", "execute_inventory", "create_github_repo", "sync_refs", "switch_github_primary" ] }, { "template_id": "response-org-user-endpoint-identity", "attestation_item_id": "org_user_endpoint_identity", "display_order": 2, "collection_status": "waiting_owner_response", "request_status": "request_ready_not_sent", "received_response_count": 0, "accepted_response_count": 0, "rejected_response_count": 0, "latest_outcome_lane": "keep_waiting_owner_response", "next_owner_action": "Owner 需說明 `wooo` 在 Gitea 中應以 user、org 或兩者盤點,且不得把 404 當成 private/internal repo 不存在。", "awooop_display_mode": "display_template_status_only", "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_without_owner_response", "mark_accepted_without_acceptance_checks", "store_token_value", "write_gitea_repo", "sync_refs", "switch_github_primary" ] }, { "template_id": "response-internal-110-adjacent-scope", "attestation_item_id": "internal_110_adjacent_scope", "display_order": 3, "collection_status": "waiting_owner_response", "request_status": "request_ready_not_sent", "received_response_count": 0, "accepted_response_count": 0, "rejected_response_count": 0, "latest_outcome_lane": "keep_waiting_owner_response", "next_owner_action": "Owner 需逐項判定 `bitan-pharmacy`、`root/momo-pro-system`、`tsenyang-website`、`wooo/wooo-infra-config` 是否納入本輪 scope。", "awooop_display_mode": "display_template_status_only", "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_without_owner_response", "mark_accepted_without_acceptance_checks", "create_github_repo", "sync_refs", "delete_refs", "switch_github_primary" ] }, { "template_id": "response-repo-owner-canonical-scope", "attestation_item_id": "repo_owner_canonical_scope", "display_order": 4, "collection_status": "waiting_owner_response", "request_status": "request_ready_not_sent", "received_response_count": 0, "accepted_response_count": 0, "rejected_response_count": 0, "latest_outcome_lane": "keep_waiting_owner_response", "next_owner_action": "Owner 需為 in-scope repo 指定 owner、canonical source、GitHub target candidate 與 visibility review owner。", "awooop_display_mode": "display_template_status_only", "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_without_owner_response", "mark_accepted_without_acceptance_checks", "create_github_repo", "change_visibility", "sync_refs", "switch_github_primary" ] }, { "template_id": "response-legacy-or-inaccessible-disposition", "attestation_item_id": "legacy_or_inaccessible_repo_disposition", "display_order": 5, "collection_status": "waiting_owner_response", "request_status": "request_ready_not_sent", "received_response_count": 0, "accepted_response_count": 0, "rejected_response_count": 0, "latest_outcome_lane": "keep_waiting_owner_response", "next_owner_action": "Owner 需對 legacy、inaccessible 或 external repo 留下 disposition、理由與後續 owner。", "awooop_display_mode": "display_template_status_only", "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_without_owner_response", "mark_accepted_without_acceptance_checks", "archive_repo", "delete_repo", "disable_gitea_repo", "switch_github_primary" ] } ], "owner_response_intake_handoff_queue": [ { "handoff_lane_id": "publicGap", "display_order": 1, "source_template_id": "response-public-only-vs-local-gitea-gap", "template_label": "D1", "handoff_status": "waiting_owner_response_metadata", "required_owner_field_count": 6, "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "affected_repos", "evidence_refs", "followup_owner" ], "current_blocker": "缺少 public-only / local gap 的逐 repo owner 判定。", "next_safe_step": "只等待負責人提供脫敏 metadata pointer;不得收 raw response 或啟動 repo / refs 動作。", "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_handoff_queue", "mark_accepted_from_handoff_queue", "store_owner_response_raw_body", "create_github_repo", "sync_refs", "switch_github_primary" ] }, { "handoff_lane_id": "namespaceIdentity", "display_order": 2, "source_template_id": "response-org-user-endpoint-identity", "template_label": "D2", "handoff_status": "waiting_owner_response_metadata", "required_owner_field_count": 6, "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "canonical_namespace", "evidence_refs", "followup_owner" ], "current_blocker": "缺少 Gitea `wooo` user / org canonical namespace 判定。", "next_safe_step": "只等待負責人提供 canonical namespace 與脫敏 evidence ref;不得使用 write/admin token。", "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_handoff_queue", "mark_accepted_from_handoff_queue", "store_owner_response_raw_body", "store_token_value", "write_gitea_repo", "switch_github_primary" ] }, { "handoff_lane_id": "adjacentScope", "display_order": 3, "source_template_id": "response-internal-110-adjacent-scope", "template_label": "D3", "handoff_status": "waiting_owner_response_metadata", "required_owner_field_count": 6, "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "affected_sources", "evidence_refs", "followup_owner" ], "current_blocker": "缺少 110 相鄰來源逐項 scope 判定。", "next_safe_step": "只等待 owner 標示來源是否 in-scope、legacy、external 或需補證;不得 fetch、push 或刪 refs。", "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_handoff_queue", "mark_accepted_from_handoff_queue", "store_owner_response_raw_body", "fetch_refs", "delete_refs", "switch_github_primary" ] }, { "handoff_lane_id": "canonicalOwner", "display_order": 4, "source_template_id": "response-repo-owner-canonical-scope", "template_label": "D4", "handoff_status": "waiting_owner_response_metadata", "required_owner_field_count": 8, "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "repo_owner", "canonical_source", "github_target_candidate", "visibility_review_owner", "evidence_refs" ], "current_blocker": "缺少 repo owner、canonical source、GitHub target candidate 與 visibility review owner。", "next_safe_step": "只等待負責人補齊 owner / canonical / visibility metadata;不得建立 GitHub repo 或改 visibility。", "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_handoff_queue", "mark_accepted_from_handoff_queue", "store_owner_response_raw_body", "create_github_repo", "change_repo_visibility", "switch_github_primary" ] }, { "handoff_lane_id": "legacyDisposition", "display_order": 5, "source_template_id": "response-legacy-or-inaccessible-disposition", "template_label": "D5", "handoff_status": "waiting_owner_response_metadata", "required_owner_field_count": 7, "required_owner_fields": [ "owner_role_or_team", "decision", "decision_reason", "affected_repos_or_sources", "disposition", "evidence_refs", "followup_owner" ], "current_blocker": "缺少 legacy、inaccessible 或 external repo disposition 與後續 owner。", "next_safe_step": "只等待負責人補 disposition metadata;不得 archive、delete 或停用 Gitea repo。", "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_handoff_queue", "mark_accepted_from_handoff_queue", "store_owner_response_raw_body", "archive_repo", "delete_repo", "disable_gitea_repo" ] } ], "owner_response_metadata_intake_envelope": [ { "field_id": "ownerRoleTeam", "display_order": 1, "source_required_field": "owner_role_or_team", "field_label": "負責人角色 / 團隊", "field_status": "waiting_owner_response_metadata", "intake_mode": "redacted_metadata_only", "required": true, "filled_count": 0, "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "redacted_reference_required": true, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_metadata_envelope", "mark_accepted_from_metadata_envelope", "store_owner_response_raw_body", "store_secret_value" ] }, { "field_id": "decision", "display_order": 2, "source_required_field": "decision", "field_label": "判定", "field_status": "waiting_owner_response_metadata", "intake_mode": "controlled_value_only", "required": true, "filled_count": 0, "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "redacted_reference_required": true, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_metadata_envelope", "mark_accepted_from_metadata_envelope", "override_allowed_decisions", "open_runtime_gate" ] }, { "field_id": "decisionReason", "display_order": 3, "source_required_field": "decision_reason", "field_label": "判定理由", "field_status": "waiting_owner_response_metadata", "intake_mode": "redacted_metadata_only", "required": true, "filled_count": 0, "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "redacted_reference_required": true, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_metadata_envelope", "mark_accepted_from_metadata_envelope", "store_owner_response_raw_body", "treat_reason_as_approval" ] }, { "field_id": "affectedScope", "display_order": 4, "source_required_field": "affected_scope", "field_label": "受影響範圍", "field_status": "waiting_owner_response_metadata", "intake_mode": "scope_pointer_only", "required": true, "filled_count": 0, "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "redacted_reference_required": true, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_metadata_envelope", "mark_accepted_from_metadata_envelope", "create_or_delete_repo", "sync_refs" ] }, { "field_id": "redactedEvidenceRefs", "display_order": 5, "source_required_field": "evidence_refs", "field_label": "脫敏證據參照", "field_status": "waiting_owner_response_metadata", "intake_mode": "redacted_reference_only", "required": true, "filled_count": 0, "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "redacted_reference_required": true, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_metadata_envelope", "mark_accepted_from_metadata_envelope", "store_unredacted_evidence", "store_secret_value" ] }, { "field_id": "followupOwner", "display_order": 6, "source_required_field": "followup_owner", "field_label": "後續負責人", "field_status": "waiting_owner_response_metadata", "intake_mode": "owner_pointer_only", "required": true, "filled_count": 0, "received_response_count": 0, "accepted_response_count": 0, "runtime_gate_count": 0, "redacted_reference_required": true, "raw_payload_allowed": false, "secret_plaintext_allowed": false, "action_buttons_allowed": false, "execution_authorized": false, "not_approval": true, "still_forbidden": [ "mark_received_from_metadata_envelope", "mark_accepted_from_metadata_envelope", "assign_runtime_owner_without_review", "open_runtime_gate" ] } ], "owner_response_audit_event_templates": [ { "event_template_id": "audit-owner-response-request-shown", "display_order": 1, "event_status": "template_only_not_emitted", "trigger": "AwoooP 顯示 S4.9 owner response request packet 時。", "purpose": "只記錄 request packet 已可顯示或已顯示的 metadata,不代表 owner response 已收到。", "allowed_metadata_fields": [ "event_template_id", "request_id", "requested_template_ids", "target_contract", "displayed_by_role", "displayed_at_taipei", "source_document_ref" ], "forbidden_payloads": [ "owner_response_raw_body", "token_value", "secret_value", "private_key", "cookie_or_session", "db_dump", "git_object_pack", "repo_archive", "execution_request_payload" ], "emitted_event_count": 0, "stored_raw_payload_allowed": false, "awooop_display_mode": "display_audit_template_only", "execution_authorized": false, "not_approval": true }, { "event_template_id": "audit-owner-response-received-metadata", "display_order": 2, "event_status": "template_only_not_emitted", "trigger": "Owner 提供 S4.9 response metadata pointer 時。", "purpose": "只記錄 response 已收到的脫敏 metadata pointer;不得保存 response 原文或敏感 payload。", "allowed_metadata_fields": [ "event_template_id", "template_id", "attestation_item_id", "owner_role_or_team", "received_at_taipei", "redacted_evidence_refs", "source_document_ref" ], "forbidden_payloads": [ "owner_response_raw_body", "token_value", "secret_value", "private_key", "cookie_or_session", "private_clone_url_credential", "db_dump", "git_object_pack", "repo_archive", "execution_request_payload" ], "emitted_event_count": 0, "stored_raw_payload_allowed": false, "awooop_display_mode": "display_audit_template_only", "execution_authorized": false, "not_approval": true }, { "event_template_id": "audit-owner-response-outcome-classified", "display_order": 3, "event_status": "template_only_not_emitted", "trigger": "AwoooP 依 collection checks、preflight checks 與 outcome lanes 分類 S4.9 response 時。", "purpose": "只記錄分類結果與下一步提示;不得把 outcome lane 當成 approval 或 execution authorization。", "allowed_metadata_fields": [ "event_template_id", "template_id", "collection_status", "latest_outcome_lane", "next_owner_action", "classified_at_taipei", "classified_by_role" ], "forbidden_payloads": [ "owner_response_raw_body", "token_value", "secret_value", "private_key", "cookie_or_session", "db_dump", "git_object_pack", "repo_archive", "repo_or_refs_execution_request", "workflow_secret_runner_execution_request" ], "emitted_event_count": 0, "stored_raw_payload_allowed": false, "awooop_display_mode": "display_audit_template_only", "execution_authorized": false, "not_approval": true } ], "owner_response_redaction_examples": [ { "example_id": "redaction-existing-doc-ref", "display_order": 1, "example_status": "template_example_only", "category": "repo_existing_document_reference", "safe_response_shape": [ "template_id=response-public-only-vs-local-gitea-gap", "decision=in_scope", "evidence_refs=[docs/security/gitea-repo-inventory.snapshot.json, docs/security/local-git-remote-inventory.snapshot.json]", "decision_reason=引用既有 snapshot 的 repo slug 與 coverage gap,不貼 API raw body" ], "required_redactions": [ "外部 evidence 只保留 repo 內文件路徑或 snapshot 路徑", "若引用外部清冊,先轉為 redacted metadata pointer", "不得貼完整 API response body" ], "forbidden_raw_values": [ "token_value", "secret_value", "private_clone_url_credential", "api_response_raw_body" ], "stored_raw_payload_allowed": false, "awooop_display_mode": "display_redaction_example_only", "execution_authorized": false, "not_approval": true }, { "example_id": "redaction-owner-decision-metadata", "display_order": 2, "example_status": "template_example_only", "category": "owner_decision_metadata", "safe_response_shape": [ "owner_role_or_team=migration-owner", "decision=unknown_requires_more_evidence", "followup_owner=security-commander", "evidence_refs=[docs/security/GITEA-AUTHENTICATED-INVENTORY-EXPORT-REQUEST.md]" ], "required_redactions": [ "只寫角色或團隊,不寫個人密碼、session 或 API token", "decision_reason 不得包含可重播操作步驟或憑證", "followup_owner 只代表責任人,不代表 approval" ], "forbidden_raw_values": [ "password", "cookie", "session", "one_time_code", "approval_phrase_as_execution_authorization" ], "stored_raw_payload_allowed": false, "awooop_display_mode": "display_redaction_example_only", "execution_authorized": false, "not_approval": true }, { "example_id": "redaction-private-url-metadata", "display_order": 3, "example_status": "template_example_only", "category": "private_url_or_remote_metadata", "safe_response_shape": [ "affected_repos_or_sources=[wooo/clawbot-v5]", "source_host=gitea-local", "credential_present=true", "credential_value_stored=false" ], "required_redactions": [ "完整 clone URL 只能保留 host、namespace、repo slug 與 credential_present=true/false", "若 URL 含 userinfo、query token 或 header,必須移除值", "不得把 private URL 當成可 fetch 或可 push 指令" ], "forbidden_raw_values": [ "https_userinfo_credential", "query_token", "authorization_header", "ssh_private_key", "git_remote_with_secret" ], "stored_raw_payload_allowed": false, "awooop_display_mode": "display_redaction_example_only", "execution_authorized": false, "not_approval": true }, { "example_id": "redaction-api-export-summary", "display_order": 4, "example_status": "template_example_only", "category": "api_or_admin_export_summary", "safe_response_shape": [ "export_source=read_only_token_api_or_redacted_admin_export", "repo_count_observed=number_only", "token_present=true", "token_value_stored=false" ], "required_redactions": [ "只保留 count、source type、redaction status 與 evidence ref", "API request/response header、body 與 token value 不得保存", "DB dump、git object pack 與 repo archive 必須拒收或隔離" ], "forbidden_raw_values": [ "api_request_header", "api_response_raw_body", "db_dump", "git_object_pack", "repo_archive" ], "stored_raw_payload_allowed": false, "awooop_display_mode": "display_redaction_example_only", "execution_authorized": false, "not_approval": true }, { "example_id": "redaction-quarantine-pointer", "display_order": 5, "example_status": "template_example_only", "category": "uncertain_sensitive_payload", "safe_response_shape": [ "collection_status=quarantine_sensitive_payload", "quarantine_reason=疑似含敏感值,尚未人工脫敏", "raw_payload_stored_in_repo=false", "next_owner_action=request_redacted_metadata_pointer" ], "required_redactions": [ "不確定是否含敏感值時先產生 quarantine pointer", "只留下原因、來源類型、責任 owner 與下一步,不留下原文", "解除 quarantine 前不得更新 received / accepted count" ], "forbidden_raw_values": [ "owner_response_raw_body", "secret_screenshot", "credential_file", "execution_request_payload", "unredacted_export" ], "stored_raw_payload_allowed": false, "awooop_display_mode": "display_redaction_example_only", "execution_authorized": false, "not_approval": true } ], "owner_response_display_sections": [ { "section_id": "display-owner-response-summary", "display_order": 1, "section_status": "display_contract_only", "source_field": "summary", "purpose": "顯示 owner response 仍為 waiting、received/accepted/rejected 皆為 0,以及所有 write / primary / action button flags 皆為 false。", "allowed_ui_actions": [ "display_counts", "display_false_flags", "display_waiting_state" ], "forbidden_ui_actions": [ "mark_received", "mark_accepted", "enable_action_button" ], "execution_authorized": false, "not_approval": true }, { "section_id": "display-owner-response-request-packet", "display_order": 2, "section_status": "display_contract_only", "source_field": "owner_response_request_packet", "purpose": "顯示 owner 需要回覆的五個 templates、允許欄位、evidence ref rules 與 forbidden payloads。", "allowed_ui_actions": [ "display_requested_templates", "display_allowed_fields", "display_forbidden_payloads" ], "forbidden_ui_actions": [ "send_request_as_approval", "start_inventory", "sync_refs" ], "execution_authorized": false, "not_approval": true }, { "section_id": "display-template-status-ledger", "display_order": 3, "section_status": "display_contract_only", "source_field": "owner_response_template_statuses", "purpose": "逐 template 顯示 waiting_owner_response、request_ready_not_sent 與 0/0/0 計數。", "allowed_ui_actions": [ "display_per_template_status", "display_next_owner_action", "display_zero_counts" ], "forbidden_ui_actions": [ "treat_request_ready_as_sent", "accept_partial_template_response", "advance_s4_13_candidate" ], "execution_authorized": false, "not_approval": true }, { "section_id": "display-audit-event-templates", "display_order": 4, "section_status": "display_contract_only", "source_field": "owner_response_audit_event_templates", "purpose": "顯示 request shown、response metadata received 與 outcome classified 的脫敏 audit template,且 emitted count 仍為 0。", "allowed_ui_actions": [ "display_audit_template_ids", "display_allowed_metadata_fields", "display_emitted_count_zero" ], "forbidden_ui_actions": [ "store_raw_payload", "emit_production_audit_event", "treat_audit_template_as_response" ], "execution_authorized": false, "not_approval": true }, { "section_id": "display-redaction-examples", "display_order": 5, "section_status": "display_contract_only", "source_field": "owner_response_redaction_examples", "purpose": "顯示 owner 回覆時可用的脫敏 evidence 形狀與 forbidden raw values。", "allowed_ui_actions": [ "display_safe_response_shape", "display_required_redactions", "display_forbidden_raw_values" ], "forbidden_ui_actions": [ "store_example_as_response", "store_raw_payload", "treat_example_as_ingestion" ], "execution_authorized": false, "not_approval": true }, { "section_id": "display-collection-checks", "display_order": 6, "section_status": "display_contract_only", "source_field": "owner_response_collection_checks", "purpose": "顯示 request / received / accepted 必須分離,以及只收 read-only markdown、redacted metadata pointer 或補證請求。", "allowed_ui_actions": [ "display_collection_checklist", "display_failure_lane", "display_not_approval" ], "forbidden_ui_actions": [ "treat_request_sent_as_received", "treat_owner_wording_as_approval", "enable_runtime_gate" ], "execution_authorized": false, "not_approval": true }, { "section_id": "display-preflight-and-outcome-lanes", "display_order": 7, "section_status": "display_contract_only", "source_field": "intake_preflight_checks,intake_outcome_lanes", "purpose": "顯示可審、補證、隔離、拒收或等待的只讀分類結果,不變更 response count。", "allowed_ui_actions": [ "display_preflight_checks", "display_outcome_lanes", "display_waiting_state" ], "forbidden_ui_actions": [ "mark_preflight_pass_as_accepted", "execute_inventory", "switch_github_primary" ], "execution_authorized": false, "not_approval": true }, { "section_id": "display-acceptance-and-rejection-rules", "display_order": 8, "section_status": "display_contract_only", "source_field": "acceptance_checks,rejection_rules,forbidden_actions", "purpose": "顯示接受前需要通過的規則、拒收條件與仍禁止事項。", "allowed_ui_actions": [ "display_acceptance_checks", "display_rejection_rules", "display_forbidden_actions" ], "forbidden_ui_actions": [ "auto_accept_response", "write_gitea_repo", "create_github_repo" ], "execution_authorized": false, "not_approval": true } ], "owner_response_request_packet": { "request_id": "s4_9_gitea_owner_attestation_response_request", "display_status": "ready_to_request_owner_response", "requested_packet": "docs/security/GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.md", "required_response_item_count": 5, "requested_template_ids": [ "response-public-only-vs-local-gitea-gap", "response-org-user-endpoint-identity", "response-internal-110-adjacent-scope", "response-repo-owner-canonical-scope", "response-legacy-or-inaccessible-disposition" ], "owner_instruction_summary": "請 owner 只依 S4.9 五個 templates 回覆 scope / canonical / disposition 判定,並只引用脫敏 evidence refs;不要貼 token、secret、DB dump、git object 或任何可執行 payload。", "allowed_response_fields": [ "owner_role_or_team", "decision", "decision_reason", "affected_repos_or_sources_or_namespace", "canonical_source_or_namespace", "github_target_candidate", "visibility_review_owner", "evidence_refs", "followup_owner" ], "evidence_ref_rules": [ "只允許 repo 內既有文件或 snapshot 路徑", "owner 外部 evidence 必須先脫敏並只提供 metadata pointer", "不得提供 token value、secret value、private clone URL credential、cookie、session 或截圖中的敏感值", "不確定是否含敏感值時先走 quarantine,不得直接貼入 response" ], "forbidden_payloads": [ "token_value", "secret_value", "private_key", "cookie_or_session", "db_dump", "git_object_pack", "repo_archive", "write_or_admin_api_request", "repo_or_refs_execution_request", "workflow_secret_runner_execution_request" ], "allowed_submission_modes": [ "read_only_markdown_response", "redacted_metadata_pointer", "request_more_evidence" ], "awooop_display_mode": "display_owner_response_request_only", "execution_authorized": false, "not_approval": true, "still_forbidden": [ "store_token_value", "write_gitea_repo", "create_github_repo", "sync_refs", "switch_github_primary" ] }, "owner_response_collection_checks": [ { "check_id": "collection-request-packet-displayed", "display_order": 1, "title": "已顯示 owner response request packet", "required": true, "pass_condition": "AwoooP 必須只顯示 `owner_response_request_packet` 的 5 個 template、允許欄位、脫敏 evidence 規則與禁止 payload,不得附加執行要求。", "failure_lane": "keep_waiting_owner_response", "awooop_display": "display_request_packet_only", "execution_authorized": false, "not_approval": true }, { "check_id": "collection-read-only-submission-mode", "display_order": 2, "title": "收件模式維持 read-only", "required": true, "pass_condition": "owner 只能用 read-only markdown response、redacted metadata pointer 或 request_more_evidence;不得提交 token、repo archive、git object pack、DB dump 或 API execution request。", "failure_lane": "quarantine_sensitive_payload", "awooop_display": "display_read_only_submission_only", "execution_authorized": false, "not_approval": true }, { "check_id": "collection-five-template-tracking", "display_order": 3, "title": "五個 templates 分開追蹤", "required": true, "pass_condition": "S4.9 五個 requested_template_ids 必須逐項追蹤 received / accepted 狀態;不可用單一整體同意取代逐項 response。", "failure_lane": "request_more_evidence", "awooop_display": "display_per_template_tracking", "execution_authorized": false, "not_approval": true }, { "check_id": "collection-redacted-evidence-only", "display_order": 4, "title": "只收脫敏 evidence refs", "required": true, "pass_condition": "收件內容只能包含 repo 內路徑或脫敏 metadata pointer;任何不確定是否含敏感值的資料都先進 quarantine。", "failure_lane": "quarantine_sensitive_payload", "awooop_display": "display_redacted_evidence_only", "execution_authorized": false, "not_approval": true }, { "check_id": "collection-no-approval-language", "display_order": 5, "title": "不得把回覆語意升級成批准", "required": true, "pass_condition": "即使 owner response 文字包含同意、OK 或可進行,也只能視為 scope / canonical / disposition response,不得視為 inventory、migration、refs sync 或 GitHub primary approval。", "failure_lane": "reject_execution_request", "awooop_display": "display_scope_response_only", "execution_authorized": false, "not_approval": true }, { "check_id": "collection-audit-metadata-only", "display_order": 6, "title": "只記錄 audit metadata", "required": true, "pass_condition": "AwoooP 只能記錄 request shown、response received、template id、owner role/team、redacted evidence refs 與 outcome lane;不得保存 token value、secret value 或可還原 credential 的內容。", "failure_lane": "quarantine_sensitive_payload", "awooop_display": "display_audit_metadata_only", "execution_authorized": false, "not_approval": true } ], "intake_preflight_checks": [ { "check_id": "preflight-known-attestation-item", "display_order": 1, "title": "回覆必須對應 S4.7 已知 item", "required": true, "pass_condition": "`attestation_item_id` 必須是 S4.7 五個 coverage attestation items 之一。", "failure_lane": "request_owner_correction", "awooop_display": "request_more_evidence", "execution_authorized": false }, { "check_id": "preflight-required-owner-fields", "display_order": 2, "title": "必填欄位完整", "required": true, "pass_condition": "每筆 response 必須有 owner role/team、decision、decision_reason、受影響 scope、evidence_refs 與 followup_owner。", "failure_lane": "request_more_evidence", "awooop_display": "request_more_evidence", "execution_authorized": false }, { "check_id": "preflight-allowed-decision", "display_order": 3, "title": "decision 在模板允許值內", "required": true, "pass_condition": "`decision` 必須落在對應 response template 的 acceptable_decisions。", "failure_lane": "request_owner_correction", "awooop_display": "request_more_evidence", "execution_authorized": false }, { "check_id": "preflight-redacted-evidence-only", "display_order": 4, "title": "只接受脫敏 evidence refs", "required": true, "pass_condition": "`evidence_refs` 只能指向 repo 內文件、snapshot 或 owner 提供的脫敏 metadata,不得含 token、secret、cookie、session、private key 或私有 URL 憑證。", "failure_lane": "quarantine_sensitive_payload", "awooop_display": "quarantine_sensitive_payload", "execution_authorized": false }, { "check_id": "preflight-no-execution-request", "display_order": 5, "title": "不得夾帶執行要求", "required": true, "pass_condition": "response 不得要求 Gitea/GitHub repo 寫入、repo 建立、visibility 修改、refs sync/delete/force-push、workflow/secret/runner 變更、scan 或 runtime action。", "failure_lane": "reject_execution_request", "awooop_display": "reject_execution_request", "execution_authorized": false }, { "check_id": "preflight-all-five-items-before-accepted", "display_order": 6, "title": "接受前需覆蓋五個 items", "required": true, "pass_condition": "S4.9 要被標示 accepted 前,五個 response templates 都必須收到可驗收 owner response;部分回覆只能維持 waiting 或 request_more_evidence。", "failure_lane": "keep_waiting_owner_response", "awooop_display": "ready_for_owner_review", "execution_authorized": false } ], "intake_outcome_lanes": [ { "lane_id": "ready_for_owner_review", "display_order": 1, "title": "可進 owner review", "when": "response 對應已知 S4.7 item、必填欄位完整、decision 在允許值內、evidence refs 已脫敏,且沒有執行要求。", "awooop_action": "display_ready_for_owner_review", "allowed_outputs": [ "顯示 ready for owner review", "把 response 保持在 review packet", "等待 reviewer 判斷是否進入 acceptance checks" ], "still_forbidden": [ "mark_response_accepted_without_acceptance_checks", "execute_inventory", "create_github_repo", "sync_refs", "switch_github_primary" ], "execution_authorized": false, "not_approval": true }, { "lane_id": "request_more_evidence", "display_order": 2, "title": "要求補證", "when": "response 缺必填欄位、decision 不在允許值內、scope 不明確,或只提供口頭同意 / 不完整 metadata。", "awooop_action": "display_request_more_evidence", "allowed_outputs": [ "顯示 request more evidence", "列出缺少欄位或需修正 decision", "維持 received / accepted response count 不變" ], "still_forbidden": [ "accept_partial_response", "execute_inventory", "create_github_repo", "sync_refs", "switch_github_primary" ], "execution_authorized": false, "not_approval": true }, { "lane_id": "quarantine_sensitive_payload", "display_order": 3, "title": "隔離敏感 payload", "when": "response 或 evidence refs 含 token、secret、cookie、session、private key、DB dump、git object pack、私有 URL 憑證或未脫敏截圖。", "awooop_action": "route_to_mirror_quarantine", "allowed_outputs": [ "顯示 quarantine required", "只保存隔離 metadata 與 redacted reason", "要求 owner 重新提供脫敏 evidence" ], "still_forbidden": [ "store_sensitive_value", "sanitize_and_accept_in_place", "execute_inventory", "sync_refs", "switch_github_primary" ], "execution_authorized": false, "not_approval": true }, { "lane_id": "reject_execution_request", "display_order": 4, "title": "拒收執行要求", "when": "response 要求 Gitea/GitHub 寫入、repo 建立、visibility 修改、refs sync/delete/force-push、workflow/secret/runner 變更、scan 或 runtime action。", "awooop_action": "reject_execution_request", "allowed_outputs": [ "顯示 rejected execution request", "保留拒收原因", "要求 owner 改交只讀 scope / evidence response" ], "still_forbidden": [ "run_requested_action", "create_github_repo", "write_gitea_repo", "sync_refs", "switch_github_primary" ], "execution_authorized": false, "not_approval": true }, { "lane_id": "keep_waiting_owner_response", "display_order": 5, "title": "維持等待 owner response", "when": "五個 response templates 尚未全部收到可驗收 response,或部分 response 仍在補證 / 隔離 / 拒收狀態。", "awooop_action": "keep_waiting_owner_response", "allowed_outputs": [ "顯示 waiting owner response", "顯示尚未覆蓋的 S4.7 items", "維持 S4.13 next_collection_candidate 指向 S4.9" ], "still_forbidden": [ "mark_s4_9_complete", "advance_s4_10_acceptance", "execute_inventory", "sync_refs", "switch_github_primary" ], "execution_authorized": false, "not_approval": true } ], "acceptance_checks": [ { "check_id": "maps_to_known_s4_7_item", "title": "回覆對應既有 S4.7 item", "required": true, "pass_condition": "`attestation_item_id` 必須對應 S4.7 的 5 個 item 之一", "failure_lane": "reject_unknown_attestation_item", "execution_authorized": false }, { "check_id": "decision_value_allowed", "title": "決策值在允許範圍內", "required": true, "pass_condition": "`decision` 必須是該 item 的 acceptable_decisions 之一", "failure_lane": "request_owner_correction", "execution_authorized": false }, { "check_id": "owner_reason_present", "title": "owner 理由存在", "required": true, "pass_condition": "每筆回覆都必須有 `decision_reason`,且能說明 scope 或 disposition", "failure_lane": "request_more_evidence", "execution_authorized": false }, { "check_id": "evidence_refs_redacted", "title": "evidence refs 已脫敏", "required": true, "pass_condition": "`evidence_refs` 只能指向 repo 內文件、snapshot 或 owner 提供的脫敏 metadata,不得含 secret value", "failure_lane": "quarantine_sensitive_payload", "execution_authorized": false }, { "check_id": "affected_scope_explicit", "title": "受影響 repo / namespace / source 明確", "required": true, "pass_condition": "回覆必須列出受影響 repo、namespace 或 110 adjacent source,不接受只寫整體同意", "failure_lane": "request_more_evidence", "execution_authorized": false }, { "check_id": "no_runtime_or_source_control_action", "title": "不含 runtime 或 source-control 執行要求", "required": true, "pass_condition": "回覆只允許更新文件、snapshot、matrix、decision table 與 readiness gate", "failure_lane": "reject_runtime_or_source_control_action", "execution_authorized": false }, { "check_id": "all_required_items_before_acceptance", "title": "接受前需覆蓋 5 個 items", "required": true, "pass_condition": "要把 S4.7 標示為 accepted 前,5 個 required response items 都必須有可驗收 owner response", "failure_lane": "keep_waiting_owner_response", "execution_authorized": false }, { "check_id": "primary_readiness_still_blocked", "title": "GitHub primary readiness 仍維持 blocked", "required": true, "pass_condition": "即使 owner response 通過,也只能更新 readiness blocker 說明,不得將 primary_ready_count 改為大於 0", "failure_lane": "reject_primary_cutover_approval", "execution_authorized": false } ], "rejection_rules": [ "回覆含 token value、PAT、cookie、session、CSRF token 或 partial token 時必須拒收。", "回覆含 webhook secret、repository secret value、runner registration token 或 deploy key private key 時必須拒收。", "回覆含 private key、DB dump、git object pack、裸 repo tarball 或可還原 credential 的 artifact 時必須拒收。", "回覆要求使用 write-capable token、admin token 或 secret scope token 時必須拒收。", "回覆要求建立、刪除、封存或修改 Gitea repo 時必須拒收。", "回覆要求建立 GitHub repo、修改 visibility、sync refs、delete refs 或 force push 時必須拒收。", "回覆未逐項對應 S4.7 attestation item 時不得標記 attestation accepted。", "回覆只提供口頭同意、截圖或不完整 repo metadata 時必須要求補 evidence。", "回覆把 owner attestation 當成 repo migration approval 或 GitHub primary approval 時必須拒收。", "任何不確定是否含敏感值的回覆必須先進 mirror quarantine,不得人工手改後直接入庫。" ], "allowed_outputs": [ "更新 `gitea-inventory-coverage-attestation.snapshot.json` 的 read-only owner response 欄位", "更新 `GITEA-INVENTORY-COVERAGE-ATTESTATION.md` 的已收 / 未收 decision table", "更新 source-control migration matrix、canonical decision table、primary readiness gate 與 status rollup 的 read-only 欄位", "把缺口顯示到 AwoooP approval / review lane", "維持 `gitea_repo_inventory_v1.status=partial`,直到 S4.6 payload 通過且 S4.7 owner response 全部接受" ], "forbidden_actions": [ "store_token_value", "store_raw_secret", "store_cookie_or_session", "import_gitea_db_dump", "import_git_object_pack", "use_write_capable_token", "write_to_gitea", "create_gitea_repo", "delete_or_archive_gitea_repo", "create_github_repo", "change_repo_visibility", "sync_git_refs", "delete_git_refs", "force_push", "switch_github_primary", "disable_gitea", "add_action_button", "execute_scan_or_runtime_change" ] }