Restructure solution layout by module
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Docs CI / lint-and-preview (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Docs CI / lint-and-preview (push) Has been cancelled
				
			This commit is contained in:
		| @@ -1,164 +1,164 @@ | ||||
| { | ||||
|   "$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." | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| { | ||||
|   "$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." | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user