Added
- The cut-over of an installation to the kagent API v2 line, in the connectivity chart (giantswarm/agent-platform#346; bumblebee-plans#51 D9, D11). The database: the connectivity chart’s
postgres.databasesmap (introduced with Agent Substrate, giantswarm/agent-platform#342 — one CNPGDatabaseper entry on the existing Cluster,<clusterName>-<key>, owned by the bootstrap role, and apost-install,post-upgradehook Job<release>-postgres-databasesthat derives each entry’s connection Secret<clusterName>-<key>-appfrom the bootstrap Secret<clusterName>-app) gains the shipped entrykagent-v2:spec.name: kagent_v2, thevectorextension,databaseReclaimPolicy: retain, rendered while the kagent component is on. Its derived Secretkagent-pg-kagent-v2-appin the kagent namespace is what the kagent API v2 controller mounts (database.postgres.urlFile; the mount examples andci/test-postgres-values.yamlname it, the fleet template’ssecretNamefollows). The controller refuses the 0.10 schema and no conversation history is migrated, so it starts fresh onkagent_v2; the 0.10 databasekagentstays untouched for 30 days and is then dropped — the newpostgres.applicationDatabase.ensure: absentrendersensure: absenton itsDatabaseobject in the ImageVolume extension mode (the chart otherwise re-creates it after a handDROP), thepsqlcommand otherwise (UPGRADE.md). The bootstrap database’s ownDatabaseandsessionsDatabasekeep their templates. The migration:agentManager.migration(both charts; on by default, rendered when kagent and agent-manager are on) renders a plain Jobagent-platform-connectivity-agent-manager-migrate-<8-hex hash of its image, args and environment>in the kagent namespace runningagent-manager migrate(dryRunadds--dry-run) from agent-manager’s image atimage.tag— the meta chart’s BOM pin for the agent-manager component — as the tenant identitykagent.fluxServiceAccountName(the helper, never the literal), with its inputs as environment (the kagent namespace, the additional managed namespaces, the agent chart’s OCI URL and range, the GitOps namespaces, the platform Harnesskagent,GITHUB_TOKENfromgithubToken.secretName/key, defaultkagent-skills-token/token, optional). Deliberately not a Helm hook: a migrate failure must never fail the upgrade that renders the platform Harness, and the meta chart’s new roster keycomponents.<name>.disableWaitForJobs(install/upgrade.disableWaitForJobs: true, set onagent-platform-connectivity) stops helm-controller from waiting on the release’s Jobs — hooks are unaffected. The hash in the name makes a changed spec a new Job (the old-named one is removed) instead of an immutable-template error; an unchanged spec leaves the completed Job in place, so the expand phase runs when 4.0 first renders the Job and the contract phase is a re-run (a clone by hand, or the next upgrade after the Job’s day-long TTL). Its migration-only rights are plain objects too: ONE ClusterRole oncustomresourcedefinitionsconfined to the five removed CRDs (agents,sandboxagents,agentharnesses,memories,toolserversofkagent.dev) withget,delete, bound by ONE ClusterRoleBinding — the chart’s only cluster-scoped binding — and a Role + RoleBinding (get,listonhelmreleases,ocirepositories) per namespace ingitopsNamespaces(the fleet:flux-giantswarm, where the GitOps-owned agents’ releases live). A network policy in both flavors admits the Job’s egress to DNS, the API server,api.github.comand the agent chart’s registry. The report is the ConfigMapagent-manager-migrate-reportin the kagent namespace (written by the command); a failed phase leaves the v1alpha2 objects in place; a FAILED Job stays a day and can be cloned by hand (kubectl create job --fromtakes CronJob sources only; UPGRADE.md carries the command), or the hooks are re-run withflux reconcile helmrelease --force. An empty tenant identity with the migration on fails the render. The Job and its bindings retire in a later 4.x release.make verify-postgres(verify-postgres-kagent-v2),verify-identity(verify-identity-migration: exactly that one ClusterRoleBinding, none while off) and the newverify-migration(plain Job, stable hash name that changes with the image, the roster key on the connectivity release only) assert it;tests/pick-doc.pyselects one object of a render by kind and name. The ATS kind smoke keepsagentManager.migration.enabled: false— the bare smoke serves no live kagent API v2 formigrateto act on; the migration rehearsal is agentlab#143. No 3.x installation is affected: the connectivity chart of this line is bounded below 4.0; the objects render on the 4.0 line, whose cut-over UPGRADE.md describes.