165 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
| {
 | ||
|   "$id": "https://stella-ops.org/schemas/events/scanner.event.report.ready@1.json",
 | ||
|   "$schema": "http://json-schema.org/draft-07/schema#",
 | ||
|   "title": "Scanner orchestrator event – report ready (v1)",
 | ||
|   "type": "object",
 | ||
|   "additionalProperties": false,
 | ||
|   "required": [
 | ||
|     "eventId",
 | ||
|     "kind",
 | ||
|     "version",
 | ||
|     "tenant",
 | ||
|     "occurredAt",
 | ||
|     "source",
 | ||
|     "idempotencyKey",
 | ||
|     "payload"
 | ||
|   ],
 | ||
|   "properties": {
 | ||
|     "eventId": {
 | ||
|       "type": "string",
 | ||
|       "format": "uuid",
 | ||
|       "description": "Globally unique identifier for this occurrence."
 | ||
|     },
 | ||
|     "kind": {
 | ||
|       "const": "scanner.event.report.ready",
 | ||
|       "description": "Event kind identifier consumed by orchestrator subscribers."
 | ||
|     },
 | ||
|     "version": {
 | ||
|       "const": 1,
 | ||
|       "description": "Schema version for orchestrator envelopes."
 | ||
|     },
 | ||
|     "tenant": {
 | ||
|       "type": "string",
 | ||
|       "description": "Tenant that owns the scan/report."
 | ||
|     },
 | ||
|     "occurredAt": {
 | ||
|       "type": "string",
 | ||
|       "format": "date-time",
 | ||
|       "description": "Timestamp (UTC) when the report transitioned to ready."
 | ||
|     },
 | ||
|     "recordedAt": {
 | ||
|       "type": "string",
 | ||
|       "format": "date-time",
 | ||
|       "description": "Timestamp (UTC) when the event was persisted. Optional."
 | ||
|     },
 | ||
|     "source": {
 | ||
|       "type": "string",
 | ||
|       "description": "Producer identifier, e.g. `scanner.webservice`."
 | ||
|     },
 | ||
|     "idempotencyKey": {
 | ||
|       "type": "string",
 | ||
|       "minLength": 8,
 | ||
|       "description": "Deterministic key used to deduplicate events downstream."
 | ||
|     },
 | ||
|     "correlationId": {
 | ||
|       "type": "string",
 | ||
|       "description": "Correlation identifier that ties this event to a request or workflow."
 | ||
|     },
 | ||
|     "traceId": {
 | ||
|       "type": "string",
 | ||
|       "description": "W3C trace ID (32 hex chars) for distributed tracing."
 | ||
|     },
 | ||
|     "spanId": {
 | ||
|       "type": "string",
 | ||
|       "description": "Optional span identifier associated with traceId."
 | ||
|     },
 | ||
|     "scope": {
 | ||
|       "type": "object",
 | ||
|       "additionalProperties": false,
 | ||
|       "required": ["repo", "digest"],
 | ||
|       "properties": {
 | ||
|         "namespace": {"type": "string"},
 | ||
|         "repo": {"type": "string"},
 | ||
|         "digest": {"type": "string"},
 | ||
|         "component": {"type": "string"},
 | ||
|         "image": {"type": "string"}
 | ||
|       }
 | ||
|     },
 | ||
|     "attributes": {
 | ||
|       "type": "object",
 | ||
|       "description": "String attributes for downstream correlation (policy revision, scan id, etc.).",
 | ||
|       "additionalProperties": {"type": "string"}
 | ||
|     },
 | ||
|     "payload": {
 | ||
|       "type": "object",
 | ||
|       "additionalProperties": true,
 | ||
|       "required": ["reportId", "verdict", "summary", "links", "report"],
 | ||
|       "properties": {
 | ||
|         "reportId": {"type": "string"},
 | ||
|         "scanId": {"type": "string"},
 | ||
|         "imageDigest": {"type": "string"},
 | ||
|         "generatedAt": {"type": "string", "format": "date-time"},
 | ||
|         "verdict": {"enum": ["pass", "warn", "fail"]},
 | ||
|         "summary": {
 | ||
|           "type": "object",
 | ||
|           "additionalProperties": false,
 | ||
|           "required": ["total", "blocked", "warned", "ignored", "quieted"],
 | ||
|           "properties": {
 | ||
|             "total": {"type": "integer", "minimum": 0},
 | ||
|             "blocked": {"type": "integer", "minimum": 0},
 | ||
|             "warned": {"type": "integer", "minimum": 0},
 | ||
|             "ignored": {"type": "integer", "minimum": 0},
 | ||
|             "quieted": {"type": "integer", "minimum": 0}
 | ||
|           }
 | ||
|         },
 | ||
|         "delta": {
 | ||
|           "type": "object",
 | ||
|           "additionalProperties": false,
 | ||
|           "properties": {
 | ||
|             "newCritical": {"type": "integer", "minimum": 0},
 | ||
|             "newHigh": {"type": "integer", "minimum": 0},
 | ||
|             "kev": {
 | ||
|               "type": "array",
 | ||
|               "items": {"type": "string"}
 | ||
|             }
 | ||
|           }
 | ||
|         },
 | ||
|         "quietedFindingCount": {
 | ||
|           "type": "integer",
 | ||
|           "minimum": 0
 | ||
|         },
 | ||
|         "policy": {
 | ||
|           "type": "object",
 | ||
|           "description": "Policy revision metadata surfaced alongside the report."
 | ||
|         },
 | ||
|         "links": {
 | ||
|           "type": "object",
 | ||
|           "additionalProperties": false,
 | ||
|           "properties": {
 | ||
|             "ui": {"type": "string", "format": "uri"},
 | ||
|             "report": {"type": "string", "format": "uri"},
 | ||
|             "policy": {"type": "string", "format": "uri"},
 | ||
|             "attestation": {"type": "string", "format": "uri"}
 | ||
|           }
 | ||
|         },
 | ||
|         "dsse": {
 | ||
|           "type": "object",
 | ||
|           "additionalProperties": false,
 | ||
|           "required": ["payloadType", "payload", "signatures"],
 | ||
|           "properties": {
 | ||
|             "payloadType": {"type": "string"},
 | ||
|             "payload": {"type": "string"},
 | ||
|             "signatures": {
 | ||
|               "type": "array",
 | ||
|               "items": {
 | ||
|                 "type": "object",
 | ||
|                 "additionalProperties": false,
 | ||
|                 "required": ["keyId", "algorithm", "signature"],
 | ||
|                 "properties": {
 | ||
|                   "keyId": {"type": "string"},
 | ||
|                   "algorithm": {"type": "string"},
 | ||
|                   "signature": {"type": "string"}
 | ||
|                 }
 | ||
|               }
 | ||
|             }
 | ||
|           }
 | ||
|         },
 | ||
|         "report": {
 | ||
|           "type": "object",
 | ||
|           "description": "Canonical scanner report document that aligns with the DSSE payload."
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| }
 |