Files
awoooi/docs/schemas/gitea_workflow_runner_health_v1.schema.json
Your Name 943faaeef7
All checks were successful
CD Pipeline / tests (push) Successful in 1m30s
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / build-and-deploy (push) Successful in 4m2s
CD Pipeline / post-deploy-checks (push) Successful in 1m56s
feat(governance): 新增 Gitea workflow runner 健康合約
2026-06-05 11:30:56 +08:00

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
}