Every KumaMonitor without a parentRef is placed under the root group kuma-sync/renner-uno (controller env KUMA_ROOT_GROUP). Only the root group references the email KumaNotification. An outage therefore sends one DOWN mail listing the affected groups ("Child monitors down: …") and one UP mail.
New KumaMonitor field resendInterval. It counts consecutive DOWN heartbeats, not minutes (Kuma 2.5.6 server/model/monitor.js). The root group uses 60 × 60 s, which sends an hourly reminder while it is down.
Root missing or without an ID: parentless monitors are ParentPending and requeue. Root not a group, or root with a parentRef: InvalidParent. Changes to the root group requeue all parentless monitors.
The root group counts toward the parent depth limit.
The kuma-sync Flux Kustomization gets the KumaMonitor healthCheckExprs entry.
Every KumaMonitor without a parentRef is placed under the root group `kuma-sync/renner-uno` (controller env `KUMA_ROOT_GROUP`). Only the root group references the `email` KumaNotification. An outage therefore sends one DOWN mail listing the affected groups ("Child monitors down: …") and one UP mail.
- New KumaMonitor field `resendInterval`. It counts consecutive DOWN heartbeats, not minutes (Kuma 2.5.6 `server/model/monitor.js`). The root group uses 60 × 60 s, which sends an hourly reminder while it is down.
- Root missing or without an ID: parentless monitors are `ParentPending` and requeue. Root not a group, or root with a parentRef: `InvalidParent`. Changes to the root group requeue all parentless monitors.
- The root group counts toward the parent depth limit.
- The kuma-sync Flux Kustomization gets the KumaMonitor `healthCheckExprs` entry.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Monitors without a parentRef are placed under the root group set by
KUMA_ROOT_GROUP (kuma-sync/renner-uno). Only the root references the
email notification, so a fleet-wide outage sends one DOWN and one UP mail
listing the affected groups. resendInterval (consecutive DOWN heartbeats)
is now a managed KumaMonitor field; the root resends hourly while down.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
k.renner
requested review from review-bot 2026-10-30 11:57:39 +00:00
🤖Automated review — model claude-sonnet-5-5, commit 811178e321002c2d69b2a85449f54d25522cf556.
Automated review by the review-bot: it approves only when it found nothing red or yellow, and a human still merges. Request a review from review-bot again for a fresh one.
Summary
This PR adds a root group, kuma-sync/renner-uno, which every KumaMonitor without a parentRef is placed under. Only the root group references the email notification. It also adds a managed resendInterval field, with config parsing, watches and requeues for the root group, and the Flux healthCheckExprs entry. I found no blocking defects in the diff. I did not run the tests.
🟡 Suggestions
ci/images/kuma-sync/internal/controller/kumamonitor_controller.go:rootChanged: this compares only MonitorID, Type, whether ParentRef is set, and deletion state. That covers every field resolveRoot reads, so the predicate is correct. If resolveRoot ever checks more of the root's spec, add that field here too, or the children will not re-reconcile.
ci/images/kuma-sync/internal/kumaclient/breml.go:582: ResendInterval is now a managed field. writeBase overwrites any resend interval set by hand in the Kuma UI with the spec value, and 0 clears it. The PR describes this and tests it, and TestResendIntervalClearedOnUpdate covers the clearing. Worth a mention in the release notes.
Tests
Coverage is good:
Unit tests for config parsing, field mapping and the wire round trip.
Unit tests for root-group behaviour: parenting, pending and invalid states, depth counting, enqueue mapping and the predicate.
Integration test updates, plus CRD validation for a negative resendInterval.
Recommendation
Looks reasonable — no blocking issues; comments above are optional.
🤖 **Automated review** — model `claude-sonnet-5-5`, commit `811178e321002c2d69b2a85449f54d25522cf556`.
> Automated review by the `review-bot`: it approves only when it found nothing red or yellow, and a human still merges. Request a review from `review-bot` again for a fresh one.
---
## Summary
This PR adds a root group, `kuma-sync/renner-uno`, which every `KumaMonitor` without a `parentRef` is placed under. Only the root group references the `email` notification. It also adds a managed `resendInterval` field, with config parsing, watches and requeues for the root group, and the Flux `healthCheckExprs` entry. I found no blocking defects in the diff. I did not run the tests.
## 🟡 Suggestions
- `ci/images/kuma-sync/internal/controller/kumamonitor_controller.go:rootChanged`: this compares only `MonitorID`, `Type`, whether `ParentRef` is set, and deletion state. That covers every field `resolveRoot` reads, so the predicate is correct. If `resolveRoot` ever checks more of the root's spec, add that field here too, or the children will not re-reconcile.
- `ci/images/kuma-sync/internal/kumaclient/breml.go:582`: `ResendInterval` is now a managed field. `writeBase` overwrites any resend interval set by hand in the Kuma UI with the spec value, and 0 clears it. The PR describes this and tests it, and `TestResendIntervalClearedOnUpdate` covers the clearing. Worth a mention in the release notes.
## Tests
Coverage is good:
- Unit tests for config parsing, field mapping and the wire round trip.
- Unit tests for root-group behaviour: parenting, pending and invalid states, depth counting, enqueue mapping and the predicate.
- Integration test updates, plus CRD validation for a negative `resendInterval`.
## Recommendation
Looks reasonable — no blocking issues; comments above are optional.
<!-- pr-review:sha=811178e321002c2d69b2a85449f54d25522cf556 -->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Every KumaMonitor without a parentRef is placed under the root group
kuma-sync/renner-uno(controller envKUMA_ROOT_GROUP). Only the root group references theemailKumaNotification. An outage therefore sends one DOWN mail listing the affected groups ("Child monitors down: …") and one UP mail.resendInterval. It counts consecutive DOWN heartbeats, not minutes (Kuma 2.5.6server/model/monitor.js). The root group uses 60 × 60 s, which sends an hourly reminder while it is down.ParentPendingand requeue. Root not a group, or root with a parentRef:InvalidParent. Changes to the root group requeue all parentless monitors.healthCheckExprsentry.🤖 Generated with Claude Code
🤖 Automated review — model
claude-sonnet-5-5, commit811178e321002c2d69b2a85449f54d25522cf556.Summary
This PR adds a root group,
kuma-sync/renner-uno, which everyKumaMonitorwithout aparentRefis placed under. Only the root group references theemailnotification. It also adds a managedresendIntervalfield, with config parsing, watches and requeues for the root group, and the FluxhealthCheckExprsentry. I found no blocking defects in the diff. I did not run the tests.🟡 Suggestions
ci/images/kuma-sync/internal/controller/kumamonitor_controller.go:rootChanged: this compares onlyMonitorID,Type, whetherParentRefis set, and deletion state. That covers every fieldresolveRootreads, so the predicate is correct. IfresolveRootever checks more of the root's spec, add that field here too, or the children will not re-reconcile.ci/images/kuma-sync/internal/kumaclient/breml.go:582:ResendIntervalis now a managed field.writeBaseoverwrites any resend interval set by hand in the Kuma UI with the spec value, and 0 clears it. The PR describes this and tests it, andTestResendIntervalClearedOnUpdatecovers the clearing. Worth a mention in the release notes.Tests
Coverage is good:
resendInterval.Recommendation
Looks reasonable — no blocking issues; comments above are optional.