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 walks it from both ends: YAML in git that
nothing deploys, and live objects that nothing in git declares.
Each direction is a separate, deterministic scan. No model 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. Files outside that closure
are never applied, however correct they look.
Where the fix is a one-line stitch into a parent
kustomization.yaml, you get a draft 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 cluster side is walked the other way.
ServiceMonitors, PodMonitors, PrometheusRules and NetworkPolicies
that are neither declared in a scanned repository nor managed by a
live HelmRelease are reported as an issue.
A leftover NetworkPolicy still shapes traffic, and 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 garbage-collects when a Kustomization has
prune: true. With it 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 before
it is reported, 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) and checks them against every live pod and every
workload template, including CronJobs and Deployments scaled to
zero, so a paused consumer still counts as a consumer.
StatefulSet claims are matched to their ordinals: a volume reserved
by a StatefulSet parked at zero replicas is left alone. Built and
tested, opt-in, 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.
No reference anywhere and it is reported as a relic. Secret and
ConfigMap contents are not read, 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. If listing HelmReleases, pods or workloads was denied,
truncated or malformed, the scan withholds the verdict for that
cluster and logs why, rather than report everything as unused.
Anything you want left alone can carry a skip annotation, and 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,
and environments that drifted apart from their siblings (a file that
is identical in staging and production today, changed in only one).
Planned: an estimated monthly cost next to each relic, so the list
can be sorted by what cleanup is worth. Today the issue carries the
size and storage class, not a price.