conduktor.io ↗

Topic Must Declare owner and data-criticality Labels

Every topic must carry `owner` (email) and `data-criticality` (C0..C3) labels.

Rationale

The single most repeated platform-engineer complaint: "we have 4,000 topics and nobody knows who owns half of them." Without an `owner` label at create-time you cannot run a stale-topic sweep, you cannot page anyone during incidents, and chargeback rollup is impossible. `data-criticality` (C0/C1/C2/C3) drives alerting thresholds downstream.

Pattern

labels.owner matches email AND labels["data-criticality"] in [C0, C1, C2, C3]

Examples

labels: { owner: "payments-team@acme.io", data-criticality: "C1" }
no labels
labels: { owner: "tbd" }

Parameters

NameDefaultDescription
allowed_criticality ["C0","C1","C2","C3"] Allowed values for data-criticality.

Implementation

Drop this YAML into Conduktor Console as a ResourcePolicy, then link it from an ApplicationInstance, Application, or KafkaCluster.

Conduktor ResourcePolicy
# Conduktor self-service ResourcePolicy
# metadata.labels is optional — has(...) guards avoid silent rejection.
---
apiVersion: self-serve/v1
kind: ResourcePolicy
metadata:
  name: topic-owner-label-required
spec:
  targetKind: Topic
  description: every topic must carry owner (email) and data-criticality (C0..C3) labels
  rules:
    - condition: 'has(metadata.labels.owner) && metadata.labels.owner.matches("^[a-z0-9._-]+@[a-z0-9.-]+\\.[a-z]{2,}$") && "data-criticality" in metadata.labels && metadata.labels["data-criticality"] in ["C0", "C1", "C2", "C3"]'
      errorMessage: "metadata.labels.owner (email) and metadata.labels[\"data-criticality\"] (C0..C3) are required — unowned topics become stale and unpageable"

Related policies

Try Conduktor Console

Enforce policies like this across your team — central audit history, pre-commit guardrails, ApplicationInstance bindings. 5-min Docker install.

Get Started →