Files
git.stella-ops.org/docs/schemas/console-observability.schema.json
StellaOps Bot 4042fc2184
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
release-manifest-verify / verify (push) Has been cancelled
Add unit tests for PackRunAttestation and SealedInstallEnforcer
- Implement comprehensive tests for PackRunAttestationService, covering attestation generation, verification, and event emission.
- Add tests for SealedInstallEnforcer to validate sealed install requirements and enforcement logic.
- Introduce a MonacoLoaderService stub for testing purposes to prevent Monaco workers/styles from loading during Karma runs.
2025-12-06 22:25:30 +02:00

623 lines
16 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://stella-ops.org/schemas/console-observability.schema.json",
"title": "StellaOps Console Observability Schema",
"description": "Schema for console observability widgets, asset captures, and deterministic hashes. Unblocks DOCS-CONSOLE-OBS-52-001/002 and CONOBS5201 (2+ tasks).",
"type": "object",
"definitions": {
"WidgetCapture": {
"type": "object",
"description": "Captured widget screenshot/payload",
"required": ["capture_id", "widget_id", "captured_at", "digest"],
"properties": {
"capture_id": {
"type": "string",
"format": "uuid"
},
"widget_id": {
"type": "string",
"description": "Widget identifier"
},
"widget_type": {
"type": "string",
"enum": [
"findings_summary",
"severity_distribution",
"risk_trend",
"remediation_progress",
"compliance_status",
"asset_inventory",
"vulnerability_timeline",
"exception_status",
"scan_activity",
"alert_feed"
]
},
"captured_at": {
"type": "string",
"format": "date-time"
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$",
"description": "Content hash for determinism verification"
},
"screenshot": {
"$ref": "#/definitions/ScreenshotRef"
},
"payload": {
"$ref": "#/definitions/WidgetPayload"
},
"viewport": {
"$ref": "#/definitions/ViewportConfig"
},
"theme": {
"type": "string",
"enum": ["light", "dark", "high_contrast"]
},
"locale": {
"type": "string",
"default": "en-US"
}
}
},
"ScreenshotRef": {
"type": "object",
"description": "Reference to captured screenshot",
"properties": {
"filename": {
"type": "string"
},
"format": {
"type": "string",
"enum": ["png", "webp", "svg"]
},
"width": {
"type": "integer"
},
"height": {
"type": "integer"
},
"storage_uri": {
"type": "string",
"format": "uri"
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
}
}
},
"WidgetPayload": {
"type": "object",
"description": "Widget data payload",
"properties": {
"data": {
"type": "object",
"additionalProperties": true,
"description": "Canonical JSON data for widget"
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$",
"description": "Hash of canonical JSON payload"
},
"schema_version": {
"type": "string"
}
}
},
"ViewportConfig": {
"type": "object",
"description": "Viewport configuration for capture",
"properties": {
"width": {
"type": "integer",
"default": 1920
},
"height": {
"type": "integer",
"default": 1080
},
"device_scale_factor": {
"type": "number",
"default": 1
}
}
},
"DashboardCapture": {
"type": "object",
"description": "Full dashboard capture",
"required": ["capture_id", "dashboard_id", "captured_at"],
"properties": {
"capture_id": {
"type": "string",
"format": "uuid"
},
"dashboard_id": {
"type": "string"
},
"dashboard_name": {
"type": "string"
},
"captured_at": {
"type": "string",
"format": "date-time"
},
"widgets": {
"type": "array",
"items": {
"$ref": "#/definitions/WidgetCapture"
}
},
"layout": {
"$ref": "#/definitions/DashboardLayout"
},
"aggregate_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$",
"description": "Hash of all widget digests combined"
}
}
},
"DashboardLayout": {
"type": "object",
"description": "Dashboard layout configuration",
"properties": {
"columns": {
"type": "integer",
"default": 12
},
"row_height": {
"type": "integer",
"default": 100
},
"widgets": {
"type": "array",
"items": {
"$ref": "#/definitions/WidgetPosition"
}
}
}
},
"WidgetPosition": {
"type": "object",
"description": "Widget position in grid",
"required": ["widget_id", "x", "y", "width", "height"],
"properties": {
"widget_id": {
"type": "string"
},
"x": {
"type": "integer",
"minimum": 0
},
"y": {
"type": "integer",
"minimum": 0
},
"width": {
"type": "integer",
"minimum": 1
},
"height": {
"type": "integer",
"minimum": 1
}
}
},
"ObservabilityHubConfig": {
"type": "object",
"description": "Observability Hub configuration",
"properties": {
"hub_id": {
"type": "string"
},
"name": {
"type": "string"
},
"dashboards": {
"type": "array",
"items": {
"$ref": "#/definitions/DashboardConfig"
}
},
"metrics_sources": {
"type": "array",
"items": {
"$ref": "#/definitions/MetricsSource"
}
},
"alert_rules": {
"type": "array",
"items": {
"$ref": "#/definitions/AlertRule"
}
},
"retention_days": {
"type": "integer",
"default": 90
}
}
},
"DashboardConfig": {
"type": "object",
"description": "Dashboard configuration",
"required": ["dashboard_id", "name"],
"properties": {
"dashboard_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"category": {
"type": "string",
"enum": ["security", "compliance", "operations", "executive"]
},
"refresh_interval_seconds": {
"type": "integer",
"default": 300
},
"time_range": {
"$ref": "#/definitions/TimeRange"
},
"filters": {
"type": "array",
"items": {
"$ref": "#/definitions/FilterConfig"
}
}
}
},
"MetricsSource": {
"type": "object",
"description": "Metrics data source",
"required": ["source_id", "type"],
"properties": {
"source_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": ["prometheus", "opentelemetry", "internal", "api"]
},
"endpoint": {
"type": "string",
"format": "uri"
},
"refresh_interval_seconds": {
"type": "integer"
}
}
},
"AlertRule": {
"type": "object",
"description": "Alert rule definition",
"required": ["rule_id", "name", "condition"],
"properties": {
"rule_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"condition": {
"$ref": "#/definitions/AlertCondition"
},
"severity": {
"type": "string",
"enum": ["critical", "high", "medium", "low", "info"]
},
"enabled": {
"type": "boolean",
"default": true
},
"notification_channels": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"AlertCondition": {
"type": "object",
"description": "Alert trigger condition",
"properties": {
"metric": {
"type": "string"
},
"operator": {
"type": "string",
"enum": ["gt", "gte", "lt", "lte", "eq", "neq"]
},
"threshold": {
"type": "number"
},
"duration_seconds": {
"type": "integer",
"description": "Duration condition must be true"
}
}
},
"TimeRange": {
"type": "object",
"description": "Time range configuration",
"properties": {
"type": {
"type": "string",
"enum": ["relative", "absolute"]
},
"relative_value": {
"type": "string",
"description": "e.g., 24h, 7d, 30d"
},
"start": {
"type": "string",
"format": "date-time"
},
"end": {
"type": "string",
"format": "date-time"
}
}
},
"FilterConfig": {
"type": "object",
"description": "Dashboard filter configuration",
"properties": {
"filter_id": {
"type": "string"
},
"label": {
"type": "string"
},
"type": {
"type": "string",
"enum": ["select", "multi_select", "date_range", "text"]
},
"field": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"label": {
"type": "string"
}
}
}
}
}
},
"ForensicsCapture": {
"type": "object",
"description": "Forensics data capture",
"required": ["capture_id", "incident_id", "captured_at"],
"properties": {
"capture_id": {
"type": "string",
"format": "uuid"
},
"incident_id": {
"type": "string"
},
"captured_at": {
"type": "string",
"format": "date-time"
},
"capture_type": {
"type": "string",
"enum": ["snapshot", "timeline", "correlation", "evidence_chain"]
},
"data_points": {
"type": "array",
"items": {
"$ref": "#/definitions/ForensicsDataPoint"
}
},
"correlations": {
"type": "array",
"items": {
"$ref": "#/definitions/CorrelationLink"
}
},
"evidence_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
}
}
},
"ForensicsDataPoint": {
"type": "object",
"description": "Individual forensics data point",
"properties": {
"point_id": {
"type": "string"
},
"timestamp": {
"type": "string",
"format": "date-time"
},
"source": {
"type": "string"
},
"data_type": {
"type": "string",
"enum": ["finding", "event", "metric", "log", "alert"]
},
"data": {
"type": "object",
"additionalProperties": true
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
}
}
},
"CorrelationLink": {
"type": "object",
"description": "Correlation between data points",
"properties": {
"source_id": {
"type": "string"
},
"target_id": {
"type": "string"
},
"relationship": {
"type": "string",
"enum": ["caused_by", "related_to", "precedes", "follows", "indicates"]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
},
"AssetManifest": {
"type": "object",
"description": "Manifest of console assets for documentation",
"required": ["manifest_id", "version", "assets"],
"properties": {
"manifest_id": {
"type": "string"
},
"version": {
"type": "string"
},
"generated_at": {
"type": "string",
"format": "date-time"
},
"assets": {
"type": "array",
"items": {
"$ref": "#/definitions/AssetEntry"
}
},
"aggregate_digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
}
}
},
"AssetEntry": {
"type": "object",
"description": "Individual asset entry",
"required": ["asset_id", "filename", "digest"],
"properties": {
"asset_id": {
"type": "string"
},
"filename": {
"type": "string"
},
"category": {
"type": "string",
"enum": ["screenshot", "payload", "config", "schema"]
},
"description": {
"type": "string"
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
},
"size_bytes": {
"type": "integer"
},
"mime_type": {
"type": "string"
}
}
}
},
"properties": {
"captures": {
"type": "array",
"items": {
"$ref": "#/definitions/WidgetCapture"
}
},
"manifest": {
"$ref": "#/definitions/AssetManifest"
}
},
"examples": [
{
"manifest": {
"manifest_id": "console-obs-2025.10",
"version": "2025.10.0",
"generated_at": "2025-12-06T10:00:00Z",
"assets": [
{
"asset_id": "findings-summary-widget",
"filename": "findings-summary.png",
"category": "screenshot",
"description": "Findings summary widget showing severity distribution",
"digest": "sha256:abc123def456789012345678901234567890123456789012345678901234abcd",
"size_bytes": 45678,
"mime_type": "image/png"
},
{
"asset_id": "findings-summary-payload",
"filename": "findings-summary.json",
"category": "payload",
"description": "Canonical JSON payload for findings summary",
"digest": "sha256:def456abc789012345678901234567890123456789012345678901234abcdef",
"size_bytes": 2345,
"mime_type": "application/json"
}
],
"aggregate_digest": "sha256:agg123def456789012345678901234567890123456789012345678901234agg"
},
"captures": [
{
"capture_id": "550e8400-e29b-41d4-a716-446655440000",
"widget_id": "findings-summary",
"widget_type": "findings_summary",
"captured_at": "2025-12-06T10:00:00Z",
"digest": "sha256:abc123def456789012345678901234567890123456789012345678901234abcd",
"screenshot": {
"filename": "findings-summary.png",
"format": "png",
"width": 400,
"height": 300,
"digest": "sha256:abc123def456789012345678901234567890123456789012345678901234abcd"
},
"payload": {
"data": {
"critical": 5,
"high": 23,
"medium": 67,
"low": 134,
"total": 229
},
"digest": "sha256:def456abc789012345678901234567890123456789012345678901234abcdef"
},
"viewport": {
"width": 1920,
"height": 1080
},
"theme": "light"
}
]
}
]
}