Skip to content

Recognize changes and new events

Watch a version change

Save this as version.yaml. Push {"version":"1.0"} and then {"version":"1.1"} to /v1/ingest/deployed-version with fresh idempotency keys. The first input establishes a baseline; the second records a changed event.

apiVersion: ding.ing/v1alpha1
kind: Destination
metadata: {id: console}
spec: {type: console}
---
apiVersion: ding.ing/v1alpha1
kind: Watch
metadata: {id: deployed-version, name: Deployed version}
spec:
  source: {type: push, fields: {version: version}}
  condition: {field: version, operator: changed}
  policy: {trigger: level, interval: 0s}
  destinations: [{ref: console, events: [changed]}]

Download the manifest. Validate and apply it through the normal review flow. Baselines preserve types: the string "1" differs from the number 1. Missing fields are unknown; null is a value. Baselines survive restart and unknown observations.

Deduplicate provider events

apiVersion: ding.ing/v1alpha1
kind: Destination
metadata: {id: console}
spec: {type: console}
---
apiVersion: ding.ing/v1alpha1
kind: Watch
metadata: {id: provider-events}
spec:
  source:
    type: push
    jq: .events[]
    fields:
      id: id
      status: status
      time: timestamp
    observedAtField: time
  condition:
    field: id
    operator: new-event
    dedupFor: 24h
  policy: {trigger: level, interval: 0s}
  message: '{{.Watch}} saw {{.Value}}'
  destinations: [{ref: console, events: [new-event]}]

Download the provider-event manifest. The provider must supply stable string IDs. This example accepts an events array, selects fields, and emits each new ID once within a 24-hour deduplication horizon. Repeated sightings do not extend that horizon. After expiry an ID may emit again.

Both changed and new-event use level policy with an explicit interval; they do not open recovery incidents. Resource exhaustion becomes unknown rather than silently evicting still-valid state. Provider access and upstream calculations remain your responsibility.