01 · Two directions
Git without a cluster, and cluster without a git.
An orphan is a break in the chain between what is written down and
what runs. The assistant checks the chain from both ends. One end is YAML in git that
nothing deploys. The other end is live objects that nothing in git declares.
Each direction is a separate, rule-based scan. No AI model (LLM) decides
whether something is an orphan.
02 · YAML nothing deploys Live
A directory that no Kustomization reaches.
The daily wiring audit computes the closure of every Flux
Kustomization over the repository tree. The closure is the set of files that the Kustomization reaches.
Flux never applies files outside that closure, however correct they look.
Sometimes the fix is a one-line stitch into a parent
kustomization.yaml. Then you get a draft merge request (MR). A whole
unreferenced directory becomes an issue, because only you know
whether it is future work or a forgotten copy.
03 · Objects nothing declares Live
Uninstall residue: still running, owned by nobody.
Every four hours the assistant checks the cluster side the other way.
It looks at ServiceMonitors, PodMonitors, PrometheusRules and NetworkPolicies.
It reports in an issue any that no scanned repository declares and no
live HelmRelease manages.
A leftover NetworkPolicy still shapes traffic. A stale
PrometheusRule still pages. That is why these are worth finding.
04 · What prune: false keeps alive Live
Removed from git, never removed from the cluster.
Flux only removes deleted objects when a Kustomization has
prune: true. With prune off, deleting a file in git leaves
the object running. The assistant compares each Kustomization's own
applied inventory with the live objects that carry its labels.
An object must show up as orphaned on three consecutive runs. Only then
does the assistant report it, in one digest per cluster. The assistant never proposes
flipping prune. That is your call.
05 · Idle volumes In development
A volume nothing has mounted for months.
The relic census lists PersistentVolumeClaims older than a threshold
(90 days by default). It checks them against every live pod and every
workload template. This includes CronJobs and Deployments scaled to
zero, so a paused consumer still counts as a consumer.
The assistant matches StatefulSet claims to their ordinals. It leaves alone a volume reserved
by a StatefulSet parked at zero replicas. The relic census is built and
tested, but it is opt-in and not yet switched on in production.
06 · Hibernated databases In development
A database put to sleep, that nothing will ever wake.
A CloudNativePG cluster with hibernation on keeps its storage and
costs money. The census looks for any reference to its
-rw, -r or -ro services in
pod and workload env, args, commands and volumes.
If nothing references the cluster, the assistant reports it as a relic. It does not read Secret and
ConfigMap contents, and the issue says so.
07 · Absence must be proven
"I could not see it" is never "it is not there".
An orphan claim is a claim of absence. So every read behind it must
be complete. Sometimes a list of HelmReleases, pods or workloads is denied,
cut short or malformed. Then the scan withholds the verdict for that
cluster and logs why. It does not report everything as unused.
You can put a skip annotation on anything that you want left alone. The
scan will not mention it again.
08 · Where it is going Roadmap
Owners who left, siblings that drifted, and a price on each.
Planned: resources whose declared owner or team no longer exists.
Also planned: environments that drifted apart from their siblings. One example is a file that
was identical in staging and production until someone changed only one copy.
Planned: an estimated monthly cost next to each relic, so you can sort the list
by what cleanup is worth. Until then, the issue shows the
size and storage class, not a price.