info-tech-canon/infospace/schemas/emission-cadence.schema.yaml
tegwick b081d39da1
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 3s
Implement canon conformance and maintenance optimizations
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a06e82-3e08-7042-a79d-438ac6eed8db
2026-09-05 00:50:09 +02:00

159 lines
4 KiB
YAML

$schema: https://json-schema.org/draft/2020-12/schema
$id: https://info-tech-canon.local/schemas/emission-cadence.schema.yaml
title: InfoTechCanon EmissionCadenceDeclaration 0.1
description: Generic source-authored event emission cadence declaration.
type: object
required:
- schema_version
- declaration_id
- source
- sources
properties:
schema_version:
const: "0.1"
declaration_id:
$ref: "#/$defs/non_empty_string"
source:
$ref: "#/$defs/non_empty_string"
stream_id:
$ref: "#/$defs/non_empty_string"
sources:
type: array
minItems: 1
items:
$ref: "#/$defs/cadence_entry"
extensions:
$ref: "#/$defs/extensions"
additionalProperties: false
$defs:
non_empty_string:
type: string
minLength: 1
duration:
type: string
pattern: "^(?:P(?=\\d|T\\d)(?:\\d+D)?(?:T(?:\\d+H)?(?:\\d+M)?(?:\\d+S)?)?|[1-9][0-9]*(?:s|m|h|d))$"
extensions:
type: object
minProperties: 1
propertyNames:
pattern: "^[a-z][a-z0-9.-]*$"
additionalProperties:
type: object
heartbeat:
type: object
required:
- event_class
- assertion
- missing
properties:
event_class:
$ref: "#/$defs/non_empty_string"
interval:
$ref: "#/$defs/duration"
interval_seconds:
type: integer
minimum: 1
assertion:
$ref: "#/$defs/non_empty_string"
missing:
$ref: "#/$defs/non_empty_string"
extensions:
$ref: "#/$defs/extensions"
oneOf:
- required: [interval]
not:
required: [interval_seconds]
- required: [interval_seconds]
not:
required: [interval]
additionalProperties: false
reconciliation:
type: object
required:
- compare_local
- compare_observed
- divergence
properties:
compare_local:
$ref: "#/$defs/non_empty_string"
compare_observed:
$ref: "#/$defs/non_empty_string"
divergence:
$ref: "#/$defs/non_empty_string"
undrained_local:
$ref: "#/$defs/non_empty_string"
extensions:
$ref: "#/$defs/extensions"
additionalProperties: false
cadence_entry:
type: object
required:
- source_id
- event_class
- form
properties:
source_id:
$ref: "#/$defs/non_empty_string"
source_system:
$ref: "#/$defs/non_empty_string"
event_class:
$ref: "#/$defs/non_empty_string"
form:
enum:
- expected-rate
- heartbeat-or-reconciliation
window:
$ref: "#/$defs/duration"
window_seconds:
type: integer
minimum: 1
expected_min:
type: integer
minimum: 0
drop_below:
$ref: "#/$defs/non_empty_string"
heartbeat:
$ref: "#/$defs/heartbeat"
reconciliation:
$ref: "#/$defs/reconciliation"
extensions:
$ref: "#/$defs/extensions"
allOf:
- if:
properties:
form:
const: expected-rate
required: [form]
then:
required:
- expected_min
- drop_below
oneOf:
- required: [window]
not:
anyOf:
- required: [window_seconds]
- required: [heartbeat]
- required: [reconciliation]
- required: [window_seconds]
not:
anyOf:
- required: [window]
- required: [heartbeat]
- required: [reconciliation]
- if:
properties:
form:
const: heartbeat-or-reconciliation
required: [form]
then:
anyOf:
- required: [heartbeat]
- required: [reconciliation]
not:
anyOf:
- required: [window]
- required: [window_seconds]
- required: [expected_min]
- required: [drop_below]
additionalProperties: false