Files
awoooi/docs/schemas/github_target_owner_decision_response_v1.schema.json

581 lines
21 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:awoooi:github-target-owner-decision-response-v1",
"title": "GitHub Target Owner Decision Response 收件契約 v1",
"description": "定義 owner 回覆 GitHub target / owner / visibility / canonical 決策時的收件欄位、驗收規則與拒收規則。此 schema 不授權建立 repo、修改 visibility、同步 refs、保存 secret value 或切換 GitHub primary。",
"type": "object",
"required": [
"schema_version",
"status",
"date",
"mode",
"runtime_execution_authorized",
"source_contract",
"target_contract",
"source_indexes",
"summary",
"target_owner_handoff_preflight_checks",
"target_owner_handoff_packet",
"post_dispatch_invariants",
"response_templates",
"acceptance_checks",
"rejection_rules",
"allowed_outputs",
"forbidden_actions"
],
"properties": {
"schema_version": {
"const": "github_target_owner_decision_response_v1"
},
"status": {
"type": "string",
"enum": ["draft_waiting_owner_response"]
},
"date": {
"type": "string"
},
"mode": {
"type": "string",
"enum": ["owner_decision_response_intake_only"]
},
"runtime_execution_authorized": {
"type": "boolean",
"const": false
},
"source_contract": {
"type": "string",
"const": "github_target_decision_v1"
},
"target_contract": {
"type": "string",
"const": "github_target_repo_approval_package_v1"
},
"source_indexes": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"summary": {
"type": "object",
"required": [
"owner_response_status",
"target_decision_count",
"approval_required_target_count",
"owner_response_request_packet_count",
"owner_response_template_status_count",
"owner_response_audit_event_template_count",
"owner_response_redaction_example_count",
"owner_response_collection_check_count",
"intake_preflight_check_count",
"response_template_count",
"received_response_count",
"accepted_response_count",
"rejected_response_count",
"acceptance_check_count",
"rejection_rule_count",
"repo_creation_authorized",
"visibility_change_authorized",
"refs_sync_authorized",
"github_primary_switch_authorized",
"secret_value_collection_allowed",
"action_buttons_allowed",
"target_owner_handoff_package_ready",
"target_owner_handoff_completion_percent",
"target_owner_handoff_check_count",
"target_owner_handoff_packet_field_count",
"target_owner_request_dispatch_authorized",
"not_found_or_private_as_absent_allowed",
"repo_creation_allowed_without_owner_response",
"visibility_change_allowed_without_owner_response",
"github_target_owner_response_handoff_not_approval"
],
"properties": {
"owner_response_status": {
"type": "string",
"enum": ["waiting_owner_response"]
},
"target_decision_count": {"type": "integer", "minimum": 0},
"approval_required_target_count": {"type": "integer", "minimum": 0},
"owner_response_request_packet_count": {"type": "integer", "minimum": 0},
"owner_response_template_status_count": {"type": "integer", "minimum": 0},
"owner_response_audit_event_template_count": {"type": "integer", "minimum": 0},
"owner_response_redaction_example_count": {"type": "integer", "minimum": 0},
"owner_response_collection_check_count": {"type": "integer", "minimum": 0},
"intake_preflight_check_count": {"type": "integer", "minimum": 0},
"response_template_count": {"type": "integer", "minimum": 0},
"received_response_count": {"type": "integer", "minimum": 0},
"accepted_response_count": {"type": "integer", "minimum": 0},
"rejected_response_count": {"type": "integer", "minimum": 0},
"acceptance_check_count": {"type": "integer", "minimum": 0},
"rejection_rule_count": {"type": "integer", "minimum": 0},
"repo_creation_authorized": {"type": "boolean", "const": false},
"visibility_change_authorized": {"type": "boolean", "const": false},
"refs_sync_authorized": {"type": "boolean", "const": false},
"github_primary_switch_authorized": {"type": "boolean", "const": false},
"secret_value_collection_allowed": {"type": "boolean", "const": false},
"action_buttons_allowed": {"type": "boolean", "const": false},
"target_owner_handoff_package_ready": {"type": "boolean", "const": true},
"target_owner_handoff_completion_percent": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"target_owner_handoff_check_count": {"type": "integer", "minimum": 0},
"target_owner_handoff_packet_field_count": {"type": "integer", "minimum": 0},
"target_owner_request_dispatch_authorized": {"type": "boolean", "const": false},
"not_found_or_private_as_absent_allowed": {"type": "boolean", "const": false},
"repo_creation_allowed_without_owner_response": {"type": "boolean", "const": false},
"visibility_change_allowed_without_owner_response": {"type": "boolean", "const": false},
"github_target_owner_response_handoff_not_approval": {"type": "boolean", "const": true}
},
"additionalProperties": false
},
"target_owner_handoff_preflight_checks": {
"type": "array",
"items": {
"type": "object",
"required": [
"check_id",
"display_order",
"check",
"current_status",
"execution_authorized"
],
"properties": {
"check_id": {"type": "string"},
"display_order": {"type": "integer", "minimum": 1},
"check": {"type": "string"},
"current_status": {
"type": "string",
"enum": ["defined_not_dispatched"]
},
"execution_authorized": {"type": "boolean", "const": false}
},
"additionalProperties": false
},
"minItems": 1
},
"target_owner_handoff_packet": {
"type": "object",
"required": [
"request_id",
"stage_id",
"prerequisite_gates",
"requested_templates",
"target_probe_summary",
"recipient_role_or_team_required",
"required_response_fields",
"forbidden_inputs",
"not_approval",
"execution_authorized"
],
"properties": {
"request_id": {"type": "string"},
"stage_id": {"type": "string"},
"prerequisite_gates": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"requested_templates": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"target_probe_summary": {
"type": "object",
"required": [
"candidate_count",
"exists_count",
"not_found_or_private_count",
"external_scope_summary_repo"
],
"properties": {
"candidate_count": {"type": "integer", "minimum": 0},
"exists_count": {"type": "integer", "minimum": 0},
"not_found_or_private_count": {"type": "integer", "minimum": 0},
"external_scope_summary_repo": {"type": "string"},
"newly_added_in_scope_targets": {
"type": "array",
"items": {"type": "string"}
}
},
"additionalProperties": false
},
"recipient_role_or_team_required": {"type": "boolean", "const": true},
"required_response_fields": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"forbidden_inputs": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"not_approval": {"type": "boolean", "const": true},
"execution_authorized": {"type": "boolean", "const": false}
},
"additionalProperties": false
},
"post_dispatch_invariants": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"owner_response_request_packet": {
"type": "object",
"description": "AwoooP 可直接顯示給 owner 的 S4.10 GitHub target owner decision 回覆請求;只說明要填什麼與不得貼什麼,不授權 repo、visibility、refs 或 primary 執行。",
"required": [
"request_id",
"display_status",
"requested_packet",
"required_response_item_count",
"requested_template_ids",
"owner_instruction_summary",
"allowed_response_fields",
"evidence_ref_rules",
"forbidden_payloads",
"allowed_submission_modes",
"awooop_display_mode",
"execution_authorized",
"not_approval",
"still_forbidden"
],
"properties": {
"request_id": {"type": "string"},
"display_status": {"type": "string", "enum": ["ready_to_request_owner_response"]},
"requested_packet": {"type": "string"},
"required_response_item_count": {"type": "integer", "minimum": 0},
"requested_template_ids": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"owner_instruction_summary": {"type": "string"},
"allowed_response_fields": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"evidence_ref_rules": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"forbidden_payloads": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"allowed_submission_modes": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"awooop_display_mode": {"type": "string", "enum": ["display_owner_response_request_only"]},
"execution_authorized": {"type": "boolean", "const": false},
"not_approval": {"type": "boolean", "const": true},
"still_forbidden": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
}
},
"additionalProperties": false
},
"owner_response_template_statuses": {
"type": "array",
"description": "S4.10 九個 GitHub target response templates 的逐項收件狀態;只供 AwoooP 顯示,不代表 approval 或 execution queue。",
"items": {
"type": "object",
"required": [
"template_id",
"github_repo",
"source_key",
"display_order",
"collection_status",
"request_status",
"received_response_count",
"accepted_response_count",
"rejected_response_count",
"latest_outcome_lane",
"next_owner_action",
"awooop_display_mode",
"execution_authorized",
"not_approval",
"still_forbidden"
],
"properties": {
"template_id": {"type": "string"},
"github_repo": {"type": "string"},
"source_key": {"type": "string"},
"display_order": {"type": "integer", "minimum": 1},
"collection_status": {"type": "string", "enum": ["waiting_owner_response"]},
"request_status": {"type": "string", "enum": ["request_ready_not_sent"]},
"received_response_count": {"type": "integer", "minimum": 0},
"accepted_response_count": {"type": "integer", "minimum": 0},
"rejected_response_count": {"type": "integer", "minimum": 0},
"latest_outcome_lane": {"type": "string", "enum": ["keep_waiting_owner_response"]},
"next_owner_action": {"type": "string"},
"awooop_display_mode": {"type": "string", "enum": ["display_template_status_only"]},
"execution_authorized": {"type": "boolean", "const": false},
"not_approval": {"type": "boolean", "const": true},
"still_forbidden": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
}
},
"additionalProperties": false
},
"minItems": 1
},
"owner_response_audit_event_templates": {
"type": "array",
"description": "AwoooP 可照此格式記錄 S4.10 GitHub target owner response 流程的脫敏 audit metadata此欄位只是模板尚未代表 runtime ingestion。",
"items": {
"type": "object",
"required": [
"event_template_id",
"display_order",
"event_status",
"trigger",
"purpose",
"allowed_metadata_fields",
"forbidden_payloads",
"emitted_event_count",
"stored_raw_payload_allowed",
"awooop_display_mode",
"execution_authorized",
"not_approval"
],
"properties": {
"event_template_id": {"type": "string"},
"display_order": {"type": "integer", "minimum": 1},
"event_status": {"type": "string", "enum": ["template_only_not_emitted"]},
"trigger": {"type": "string"},
"purpose": {"type": "string"},
"allowed_metadata_fields": {"type": "array", "items": {"type": "string"}, "minItems": 1},
"forbidden_payloads": {"type": "array", "items": {"type": "string"}, "minItems": 1},
"emitted_event_count": {"type": "integer", "minimum": 0},
"stored_raw_payload_allowed": {"type": "boolean", "const": false},
"awooop_display_mode": {"type": "string", "enum": ["display_audit_template_only"]},
"execution_authorized": {"type": "boolean", "const": false},
"not_approval": {"type": "boolean", "const": true}
},
"additionalProperties": false
},
"minItems": 1
},
"owner_response_redaction_examples": {
"type": "array",
"description": "Owner 回覆 S4.10 GitHub target owner decision 時可參考的脫敏範例;只供 AwoooP 顯示,不代表收件、驗收或執行授權。",
"items": {
"type": "object",
"required": [
"example_id",
"display_order",
"example_status",
"category",
"safe_response_shape",
"required_redactions",
"forbidden_raw_values",
"stored_raw_payload_allowed",
"awooop_display_mode",
"execution_authorized",
"not_approval"
],
"properties": {
"example_id": {"type": "string"},
"display_order": {"type": "integer", "minimum": 1},
"example_status": {"type": "string", "enum": ["template_example_only"]},
"category": {"type": "string"},
"safe_response_shape": {"type": "array", "items": {"type": "string"}, "minItems": 1},
"required_redactions": {"type": "array", "items": {"type": "string"}, "minItems": 1},
"forbidden_raw_values": {"type": "array", "items": {"type": "string"}, "minItems": 1},
"stored_raw_payload_allowed": {"type": "boolean", "const": false},
"awooop_display_mode": {"type": "string", "enum": ["display_redaction_example_only"]},
"execution_authorized": {"type": "boolean", "const": false},
"not_approval": {"type": "boolean", "const": true}
},
"additionalProperties": false
},
"minItems": 1
},
"owner_response_collection_checks": {
"type": "array",
"description": "AwoooP 顯示 S4.10 request packet 到收回 GitHub target owner response 之間的只讀收件檢查;不得把 request ready、audit template、redaction example 誤判為 response received / accepted。",
"items": {
"type": "object",
"required": [
"check_id",
"display_order",
"title",
"required",
"pass_condition",
"failure_lane",
"awooop_display",
"execution_authorized",
"not_approval"
],
"properties": {
"check_id": {"type": "string"},
"display_order": {"type": "integer", "minimum": 1},
"title": {"type": "string"},
"required": {"type": "boolean"},
"pass_condition": {"type": "string"},
"failure_lane": {"type": "string"},
"awooop_display": {"type": "string"},
"execution_authorized": {"type": "boolean", "const": false},
"not_approval": {"type": "boolean", "const": true}
},
"additionalProperties": false
},
"minItems": 1
},
"intake_preflight_checks": {
"type": "array",
"description": "AwoooP 收到 S4.10 GitHub target owner response 前後可執行的只讀 preflight只分類可收、補證或隔離不授權 repo、visibility、refs 或 primary 執行。",
"items": {
"type": "object",
"required": [
"check_id",
"display_order",
"title",
"required",
"pass_condition",
"failure_lane",
"awooop_display",
"execution_authorized"
],
"properties": {
"check_id": {"type": "string"},
"display_order": {"type": "integer", "minimum": 1},
"title": {"type": "string"},
"required": {"type": "boolean"},
"pass_condition": {"type": "string"},
"failure_lane": {"type": "string"},
"awooop_display": {
"type": "string",
"enum": [
"ready_for_owner_review",
"request_more_evidence",
"quarantine_sensitive_payload",
"reject_execution_request"
]
},
"execution_authorized": {"type": "boolean", "const": false}
},
"additionalProperties": false
},
"minItems": 1
},
"response_templates": {
"type": "array",
"items": {
"type": "object",
"required": [
"template_id",
"github_repo",
"source_key",
"target_state",
"risk",
"requested_owner_decision",
"required_owner_fields",
"acceptable_decisions",
"minimum_evidence_refs",
"acceptance_criteria",
"rejection_conditions",
"allowed_outputs",
"execution_authorized"
],
"properties": {
"template_id": {"type": "string"},
"github_repo": {"type": "string"},
"source_key": {"type": "string"},
"target_state": {"type": "string"},
"risk": {"type": "string"},
"requested_owner_decision": {"type": "string"},
"required_owner_fields": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"acceptable_decisions": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"minimum_evidence_refs": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"acceptance_criteria": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"rejection_conditions": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"allowed_outputs": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"execution_authorized": {
"type": "boolean",
"const": false
}
},
"additionalProperties": false
},
"minItems": 1
},
"acceptance_checks": {
"type": "array",
"items": {
"type": "object",
"required": [
"check_id",
"title",
"required",
"pass_condition",
"failure_lane",
"execution_authorized"
],
"properties": {
"check_id": {"type": "string"},
"title": {"type": "string"},
"required": {"type": "boolean"},
"pass_condition": {"type": "string"},
"failure_lane": {"type": "string"},
"execution_authorized": {"type": "boolean", "const": false}
},
"additionalProperties": false
},
"minItems": 1
},
"rejection_rules": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"allowed_outputs": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"forbidden_actions": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
}
},
"additionalProperties": false
}