428 lines
9.5 KiB
JSON
428 lines
9.5 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "urn:awoooi:gitea-workflow-runner-health-v1",
|
|
"title": "AWOOOI Gitea 工作流程與 runner 健康合約 v1",
|
|
"description": "以 repo 內 committed Gitea workflow 與 runner guard script 建立只讀健康合約;不修改 workflow、不重啟 runner、不停止容器、不讀 Secret payload、不送 Telegram 測試通知。",
|
|
"type": "object",
|
|
"required": [
|
|
"schema_version",
|
|
"generated_at",
|
|
"program_status",
|
|
"source_refs",
|
|
"rollups",
|
|
"workflow_records",
|
|
"runner_contracts",
|
|
"notification_contracts",
|
|
"latest_observations",
|
|
"operator_contract",
|
|
"operation_boundaries",
|
|
"approval_boundaries"
|
|
],
|
|
"properties": {
|
|
"schema_version": {
|
|
"type": "string",
|
|
"const": "gitea_workflow_runner_health_v1"
|
|
},
|
|
"generated_at": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"program_status": {
|
|
"type": "object",
|
|
"required": [
|
|
"overall_completion_percent",
|
|
"current_priority",
|
|
"current_task_id",
|
|
"next_task_id",
|
|
"read_only_mode"
|
|
],
|
|
"properties": {
|
|
"overall_completion_percent": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 100
|
|
},
|
|
"current_priority": {
|
|
"type": "string",
|
|
"enum": [
|
|
"P0",
|
|
"P1",
|
|
"P2",
|
|
"P3"
|
|
]
|
|
},
|
|
"current_task_id": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"next_task_id": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"read_only_mode": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"source_refs": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"rollups": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
},
|
|
"workflow_records": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"$ref": "#/$defs/workflow_record"
|
|
}
|
|
},
|
|
"runner_contracts": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"$ref": "#/$defs/runner_contract"
|
|
}
|
|
},
|
|
"notification_contracts": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"$ref": "#/$defs/notification_contract"
|
|
}
|
|
},
|
|
"latest_observations": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/observation"
|
|
}
|
|
},
|
|
"operator_contract": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
},
|
|
"operation_boundaries": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"approval_boundaries": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "boolean",
|
|
"const": false
|
|
}
|
|
}
|
|
},
|
|
"$defs": {
|
|
"workflow_record": {
|
|
"type": "object",
|
|
"required": [
|
|
"workflow_id",
|
|
"file_ref",
|
|
"display_name",
|
|
"scope",
|
|
"status",
|
|
"risk_level",
|
|
"triggers",
|
|
"schedule_cadence",
|
|
"runner_labels",
|
|
"runner_evidence_status",
|
|
"job_count",
|
|
"notification_policy",
|
|
"notify_bridge_calls",
|
|
"secrets_policy_status",
|
|
"evidence_refs",
|
|
"next_action"
|
|
],
|
|
"properties": {
|
|
"workflow_id": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"file_ref": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"display_name": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"scope": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"manifest_mapped",
|
|
"action_required",
|
|
"blocked"
|
|
]
|
|
},
|
|
"risk_level": {
|
|
"type": "string",
|
|
"enum": [
|
|
"low",
|
|
"medium",
|
|
"high",
|
|
"critical"
|
|
]
|
|
},
|
|
"triggers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"schedule_cadence": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"runner_labels": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"runner_evidence_status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"host_runner_mapped",
|
|
"owner_attestation_required",
|
|
"comment_ambiguous"
|
|
]
|
|
},
|
|
"job_count": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"notification_policy": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"notify_bridge_calls": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"secrets_policy_status": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"evidence_refs": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"next_action": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"runner_contract": {
|
|
"type": "object",
|
|
"required": [
|
|
"contract_id",
|
|
"display_name",
|
|
"status",
|
|
"risk_level",
|
|
"runner_labels",
|
|
"used_by_workflows",
|
|
"health_contract",
|
|
"guardrail_refs",
|
|
"evidence_refs",
|
|
"next_action"
|
|
],
|
|
"properties": {
|
|
"contract_id": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"display_name": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"manifest_mapped",
|
|
"action_required",
|
|
"dry_run_only",
|
|
"prepared_not_applied_by_snapshot"
|
|
]
|
|
},
|
|
"risk_level": {
|
|
"type": "string",
|
|
"enum": [
|
|
"low",
|
|
"medium",
|
|
"high",
|
|
"critical"
|
|
]
|
|
},
|
|
"runner_labels": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"used_by_workflows": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"health_contract": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"guardrail_refs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"evidence_refs": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"next_action": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"notification_contract": {
|
|
"type": "object",
|
|
"required": [
|
|
"contract_id",
|
|
"display_name",
|
|
"status",
|
|
"policy_kind",
|
|
"success_noise_policy",
|
|
"failure_policy",
|
|
"workflow_refs",
|
|
"evidence_refs",
|
|
"next_action"
|
|
],
|
|
"properties": {
|
|
"contract_id": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"display_name": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"preserved",
|
|
"exception_documented",
|
|
"action_required"
|
|
]
|
|
},
|
|
"policy_kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"failure_only",
|
|
"actionable_only",
|
|
"deployment_status_exception",
|
|
"manual_status_exception",
|
|
"read_only_no_notify"
|
|
]
|
|
},
|
|
"success_noise_policy": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"failure_policy": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"workflow_refs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"evidence_refs": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"next_action": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"observation": {
|
|
"type": "object",
|
|
"required": [
|
|
"observation_id",
|
|
"status",
|
|
"summary",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"observation_id": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"verified",
|
|
"action_required",
|
|
"not_applicable"
|
|
]
|
|
},
|
|
"summary": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"evidence_refs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|