580 lines
21 KiB
JSON
580 lines
21 KiB
JSON
{
|
||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||
"$id": "urn:awoooi:source-control-owner-response-validation-rollup-v1",
|
||
"title": "Source Control Owner Response Validation Rollup v1",
|
||
"description": "彙整 S4.9 / S4.10 / S4.11 / S4.12 owner response 收件包的只讀驗收狀態。此 schema 不新增主 contract、不授權 runtime execution、不授權 repo / refs / workflow / secret 變更。",
|
||
"type": "object",
|
||
"required": [
|
||
"schema_version",
|
||
"status",
|
||
"date",
|
||
"mode",
|
||
"runtime_execution_authorized",
|
||
"source_contracts",
|
||
"source_indexes",
|
||
"summary",
|
||
"validation_lanes",
|
||
"cross_packet_acceptance_checks",
|
||
"quarantine_rules",
|
||
"readiness_effects",
|
||
"allowed_outputs",
|
||
"forbidden_actions"
|
||
],
|
||
"properties": {
|
||
"schema_version": {
|
||
"const": "source_control_owner_response_validation_rollup_v1"
|
||
},
|
||
"status": {
|
||
"type": "string",
|
||
"enum": ["draft_waiting_owner_responses"]
|
||
},
|
||
"date": {
|
||
"type": "string"
|
||
},
|
||
"mode": {
|
||
"type": "string",
|
||
"enum": ["owner_response_validation_rollup_only"]
|
||
},
|
||
"runtime_execution_authorized": {
|
||
"type": "boolean",
|
||
"const": false
|
||
},
|
||
"source_contracts": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"source_indexes": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"summary": {
|
||
"type": "object",
|
||
"required": [
|
||
"rollup_status",
|
||
"response_packet_count",
|
||
"validation_lane_count",
|
||
"total_response_template_count",
|
||
"total_received_response_count",
|
||
"total_accepted_response_count",
|
||
"total_rejected_response_count",
|
||
"total_acceptance_check_count",
|
||
"total_rejection_rule_count",
|
||
"owner_response_evidence_routing_rule_count",
|
||
"owner_response_validation_display_section_count",
|
||
"owner_response_validation_state_transition_rule_count",
|
||
"owner_response_validation_reviewer_checklist_count",
|
||
"owner_response_validation_reviewer_outcome_lane_count",
|
||
"quarantine_required",
|
||
"primary_ready_count",
|
||
"runtime_execution_authorized",
|
||
"token_value_collection_allowed",
|
||
"secret_value_collection_allowed",
|
||
"write_token_allowed",
|
||
"repo_creation_authorized",
|
||
"visibility_change_authorized",
|
||
"gitea_repo_write_authorized",
|
||
"refs_sync_authorized",
|
||
"refs_delete_authorized",
|
||
"force_push_authorized",
|
||
"workflow_modification_authorized",
|
||
"runner_enablement_authorized",
|
||
"github_hosted_runner_enable_authorized",
|
||
"github_primary_switch_authorized",
|
||
"action_buttons_allowed"
|
||
],
|
||
"properties": {
|
||
"rollup_status": {"type": "string", "enum": ["waiting_owner_responses"]},
|
||
"response_packet_count": {"type": "integer", "minimum": 0},
|
||
"validation_lane_count": {"type": "integer", "minimum": 0},
|
||
"total_response_template_count": {"type": "integer", "minimum": 0},
|
||
"total_received_response_count": {"type": "integer", "minimum": 0},
|
||
"total_accepted_response_count": {"type": "integer", "minimum": 0},
|
||
"total_rejected_response_count": {"type": "integer", "minimum": 0},
|
||
"total_acceptance_check_count": {"type": "integer", "minimum": 0},
|
||
"total_rejection_rule_count": {"type": "integer", "minimum": 0},
|
||
"owner_response_evidence_routing_rule_count": {"type": "integer", "minimum": 0},
|
||
"owner_response_validation_display_section_count": {"type": "integer", "minimum": 0},
|
||
"owner_response_validation_state_transition_rule_count": {"type": "integer", "minimum": 0},
|
||
"owner_response_validation_reviewer_checklist_count": {"type": "integer", "minimum": 0},
|
||
"owner_response_validation_reviewer_outcome_lane_count": {"type": "integer", "minimum": 0},
|
||
"quarantine_required": {"type": "boolean"},
|
||
"primary_ready_count": {"type": "integer", "minimum": 0},
|
||
"runtime_execution_authorized": {"type": "boolean", "const": false},
|
||
"token_value_collection_allowed": {"type": "boolean", "const": false},
|
||
"secret_value_collection_allowed": {"type": "boolean", "const": false},
|
||
"write_token_allowed": {"type": "boolean", "const": false},
|
||
"repo_creation_authorized": {"type": "boolean", "const": false},
|
||
"visibility_change_authorized": {"type": "boolean", "const": false},
|
||
"gitea_repo_write_authorized": {"type": "boolean", "const": false},
|
||
"refs_sync_authorized": {"type": "boolean", "const": false},
|
||
"refs_delete_authorized": {"type": "boolean", "const": false},
|
||
"force_push_authorized": {"type": "boolean", "const": false},
|
||
"workflow_modification_authorized": {"type": "boolean", "const": false},
|
||
"runner_enablement_authorized": {"type": "boolean", "const": false},
|
||
"github_hosted_runner_enable_authorized": {"type": "boolean", "const": false},
|
||
"github_primary_switch_authorized": {"type": "boolean", "const": false},
|
||
"action_buttons_allowed": {"type": "boolean", "const": false}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"validation_lanes": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "object",
|
||
"required": [
|
||
"lane_id",
|
||
"source_contract",
|
||
"response_packet",
|
||
"human_doc",
|
||
"scope_summary",
|
||
"response_template_count",
|
||
"received_response_count",
|
||
"accepted_response_count",
|
||
"rejected_response_count",
|
||
"required_before_ready",
|
||
"allowed_outputs",
|
||
"forbidden_actions",
|
||
"execution_authorized"
|
||
],
|
||
"properties": {
|
||
"lane_id": {"type": "string"},
|
||
"source_contract": {"type": "string"},
|
||
"response_packet": {"type": "string"},
|
||
"human_doc": {"type": "string"},
|
||
"scope_summary": {"type": "string"},
|
||
"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},
|
||
"required_before_ready": {
|
||
"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
|
||
},
|
||
"execution_authorized": {"type": "boolean", "const": false}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"minItems": 1
|
||
},
|
||
"cross_packet_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
|
||
},
|
||
"quarantine_rules": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"owner_response_evidence_routing_rules": {
|
||
"type": "array",
|
||
"description": "AwoooP 收到 S4.9-S4.12 owner response evidence pointer 時的只讀路由規則;只決定顯示、補證、隔離或拒收,不代表 response 已接受或任何執行授權。",
|
||
"items": {
|
||
"type": "object",
|
||
"required": [
|
||
"rule_id",
|
||
"display_order",
|
||
"title",
|
||
"match_condition",
|
||
"safe_route",
|
||
"blocked_route",
|
||
"awooop_display_mode",
|
||
"execution_authorized",
|
||
"not_approval"
|
||
],
|
||
"properties": {
|
||
"rule_id": {"type": "string"},
|
||
"display_order": {"type": "integer", "minimum": 1},
|
||
"title": {"type": "string"},
|
||
"match_condition": {"type": "string"},
|
||
"safe_route": {"type": "string"},
|
||
"blocked_route": {"type": "string"},
|
||
"awooop_display_mode": {"type": "string", "enum": ["display_evidence_route_only"]},
|
||
"execution_authorized": {"type": "boolean", "const": false},
|
||
"not_approval": {"type": "boolean", "const": true}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"minItems": 1
|
||
},
|
||
"owner_response_validation_display_sections": {
|
||
"type": "array",
|
||
"description": "AwoooP 顯示 S4.13 owner response validation rollup 時的只讀區塊順序;只固定 Operator Console 呈現,不代表 response 已收到、approval 或 execution queue。",
|
||
"items": {
|
||
"type": "object",
|
||
"required": [
|
||
"section_id",
|
||
"display_order",
|
||
"title",
|
||
"content_source",
|
||
"section_status",
|
||
"awooop_display_mode",
|
||
"execution_authorized",
|
||
"not_approval"
|
||
],
|
||
"properties": {
|
||
"section_id": {"type": "string"},
|
||
"display_order": {"type": "integer", "minimum": 1},
|
||
"title": {"type": "string"},
|
||
"content_source": {"type": "string"},
|
||
"section_status": {"type": "string", "enum": ["display_contract_only"]},
|
||
"awooop_display_mode": {"type": "string", "enum": ["display_validation_section_only"]},
|
||
"execution_authorized": {"type": "boolean", "const": false},
|
||
"not_approval": {"type": "boolean", "const": true}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"minItems": 1
|
||
},
|
||
"owner_response_validation_state_transition_rules": {
|
||
"type": "array",
|
||
"description": "AwoooP 對 S4.13 owner response validation 狀態轉移的只讀規則;只顯示 waiting、pending validation、補證、隔離、拒收、owner review 或 read-only update,不授權執行。",
|
||
"items": {
|
||
"type": "object",
|
||
"required": [
|
||
"rule_id",
|
||
"display_order",
|
||
"from_state",
|
||
"trigger",
|
||
"required_checks",
|
||
"next_state",
|
||
"allowed_update",
|
||
"blocked_updates",
|
||
"awooop_display_mode",
|
||
"execution_authorized",
|
||
"not_approval"
|
||
],
|
||
"properties": {
|
||
"rule_id": {"type": "string"},
|
||
"display_order": {"type": "integer", "minimum": 1},
|
||
"from_state": {"type": "string"},
|
||
"trigger": {"type": "string"},
|
||
"required_checks": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"next_state": {"type": "string"},
|
||
"allowed_update": {"type": "string"},
|
||
"blocked_updates": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"awooop_display_mode": {"type": "string", "enum": ["display_state_transition_rule_only"]},
|
||
"execution_authorized": {"type": "boolean", "const": false},
|
||
"not_approval": {"type": "boolean", "const": true}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"minItems": 1
|
||
},
|
||
"owner_response_validation_reviewer_checklist": {
|
||
"type": "array",
|
||
"description": "AwoooP reviewer 檢查 S4.13 owner response validation 時的只讀 checklist;只作人工審查提示,不代表 response accepted、approval 或 execution queue。",
|
||
"items": {
|
||
"type": "object",
|
||
"required": [
|
||
"checklist_id",
|
||
"display_order",
|
||
"title",
|
||
"reviewer_action",
|
||
"required_evidence",
|
||
"pass_state",
|
||
"fail_route",
|
||
"awooop_display_mode",
|
||
"execution_authorized",
|
||
"not_approval"
|
||
],
|
||
"properties": {
|
||
"checklist_id": {"type": "string"},
|
||
"display_order": {"type": "integer", "minimum": 1},
|
||
"title": {"type": "string"},
|
||
"reviewer_action": {"type": "string"},
|
||
"required_evidence": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"pass_state": {"type": "string"},
|
||
"fail_route": {"type": "string"},
|
||
"awooop_display_mode": {"type": "string", "enum": ["display_reviewer_checklist_only"]},
|
||
"execution_authorized": {"type": "boolean", "const": false},
|
||
"not_approval": {"type": "boolean", "const": true}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"minItems": 1
|
||
},
|
||
"owner_response_validation_reviewer_outcome_lanes": {
|
||
"type": "array",
|
||
"description": "AwoooP reviewer 完成 S4.13 checklist 後可顯示的只讀 outcome lanes;只分類補證、隔離、拒收、owner review、只讀候選或等待 runtime gate,不授權執行。",
|
||
"items": {
|
||
"type": "object",
|
||
"required": [
|
||
"outcome_lane_id",
|
||
"display_order",
|
||
"title",
|
||
"when_reviewer_finds",
|
||
"safe_result",
|
||
"allowed_update",
|
||
"blocked_updates",
|
||
"awooop_display_mode",
|
||
"execution_authorized",
|
||
"not_approval"
|
||
],
|
||
"properties": {
|
||
"outcome_lane_id": {"type": "string"},
|
||
"display_order": {"type": "integer", "minimum": 1},
|
||
"title": {"type": "string"},
|
||
"when_reviewer_finds": {"type": "string"},
|
||
"safe_result": {"type": "string"},
|
||
"allowed_update": {"type": "string"},
|
||
"blocked_updates": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"awooop_display_mode": {"type": "string", "enum": ["display_reviewer_outcome_lane_only"]},
|
||
"execution_authorized": {"type": "boolean", "const": false},
|
||
"not_approval": {"type": "boolean", "const": true}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"minItems": 1
|
||
},
|
||
"readiness_effects": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "object",
|
||
"required": [
|
||
"effect_id",
|
||
"when_all_checks_pass",
|
||
"allowed_update",
|
||
"still_forbidden"
|
||
],
|
||
"properties": {
|
||
"effect_id": {"type": "string"},
|
||
"when_all_checks_pass": {"type": "string"},
|
||
"allowed_update": {"type": "string"},
|
||
"still_forbidden": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"minItems": 1
|
||
},
|
||
"missing_response_lanes": {
|
||
"type": "array",
|
||
"description": "AwoooP 可直接顯示的 owner response 缺口摘要;此欄位只供 read-only review,不代表 response 已收到。",
|
||
"items": {
|
||
"type": "object",
|
||
"required": [
|
||
"lane_id",
|
||
"source_contract",
|
||
"response_template_count",
|
||
"received_response_count",
|
||
"accepted_response_count",
|
||
"current_status",
|
||
"next_owner_action",
|
||
"awooop_display_mode",
|
||
"still_forbidden"
|
||
],
|
||
"properties": {
|
||
"lane_id": {"type": "string"},
|
||
"source_contract": {"type": "string"},
|
||
"response_template_count": {"type": "integer", "minimum": 0},
|
||
"received_response_count": {"type": "integer", "minimum": 0},
|
||
"accepted_response_count": {"type": "integer", "minimum": 0},
|
||
"current_status": {"type": "string", "enum": ["waiting_owner_response"]},
|
||
"next_owner_action": {"type": "string"},
|
||
"awooop_display_mode": {"type": "string", "enum": ["observe_missing_response"]},
|
||
"still_forbidden": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"minItems": 1
|
||
},
|
||
"owner_response_collection_order": {
|
||
"type": "array",
|
||
"description": "AwoooP 可顯示的 owner response 收件順序;此欄位只排序 review 工作,不授權任何 repo / refs / workflow / secret / runtime 動作。",
|
||
"items": {
|
||
"type": "object",
|
||
"required": [
|
||
"order",
|
||
"lane_id",
|
||
"reason",
|
||
"required_packet",
|
||
"minimum_response",
|
||
"awooop_action",
|
||
"blocked_until_received",
|
||
"execution_authorized",
|
||
"still_forbidden"
|
||
],
|
||
"properties": {
|
||
"order": {"type": "integer", "minimum": 1},
|
||
"lane_id": {"type": "string"},
|
||
"reason": {"type": "string"},
|
||
"required_packet": {"type": "string"},
|
||
"minimum_response": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"awooop_action": {"type": "string", "enum": ["display_next_collection_item"]},
|
||
"blocked_until_received": {"type": "boolean", "const": true},
|
||
"execution_authorized": {"type": "boolean", "const": false},
|
||
"still_forbidden": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"minItems": 1
|
||
},
|
||
"next_collection_candidate": {
|
||
"type": "object",
|
||
"description": "AwoooP 可顯示的單一下一步 owner response 收件項目;此欄位只提示 reviewer 下一包 response,不是 approval queue 或 execution queue。",
|
||
"required": [
|
||
"order",
|
||
"lane_id",
|
||
"display_status",
|
||
"source_contract",
|
||
"required_packet",
|
||
"required_response_template_count",
|
||
"received_response_count",
|
||
"accepted_response_count",
|
||
"minimum_response",
|
||
"awooop_display_mode",
|
||
"why_next",
|
||
"blocked_until_received",
|
||
"execution_authorized",
|
||
"not_approval",
|
||
"still_forbidden"
|
||
],
|
||
"properties": {
|
||
"order": {"type": "integer", "minimum": 1},
|
||
"lane_id": {"type": "string"},
|
||
"display_status": {"type": "string", "enum": ["next_owner_response_required"]},
|
||
"source_contract": {"type": "string"},
|
||
"required_packet": {"type": "string"},
|
||
"required_response_template_count": {"type": "integer", "minimum": 0},
|
||
"received_response_count": {"type": "integer", "minimum": 0},
|
||
"accepted_response_count": {"type": "integer", "minimum": 0},
|
||
"minimum_response": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"awooop_display_mode": {"type": "string", "enum": ["display_next_collection_item_only"]},
|
||
"why_next": {"type": "string"},
|
||
"blocked_until_received": {"type": "boolean", "const": true},
|
||
"execution_authorized": {"type": "boolean", "const": false},
|
||
"not_approval": {"type": "boolean", "const": true},
|
||
"still_forbidden": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"allowed_outputs": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"latest_local_validation": {
|
||
"type": "object",
|
||
"description": "本機 snapshot-only owner response guard 的最近一次驗證結果;此欄位不代表 owner response 已收到或任何執行授權。",
|
||
"required": [
|
||
"status",
|
||
"date",
|
||
"scope",
|
||
"command",
|
||
"result",
|
||
"validated_lanes",
|
||
"received_response_count",
|
||
"accepted_response_count",
|
||
"runtime_actions_authorized",
|
||
"repo_or_refs_actions_authorized",
|
||
"workflow_or_secret_actions_authorized",
|
||
"not_authorization"
|
||
],
|
||
"properties": {
|
||
"status": {
|
||
"type": "string",
|
||
"enum": [
|
||
"repo_snapshot_guard_pass",
|
||
"repo_snapshot_guard_warn",
|
||
"repo_snapshot_guard_blocked"
|
||
]
|
||
},
|
||
"date": {"type": "string"},
|
||
"scope": {"type": "string", "enum": ["repo_snapshot_only"]},
|
||
"command": {"type": "string"},
|
||
"result": {"type": "string"},
|
||
"validated_lanes": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
},
|
||
"received_response_count": {"type": "integer", "minimum": 0},
|
||
"accepted_response_count": {"type": "integer", "minimum": 0},
|
||
"runtime_actions_authorized": {"type": "boolean", "const": false},
|
||
"repo_or_refs_actions_authorized": {"type": "boolean", "const": false},
|
||
"workflow_or_secret_actions_authorized": {"type": "boolean", "const": false},
|
||
"not_authorization": {"type": "boolean", "const": true}
|
||
},
|
||
"additionalProperties": false
|
||
},
|
||
"forbidden_actions": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"minItems": 1
|
||
}
|
||
},
|
||
"additionalProperties": false
|
||
}
|