Skip to main content
services.yaml is the customer-authoritative service catalog. Agents use it to know who owns each service, what tier it is, how it depends on other services, and where the runbook lives. Authoring it is optional — sureops will discover services from your telemetry without it — but agents are significantly more useful with it.

Minimum viable contract

Five fields per service. Everything else is optional.

Field reference

Core fields


Extended fields (optional, additive)

These fields give agents richer context for fix-PR generation and blast-radius analysis. Teams with the simpler flat schema above continue to parse correctly — unknown nested keys produce warnings, not errors.

identifiers — cross-source aliases

Helps sureops match your contract entry with telemetry signals from different sources.

image — container image metadata

Used by the Fix-PR Agent to generate accurate rollback and redeployment actions.

source — source code metadata

Used by the Fix-PR Agent to locate the relevant code path.

owners — structured ownership

Richer ownership metadata for routing review requests.

deploy — deployment mechanism

Used to determine how to apply a fix (Helm rollback vs. Kustomize vs. ArgoCD).

Complete example


Owner auto-derivation from CODEOWNERS

If you omit owner for a service, sureops looks up the repository’s CODEOWNERS file and uses the team that owns the service’s source path. File locations checked (first match wins): .github/CODEOWNERS, CODEOWNERS, docs/CODEOWNERS. Match strategy (per service, in order):
  1. src_path you declared on the service (most specific)
  2. The service name as a directory hint
  3. src/<name> and <name>/ variants
  4. Catch-all (* rule, if any)
The owned_by edge in the service topology carries source: "explicit" (you declared it) or source: "codeowners" (derived), so the UI and agents can show which is which.

Backstage compatibility

All core field names are taken from the Backstage entity model. If you adopt Backstage later, you can wrap your existing entries in a Backstage kind: Component envelope. sureops also accepts the full Backstage shape directly:
Both shapes produce the same service topology in sureops. Teams already running Backstage can point both tools at the same catalog-info.yaml.

Conflict resolution with auto-discovery

sureops discovers services from your telemetry (OTel service names, Kubernetes labels) and merges that data with your contract. Your contract always wins for any field you declared. Auto-discovery only fills in fields you didn’t specify. Provenance ranking (highest wins): manual > customer_contract > telemetry > kubernetes_scan. In practice: declare what you care about (ownership, runbook, tier). You don’t need to declare fields telemetry already provides (image tags, replica counts, namespace).

Validation rules

  • name must match OTel service name format: lowercase letters, digits, and hyphens; must start with a letter
  • repo must be in <owner>/<repo> or full URL format
  • dependsOn references should resolve to other entries in the same file; unknown references produce a warning, not an error
  • tier must be one of P1, P2, P3
  • Nested blocks (identifiers, image, source, owners, deploy) must be mappings if present
Validation errors and warnings appear in Settings → Knowledge Base → Last sync after each ingest.