Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a06e82-3e08-7042-a79d-438ac6eed8db
159 lines
4 KiB
YAML
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
|