01 · Which platform is this?
Flavour and platform come from authoritative signals.
The cluster-deployment scan asks the API server what it serves. The
config.openshift.io Infrastructure object means
OpenShift. Its status.platform says vSphere,
bare metal or Azure. harvesterhci.io will mean Harvester (roadmap).
The scan reads RKE2 and k3s from node markers. It reads AKS from its node-pool
labels.
Absence is not evidence. A cluster with no cloud labels is
unknown, not "bare metal". A vSphere cluster that runs
another vendor's CSI driver is still vSphere.
02 · A runtime that cannot write
Read-only is a property of the code, not a flag.
The reach census runs in a separate, sealed runtime. Its import
graph does not contain the merge-request writer, the proposal store,
the chat notifier, the AI model (LLM) engine or any credential loader.
A test walks that graph on every change. The test must also catch a planted violation.
It reads a local clone at an immutable commit through plain git
plumbing. It never fetches, checks out or touches the working tree.
No AI model sees your YAML during the census.
03 · Hub and spokes
A file's cluster is decided by its parent, not its path.
In a hub-and-spoke Flux layout, the hub reconciles everything. It
reaches each spoke through a kubeConfig secret. Plain
objects under a Kustomization with spec.kubeConfig land
on the spoke. A HelmRelease patched to carry a
kubeConfig lives on the hub. Its chart installs
into the spoke.
The graph resolves every file to a controller, object and workload
cluster, or to "unresolved". It never quietly assumes "local".
04 · Topology findings
The mistakes that only a topology can show.
Rule-based checks run over the graph and find these mistakes.
A HelmRelease inside a
spoke-applied layer is fatal, because spokes have no HelmRelease CRD (custom resource definition).
The checks also find a path that no Kustomization covers and a ${VAR} that nobody declares.
They find a directory that Flux applies recursively because it has no
kustomization.yaml. They find a Namespace that a hub-render layer
quietly creates on the hub.
If you already run your own render-based check, the assistant compares the graph
with it, Kustomization by Kustomization. On the first real customer setup, the two
agreed on every Kustomization.
05 · Who owns each object?
Ownership is per object, read from the hub's inventory.
Real setups are mixed. In one namespace, Flux may own the
Namespace, RBAC and Routes. A CI script may apply the Deployments.
A namespace allowlist is only a ceiling.
You grant read-only access during the session. With it, the census
reads each Flux Kustomization's status.inventory on
the controller cluster. It marks every object as in-inventory, not in-inventory,
or abstain. The census reports the objects that Flux does not own. It never assumes that git manages them.
06 · How much can we actually analyse?
An unanalysed repository must never read as clean.
The coverage meter counts four things per Flux root. It counts files placed, files
unresolved, and kustomize render inputs. It also counts kinds that the shipped agents
do not handle yet: OpenShift Route,
EgressIP, MachineConfig, OLM
subscriptions, KubeVirt VirtualMachine.
The report lists those kinds as "seen, not analysed", with the count. Then nobody mistakes a
quiet result for a healthy one. The number also
tells us which platform pack to build next.
07 · Argo CD Roadmap
The same questions, asked of a different controller.
Planned: Argo CD Application and
ApplicationSet graphs as a second reconciliation
source. The census already keeps "which cluster does this file
land on" and "who owns this object" apart from the Flux specifics. An Argo CD reader
plugs in at that seam.
08 · Below the cluster Roadmap
Terraform and OpenTofu: measured state versus declared state.
Planned: the same loop applied to cloud infrastructure code. The assistant reads
the declared resources and the provider's actual state. Where they disagree, it proposes
the minimal reviewed diff. It manages only what
the repository declares.
Nothing on this step exists yet. It is where the platform coverage
is heading.