Files
copilotkit__copilotkit/showcase/harness/config/alerts/image-drift.yml
Jordan Ritter 0522b7fa41 refactor(showcase): rename showcase/ops → showcase/harness
The monitoring/alerting service is a test harness (probes, assertions,
alerting), not an operations service. Rename the directory, package
name (@copilotkit/showcase-ops → @copilotkit/showcase-harness), all
internal references (Dockerfile, Prometheus metric prefix
showcase_ops_ → showcase_harness_, orchestrator log messages, probe
YAML nameExcludes, test fixtures), and regenerate pnpm-lock.yaml.

Wire protocol names (X-Ops-* headers) and shell-dashboard internal
API naming (OPS_BASE_URL, ops-api.ts) are intentionally unchanged —
they are stable contracts between sender and receiver.
2026-04-28 13:48:12 -07:00

47 lines
1.7 KiB
YAML

id: image-drift
name: "GHCR image drift vs showcase/ or examples/integrations/ HEAD"
owner: "@oss"
signal:
dimension: image_drift
triggers:
# set_changed catches stale-set transitions (services newly out of date).
# set_errored catches the pure-error case: a service flips stale→errored
# without changing the stale set, so set_changed stays false but the
# template's {{signal.errored.length}} would silently render 0 without
# firing. deriveSignalFlags emits set_errored when signal.errored is
# non-empty; StringTriggerEnum accepts it (rules/schema.ts R5 C4).
- set_changed
- set_errored
conditions:
guards:
- minDeployAgeMin: 20
actions:
- kind: rebuild
target: railway_redeploy
forEach: "{{signal.staleServices}}"
targets:
- kind: slack_webhook
webhook: oss_alerts
# Template only references fields the ImageDriftSignal probe actually
# emits. The `rebuildFailures` branch (present in an earlier revision)
# was dead code — the probe never sets that field, so the {{#...}}
# section never rendered. Removed to prevent another reviewer from
# trusting dead UI.
#
# Split text reflects F6.6: triggeredCount historically summed stale +
# errored, but `forEach` only redeploys stale. Render both counts
# distinctly so the Slack message matches what actions took place.
# Coordination with cluster 4: probe should keep emitting
# `staleCount` and `erroredCount` (or the template needs updating to
# derive them from the arrays). Template below falls back to array
# lengths via mustache `.length` for robustness.
template:
text: |
:package: *Image drift detected* — {{signal.staleServices.length}} {{signal.rebuildNoun}} triggered, {{signal.errored.length}} errored (<{{{event.runUrl}}}|run>)