🤖 Generated by the Agentic Engineer
Evidence
17 of the 20 Repository managed resources in github-config sat in a failing sync state for weeks with no signal. Measured on the live cluster 2026-07-27:
- Every one of the 17 reports
Synced: False.
- Every one of the 17 simultaneously reports
Ready: True.
That second line is why nothing surfaced it. Any health check keyed on Ready — which is the obvious one — reads this fleet as entirely healthy. Meanwhile no declared setting was reaching GitHub at all, including the visibility pins two repositories rely on. The control was voided silently, which is worse than not having it, because the config file still reads as the truth.
This is the detection half of devantler-tech/.github#123. The trigger for that specific outage is fixed (devantler-tech/.github#125), but nothing would surface the next one.
Problem
There is currently no mechanism that could raise this. docs/dr/alerting.md records that Coroot replaced the kube-prometheus-stack assembly, and with it went the PrometheusRule / ServiceMonitor / PodMonitor CRDs — there is no prometheus-operator in the cluster. Coroot's built-in alerting is SLO-based plus automatic inspections (node down, OOM kills, crashloops, disk filling, deployment issues, saturation). Those cover workload health well, and none of them observes a Crossplane managed resource's Synced condition.
So "alert on Synced: False" is not a rule we can simply author — the usual surface for it does not exist here. That is the actual work in this issue, and it is why it is worth its own item rather than a line on the parent.
Expected behaviour
A managed resource that stops reconciling raises a signal to the same Slack destination Coroot already delivers to, rather than sitting quietly. Scope it to the condition, not to one provider: this failure mode is generic to every Crossplane managed resource, not specific to GitHub repositories.
Worth weighing (not a decision):
- A small exporter that surfaces managed-resource conditions as metrics Coroot's bundled Prometheus can scrape, then a Coroot alert on it.
- A Kyverno policy or admission-time check that reports resources stuck in
Synced: False beyond a threshold.
- A scheduled job that queries the conditions directly and posts to the existing webhook.
Option 1 generalises best and reuses the delivery path already wired declaratively; options 2 and 3 are cheaper.
Acceptance criteria
Rough size: M.
Part of devantler-tech/.github#123
Evidence
17 of the 20
Repositorymanaged resources ingithub-configsat in a failing sync state for weeks with no signal. Measured on the live cluster 2026-07-27:Synced: False.Ready: True.That second line is why nothing surfaced it. Any health check keyed on
Ready— which is the obvious one — reads this fleet as entirely healthy. Meanwhile no declared setting was reaching GitHub at all, including the visibility pins two repositories rely on. The control was voided silently, which is worse than not having it, because the config file still reads as the truth.This is the detection half of devantler-tech/.github#123. The trigger for that specific outage is fixed (devantler-tech/.github#125), but nothing would surface the next one.
Problem
There is currently no mechanism that could raise this.
docs/dr/alerting.mdrecords that Coroot replaced thekube-prometheus-stackassembly, and with it went thePrometheusRule/ServiceMonitor/PodMonitorCRDs — there is no prometheus-operator in the cluster. Coroot's built-in alerting is SLO-based plus automatic inspections (node down, OOM kills, crashloops, disk filling, deployment issues, saturation). Those cover workload health well, and none of them observes a Crossplane managed resource'sSyncedcondition.So "alert on
Synced: False" is not a rule we can simply author — the usual surface for it does not exist here. That is the actual work in this issue, and it is why it is worth its own item rather than a line on the parent.Expected behaviour
A managed resource that stops reconciling raises a signal to the same Slack destination Coroot already delivers to, rather than sitting quietly. Scope it to the condition, not to one provider: this failure mode is generic to every Crossplane managed resource, not specific to GitHub repositories.
Worth weighing (not a decision):
Synced: Falsebeyond a threshold.Option 1 generalises best and reuses the delivery path already wired declaratively; options 2 and 3 are cheaper.
Acceptance criteria
Synced: Falsebeyond a short grace period produces an alert, delivered through the existing Coroot → Slack path.Synced, not onReady— the two disagreed on 17 resources here, andReadyalone is what made this invisible.Repository.Rough size: M.
Part of devantler-tech/.github#123