spec: add reporting governance event model

This commit is contained in:
Eve
2026-05-07 15:55:53 +08:00
parent 299ded3cdf
commit 6921217ca3
3 changed files with 1243 additions and 0 deletions

View File

@@ -0,0 +1,453 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://cowbay.org/schemas/reporting-governance/events.schema.json",
"title": "Reporting Governance Events",
"description": "Validation schema for canonical reporting-governance events, including envelope and event-specific payload rules.",
"allOf": [
{
"$ref": "./event-envelope.schema.json"
},
{
"oneOf": [
{
"$ref": "#/$defs/taskStartedEvent"
},
{
"$ref": "#/$defs/taskCheckpointDueEvent"
},
{
"$ref": "#/$defs/taskCheckpointSentEvent"
},
{
"$ref": "#/$defs/taskStatusChangedEvent"
},
{
"$ref": "#/$defs/taskClaimedCompleteEvent"
},
{
"$ref": "#/$defs/taskEvidenceAttachedEvent"
},
{
"$ref": "#/$defs/subagentSpawnedEvent"
},
{
"$ref": "#/$defs/subagentSpawnFailedEvent"
},
{
"$ref": "#/$defs/subagentCompletedEvent"
},
{
"$ref": "#/$defs/subagentResultForwardedEvent"
},
{
"$ref": "#/$defs/subagentResultNotForwardedEvent"
},
{
"$ref": "#/$defs/silenceTimeoutEvent"
},
{
"$ref": "#/$defs/watchdogFiredEvent"
},
{
"$ref": "#/$defs/operatorReviewRequestedEvent"
},
{
"$ref": "#/$defs/reportAnchorMissingEvent"
},
{
"$ref": "#/$defs/forcedOperatorUpdateEvent"
}
]
}
],
"$defs": {
"nonEmptyString": {
"type": "string",
"minLength": 1
},
"positiveInteger": {
"type": "integer",
"minimum": 1
},
"taskStartedPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"task_kind",
"started_by",
"initial_status",
"silent_task",
"report_required"
],
"properties": {
"task_kind": { "$ref": "#/$defs/nonEmptyString" },
"started_by": { "$ref": "#/$defs/nonEmptyString" },
"initial_status": { "$ref": "#/$defs/nonEmptyString" },
"silent_task": { "type": "boolean" },
"report_required": { "type": "boolean" },
"plan_ref": { "type": "string" },
"checkpoint_due_at": { "type": "string", "format": "date-time" },
"owner_agent_id": { "type": "string" }
}
},
"taskCheckpointDuePayload": {
"type": "object",
"additionalProperties": true,
"required": [
"checkpoint_type",
"due_at",
"expected_report_type"
],
"properties": {
"checkpoint_type": { "$ref": "#/$defs/nonEmptyString" },
"due_at": { "type": "string", "format": "date-time" },
"expected_report_type": { "$ref": "#/$defs/nonEmptyString" },
"grace_period_ms": { "type": "integer", "minimum": 0 },
"policy_id": { "type": "string" }
}
},
"taskCheckpointSentPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"checkpoint_type",
"sent_at",
"report_type"
],
"properties": {
"checkpoint_type": { "$ref": "#/$defs/nonEmptyString" },
"sent_at": { "type": "string", "format": "date-time" },
"report_type": { "$ref": "#/$defs/nonEmptyString" },
"anchor_id": { "type": "string" },
"message_ref": { "type": "string" },
"lateness_ms": { "type": "integer", "minimum": 0 }
}
},
"taskStatusChangedPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"from_status",
"to_status",
"reason"
],
"properties": {
"from_status": { "$ref": "#/$defs/nonEmptyString" },
"to_status": { "$ref": "#/$defs/nonEmptyString" },
"reason": { "$ref": "#/$defs/nonEmptyString" },
"status_source": { "type": "string" },
"blocked": { "type": "boolean" },
"gate_id": { "type": "string" }
}
},
"taskClaimedCompletePayload": {
"type": "object",
"additionalProperties": true,
"required": [
"claimed_status"
],
"properties": {
"claimed_status": { "$ref": "#/$defs/nonEmptyString" },
"verification_state": { "type": "string" },
"claim_basis": { "type": "string" },
"pending_review": { "type": "boolean" }
}
},
"taskEvidenceAttachedPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"evidence_count",
"evidence_role"
],
"properties": {
"evidence_count": { "$ref": "#/$defs/positiveInteger" },
"evidence_role": { "$ref": "#/$defs/nonEmptyString" }
}
},
"operatorReviewRequestedPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"review_reason",
"review_scope"
],
"properties": {
"review_reason": { "$ref": "#/$defs/nonEmptyString" },
"review_scope": { "$ref": "#/$defs/nonEmptyString" },
"requested_status": { "type": "string" },
"deadline": { "type": "string", "format": "date-time" }
}
},
"subagentSpawnedPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"subagent_id",
"subagent_label",
"dispatch_status",
"report_anchor_required",
"report_anchor_present"
],
"properties": {
"subagent_id": { "$ref": "#/$defs/nonEmptyString" },
"subagent_label": { "$ref": "#/$defs/nonEmptyString" },
"dispatch_status": { "$ref": "#/$defs/nonEmptyString" },
"report_anchor_required": { "type": "boolean" },
"report_anchor_present": { "type": "boolean" },
"spawn_session_id": { "type": "string" },
"parent_agent_id": { "type": "string" },
"task_summary": { "type": "string" },
"worktree": { "type": "string" }
}
},
"subagentSpawnFailedPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"failure_reason",
"failure_stage",
"immediate_report_required"
],
"properties": {
"failure_reason": { "$ref": "#/$defs/nonEmptyString" },
"failure_stage": { "$ref": "#/$defs/nonEmptyString" },
"immediate_report_required": { "type": "boolean" },
"attempted_subagent_label": { "type": "string" },
"error_code": { "type": "string" },
"retryable": { "type": "boolean" }
}
},
"subagentCompletedPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"subagent_id",
"completion_state",
"result_available"
],
"properties": {
"subagent_id": { "$ref": "#/$defs/nonEmptyString" },
"completion_state": { "$ref": "#/$defs/nonEmptyString" },
"result_available": { "type": "boolean" },
"result_ref": { "type": "string" },
"completed_at": { "type": "string", "format": "date-time" },
"exit_reason": { "type": "string" }
}
},
"subagentResultForwardedPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"subagent_id",
"forwarded_at",
"forward_target"
],
"properties": {
"subagent_id": { "$ref": "#/$defs/nonEmptyString" },
"forwarded_at": { "type": "string", "format": "date-time" },
"forward_target": { "$ref": "#/$defs/nonEmptyString" },
"source_result_ref": { "type": "string" },
"forward_message_ref": { "type": "string" },
"integrity_status": { "type": "string" }
}
},
"subagentResultNotForwardedPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"subagent_id",
"detected_at",
"reason",
"result_ref"
],
"properties": {
"subagent_id": { "$ref": "#/$defs/nonEmptyString" },
"detected_at": { "type": "string", "format": "date-time" },
"reason": { "$ref": "#/$defs/nonEmptyString" },
"result_ref": { "$ref": "#/$defs/nonEmptyString" },
"forward_deadline": { "type": "string", "format": "date-time" },
"watchdog_window_ms": { "$ref": "#/$defs/positiveInteger" },
"operator_notified": { "type": "boolean" }
}
},
"silenceTimeoutPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"duration_ms",
"expected_report_type"
],
"properties": {
"duration_ms": { "$ref": "#/$defs/positiveInteger" },
"expected_report_type": { "$ref": "#/$defs/nonEmptyString" },
"last_report_at": { "type": "string", "format": "date-time" },
"timeout_policy_id": { "type": "string" },
"blocking_action": { "type": "string" }
}
},
"watchdogFiredPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"watchdog_type",
"trigger_reason"
],
"properties": {
"watchdog_type": { "$ref": "#/$defs/nonEmptyString" },
"trigger_reason": { "$ref": "#/$defs/nonEmptyString" },
"triggered_at": { "type": "string", "format": "date-time" },
"policy_id": { "type": "string" },
"severity": { "type": "string" }
}
},
"reportAnchorMissingPayload": {
"type": "object",
"additionalProperties": true,
"required": [
"required_for",
"gate_action"
],
"properties": {
"required_for": { "$ref": "#/$defs/nonEmptyString" },
"gate_action": { "$ref": "#/$defs/nonEmptyString" },
"missing_anchor_kind": { "type": "string" },
"attempted_action": { "type": "string" },
"blocking": { "type": "boolean" }
}
},
"forcedOperatorUpdatePayload": {
"type": "object",
"additionalProperties": true,
"required": [
"reason",
"update_channel",
"trigger_event_type"
],
"properties": {
"reason": { "$ref": "#/$defs/nonEmptyString" },
"update_channel": { "$ref": "#/$defs/nonEmptyString" },
"trigger_event_type": { "$ref": "#/$defs/nonEmptyString" },
"update_ref": { "type": "string" },
"severity": { "type": "string" },
"deadline_breached": { "type": "boolean" }
}
},
"taskStartedEvent": {
"type": "object",
"properties": {
"event_type": { "const": "task_started" },
"payload": { "$ref": "#/$defs/taskStartedPayload" }
}
},
"taskCheckpointDueEvent": {
"type": "object",
"properties": {
"event_type": { "const": "task_checkpoint_due" },
"payload": { "$ref": "#/$defs/taskCheckpointDuePayload" }
}
},
"taskCheckpointSentEvent": {
"type": "object",
"properties": {
"event_type": { "const": "task_checkpoint_sent" },
"payload": { "$ref": "#/$defs/taskCheckpointSentPayload" }
}
},
"taskStatusChangedEvent": {
"type": "object",
"properties": {
"event_type": { "const": "task_status_changed" },
"payload": { "$ref": "#/$defs/taskStatusChangedPayload" }
}
},
"taskClaimedCompleteEvent": {
"type": "object",
"properties": {
"event_type": { "const": "task_claimed_complete" },
"payload": { "$ref": "#/$defs/taskClaimedCompletePayload" }
}
},
"taskEvidenceAttachedEvent": {
"type": "object",
"properties": {
"event_type": { "const": "task_evidence_attached" },
"payload": { "$ref": "#/$defs/taskEvidenceAttachedPayload" },
"evidence_refs": {
"type": "array",
"minItems": 1
}
}
},
"subagentSpawnedEvent": {
"type": "object",
"properties": {
"event_type": { "const": "subagent_spawned" },
"payload": { "$ref": "#/$defs/subagentSpawnedPayload" }
}
},
"subagentSpawnFailedEvent": {
"type": "object",
"properties": {
"event_type": { "const": "subagent_spawn_failed" },
"payload": { "$ref": "#/$defs/subagentSpawnFailedPayload" }
}
},
"subagentCompletedEvent": {
"type": "object",
"properties": {
"event_type": { "const": "subagent_completed" },
"payload": { "$ref": "#/$defs/subagentCompletedPayload" }
}
},
"subagentResultForwardedEvent": {
"type": "object",
"properties": {
"event_type": { "const": "subagent_result_forwarded" },
"payload": { "$ref": "#/$defs/subagentResultForwardedPayload" }
}
},
"subagentResultNotForwardedEvent": {
"type": "object",
"properties": {
"event_type": { "const": "subagent_result_not_forwarded" },
"payload": { "$ref": "#/$defs/subagentResultNotForwardedPayload" }
}
},
"silenceTimeoutEvent": {
"type": "object",
"properties": {
"event_type": { "const": "silence_timeout" },
"payload": { "$ref": "#/$defs/silenceTimeoutPayload" }
}
},
"watchdogFiredEvent": {
"type": "object",
"properties": {
"event_type": { "const": "watchdog_fired" },
"payload": { "$ref": "#/$defs/watchdogFiredPayload" }
}
},
"operatorReviewRequestedEvent": {
"type": "object",
"properties": {
"event_type": { "const": "operator_review_requested" },
"payload": { "$ref": "#/$defs/operatorReviewRequestedPayload" }
}
},
"reportAnchorMissingEvent": {
"type": "object",
"properties": {
"event_type": { "const": "report_anchor_missing" },
"payload": { "$ref": "#/$defs/reportAnchorMissingPayload" }
}
},
"forcedOperatorUpdateEvent": {
"type": "object",
"properties": {
"event_type": { "const": "forced_operator_update" },
"payload": { "$ref": "#/$defs/forcedOperatorUpdatePayload" }
}
}
}
}