Fixed
- The kagent controller metrics
Servicethe connectivity chart renders (<release>-kagent-controller-metrics, the target of itsServiceMonitor) selected the controller pods with the connectivity release’s ownapp.kubernetes.io/instancelabel. Under the retired standalone umbrella every subchart shared one release name, so that matched; under the meta chart each component is its own release — the kagent pods carryapp.kubernetes.io/instance: kagent, the component key the meta chart fixes as the release name — and the Service had no endpoints: the controller was never scraped on any installation with kagent and the monitors on (#305). The selector now names kagent’s release through the new connectivity helperagent-platform.kagent.releaseName; the fallbacks of the controller route’s backend host, the UI route’s Service and the oauth2-proxy Service (kagent.fullnameOverride/kagent.oauth2-proxy.fullnameOverride, pinned in values.yaml, else.Release.Name) go throughagent-platform.kagent.fullname/ the release-name helper too — the same wrong assumption, latent behind the pins. No compatibility knob: the meta chart is the chart’s only consumer. No installation needs to act: the Service’s selector changes (a Service update, no pod rolls) and kagent controller scraping starts working; every other object is byte-identical.make verify-globalasserts the selector and that no kagent template falls back to.Release.Name. - A first
helm installwithcomponents.kagent.enabledon a cluster without thekagentnamespace deadlocked: the kagent chart installs intokagent.namespaceOverridewhile itsHelmReleasetargets the platform namespace (soinstall.createNamespacenever createskagent), and the one chart object that does create it — the connectivity chart’sNamespace— sits in a release thatdependsOnkagent. Every kagent attempt failed withnamespaces "kagent" not founduntil the retries were exhausted, everything behind kagent waited,helm install --waittimed out (#306). With the bundled engine the meta chart now runs onepre-install,pre-upgradehook Job,<release>-kagent-namespace(weight -8,alpine/k8s, as the hook ServiceAccount, whose own hook events gainpre-install,pre-upgradewhile this hook renders): it creates the namespace when it is missing, waits out one that is still terminating (the reinstall right after an uninstall), and leaves an existing one alone. TheNamespaceis deliberately not an object of the meta release — the connectivity release renders and tracks it, adopting the hook-created one exactly as it adopts the one Giant Swarm’s bases pre-create, and two Helm releases must never track one object. Not rendered with the engine off (the fleet’s pure render is byte-identical; a cluster’s own Flux gets the namespace out of band), with kagent off, withkagent.namespaceOverrideempty or equal to theHelmReleases’ target namespace. Measured on kind (kagent on, no namespace):helm install --waitdeployed,helm upgradeidempotent,helm uninstall --waitclean with the namespace gone through the connectivity release, reinstall clean.make verify-engineasserts the hook and its absences; the ATS kind smoke can turn kagent on from this version.