All checks were successful
- cli: SIGTERM/SIGINT (kubectl delete job) sets the stop flag; the runner stops at the next step boundary and reverts. A stop before consume refuses and spends nothing. - posture feedback v0.1 section 4a: --receipts reads bounded-executor events through the receipt validator: execution-receipt-missing, -not-completed, -reverted, -budget-pressure, and the aggregate execution-recurring-revert. Owners come from the authoritative tools/posture-feedback/execution-owners.yaml, never inferred. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 523928@bnt-lap001 Assistant-Session: 6c737afb-9c14-4152-9f02-477214b9c350
150 lines
3.8 KiB
JSON
150 lines
3.8 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://netkingdom.local/schemas/posture-feedback-report_v0.1.schema.json",
|
|
"title": "NetKingdom Posture Feedback Report v0.1",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"apiVersion",
|
|
"kind",
|
|
"ok",
|
|
"as_of",
|
|
"horizon_days",
|
|
"fail_on",
|
|
"automation",
|
|
"summary",
|
|
"validation_errors",
|
|
"findings",
|
|
"report_digest"
|
|
],
|
|
"properties": {
|
|
"apiVersion": {
|
|
"const": "netkingdom.io/posture-feedback/v0.1"
|
|
},
|
|
"kind": {
|
|
"const": "PostureFeedbackReport"
|
|
},
|
|
"ok": {
|
|
"type": "boolean"
|
|
},
|
|
"as_of": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"horizon_days": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"fail_on": {
|
|
"enum": ["none", "low", "medium", "high"]
|
|
},
|
|
"automation": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"mode",
|
|
"external_write_permitted",
|
|
"policy_mutation_permitted",
|
|
"declaration_mutation_permitted"
|
|
],
|
|
"properties": {
|
|
"mode": {"const": "proposal-only"},
|
|
"external_write_permitted": {"const": false},
|
|
"policy_mutation_permitted": {"const": false},
|
|
"declaration_mutation_permitted": {"const": false}
|
|
}
|
|
},
|
|
"summary": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["total", "high", "medium", "low", "unknown_owner"],
|
|
"properties": {
|
|
"total": {"type": "integer", "minimum": 0},
|
|
"high": {"type": "integer", "minimum": 0},
|
|
"medium": {"type": "integer", "minimum": 0},
|
|
"low": {"type": "integer", "minimum": 0},
|
|
"unknown_owner": {"type": "integer", "minimum": 0}
|
|
}
|
|
},
|
|
"validation_errors": {
|
|
"type": "array",
|
|
"items": {"type": "string", "minLength": 1}
|
|
},
|
|
"findings": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/finding"
|
|
}
|
|
},
|
|
"report_digest": {
|
|
"type": "string",
|
|
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
}
|
|
},
|
|
"$defs": {
|
|
"finding": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"id",
|
|
"class",
|
|
"severity",
|
|
"source",
|
|
"service",
|
|
"control",
|
|
"owner",
|
|
"evidence_state",
|
|
"reason",
|
|
"recommended_action"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"pattern": "^NKFB-[0-9a-f]{16}$"
|
|
},
|
|
"class": {
|
|
"enum": [
|
|
"posture-review-overdue",
|
|
"posture-review-due-soon",
|
|
"zone-review-overdue",
|
|
"zone-review-due-soon",
|
|
"evidence-freshness-unknown",
|
|
"evidence-expired",
|
|
"evidence-due-soon",
|
|
"implemented-not-evidenced",
|
|
"declared-gap",
|
|
"execution-receipt-missing",
|
|
"execution-not-completed",
|
|
"execution-reverted",
|
|
"execution-budget-pressure",
|
|
"execution-recurring-revert"
|
|
]
|
|
},
|
|
"severity": {
|
|
"enum": ["low", "medium", "high"]
|
|
},
|
|
"source": {"type": "string", "minLength": 1},
|
|
"service": {"type": "string", "minLength": 1},
|
|
"control": {"type": "string", "minLength": 1},
|
|
"owner": {"type": "string", "minLength": 1},
|
|
"evidence_state": {
|
|
"enum": [
|
|
"not-applicable",
|
|
"due-soon",
|
|
"overdue",
|
|
"unknown",
|
|
"expired",
|
|
"implemented",
|
|
"gap"
|
|
]
|
|
},
|
|
"due": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"reason": {"type": "string", "minLength": 1},
|
|
"recommended_action": {"type": "string", "minLength": 1}
|
|
}
|
|
}
|
|
}
|
|
}
|