Release 0.5.3 — CRD-Free Gateway and Release-Name Defaults
Released: 2026-05-29 Chart:
oci://ghcr.io/cnoe-io/charts/ai-platform-engineering:0.5.3Previous release: 0.5.2
Highlights
0.5.3 makes AgentGateway CRD-free by default. The new global.agentgateway.routingMode defaults to static, so enabling the gateway renders the standalone proxy's own config instead of Gateway API / AgentGateway custom resources — no cluster-scoped CRDs and no controller install required, which keeps helm diff and helm upgrade clean on clusters you do not own. The chart also stops hardcoding ai-platform-engineering-* service URLs: in-cluster defaults are now computed from the Helm release name in the deployment templates, so installs under a custom release name resolve their supervisor, Keycloak, OpenFGA, skill-scanner, and bot URLs correctly without manual overrides. Rounding out the release, every agent gains proper Kubernetes startup/liveness/readiness probe semantics, and a Twisted bump closes a DNS-compression DoS in the RAG web loader.
What's New
AgentGateway Routing
- CRD-free static routing by default —
global.agentgateway.routingModenow defaults tostatic, which writes MCP routes into the standalone AgentGateway proxy's static config (one/mcp/<id>route/backend per target) instead of renderingGateway,HTTPRoute,AgentgatewayBackend, andAgentgatewayPolicycustom resources. Enabling AgentGateway therefore no longer depends on thegateway.networking.k8s.io/agentgateway.devCRDs or a Gateway controller; MCP endpoints stay discoverable through the proxy admin/configendpoint that the CAIPE UI discover/sync flow reads. A newglobal.agentgateway.static.jwtAuthblock adds optional listener-level JWT validation for the standalone proxy, and the UI recovers each MCP route path from the livepathPrefixshape. SetroutingMode: gateway-apito opt back into the controller-managed Gateway data plane (#1629)
Helm Release-Name Defaults
- Release-name-aware service URLs — in-cluster service URL defaults that were previously hardcoded to
ai-platform-engineering-*(or a literal{{ .Release.Name }}string) are now left empty and computed from the actual Helm release name inside the deployment templates. This covers the supervisor (A2A_BASE_URL), Keycloak (KEYCLOAK_URL), OpenFGA (httpUrl/OPENFGA_HTTP), skill-scanner (SKILL_SCANNER_URL), the Slack and Webex bot admin APIs, the credential service, the SLIM endpoint, and the OpenFGA authz-bridge JWKS URL — so ahelm install foo …resolves tofoo-keycloak,foo-openfga, and so on instead of silently pointing at the wrong service. Realm URL defaults also honorKEYCLOAK_REALMinstead of a hardcodedcaipe(#1612)
Health & Probes
- Real Kubernetes probe semantics across agents — agents migrate from TCP to HTTP probes and gain startup probes; the supervisor registers
/healthand/readyroutes on the A2A app, dynamic-agents and rag-server get corrected liveness semantics, skill-scanner and langgraph-redis get startup probes, and readiness endpoints now return HTTP 503 when their dependencies are unavailable so traffic is held off until a pod is genuinely ready (#1468)
Docs
- Versioned docs generated at build time — the documentation site now materializes versioned docs from release tags at build time rather than committing
versioned_docs/trees, and the RBAC reference's broken anchor and unreadable draw.io SVGs are repaired
Bug Fixes
- ui: recover the AgentGateway MCP route path from the live
pathPrefixshape so discovered routes match the proxy config (#1629) - helm: wire the CAIPE UI to the AgentGateway proxy for CRD-free MCP discovery (#1629)
- helm: fix whitespace trimming that caused YAML parse errors in deployment env blocks and compute release-name service URL defaults in templates (#1612)
- ui: collapse the top bar on narrow screens and label the collapsed nav menu
Security
- rag: bump Twisted to 26.4.0 to close a DNS-compression denial-of-service in the web loader
- deps: bump PyJWT from 2.10.1 to 2.13.0 in the OpenFGA authz bridge, and force
uuid >= 11.1.1via overrides in the UI and docs builds
Breaking Changes
AgentGateway routing defaults to static (CRD-free). If you run with global.agentgateway.enabled: true and rely on the chart rendering Gateway API / AgentGateway custom resources (the controller-managed data plane), you must now set global.agentgateway.routingMode: gateway-api explicitly. With the default global.agentgateway.enabled: false, there is no impact.
Known Issues
None known at this time.
Upgrade
helm upgrade ai-platform-engineering \
oci://ghcr.io/cnoe-io/charts/ai-platform-engineering \
--version 0.5.3 \
-f your-values.yaml
Upgrade Guide: 0.5.2 → 0.5.3
Overview
For a stock deployment — default release name ai-platform-engineering, AgentGateway disabled — 0.5.3 is a drop-in upgrade. Two things are worth knowing before you upgrade: the AgentGateway routingMode default flipped to static, and many in-cluster service URL defaults are now computed from the Helm release name instead of being hardcoded. Neither changes behavior for the default release name, but both matter if you enable AgentGateway or run under a custom release name.
Helm Values Changes
Behavioral Change: AgentGateway routingMode
Affected key: global.agentgateway.routingMode (new key, defaults to static)
Before (0.5.2): enabling AgentGateway rendered Gateway API / AgentGateway custom resources (required the CRDs + a controller).
After (0.5.3):
global:
agentgateway:
enabled: true
routingMode: static # NEW default — no CRDs, no controller
Action: If you depend on the controller-managed Gateway data plane (Gateway API CRs), set routingMode: gateway-api explicitly. Otherwise no action — static requires no CRDs and keeps helm upgrade clean.
Changed Defaults: Release-Name Service URLs
A set of service URL keys changed their default from a literal ai-platform-engineering-* / {{ .Release.Name }} string to an empty string (""), because the value is now rendered from .Release.Name in the deployment templates. Affected keys include global.slim.endpoint, global.openfga.httpUrl, CAIPE UI A2A_BASE_URL / SKILL_SCANNER_URL / SLACK_BOT_ADMIN_URL / WEBEX_BOT_ADMIN_URL, dynamic-agents KEYCLOAK_URL / OPENFGA_HTTP / CREDENTIAL_API_URL, the Slack/Webex bot CAIPE_API_URL, the Webex admin issuer/JWKS URLs, and the OpenFGA authz-bridge httpUrl / tokenValidation.jwksUrl.
Action:
- Default release name (
ai-platform-engineering): none — the rendered value is identical to the old hardcoded default. - Custom release name: you can now remove any manual overrides you previously added to point these at
<release>-…; the empty default resolves correctly on its own. - If you explicitly set any of these to an external endpoint, your override is preserved.
New Optional Fields
| Key | Default | Description |
|---|---|---|
global.agentgateway.static.jwtAuth.enabled | false | Listener-level JWT validation for the standalone proxy (static routing mode) |
global.agentgateway.static.jwtAuth.issuer / jwksUrl / audiences | "" / "" / [] | JWT issuer, JWKS URL, and audiences for the static listener policy |
dynamic-agents OPENFGA_HTTP | "" (release-name default) | OpenFGA HTTP endpoint for dynamic-agents authorization |
dynamic-agents OPENFGA_STORE_NAME | caipe-openfga | OpenFGA store name for dynamic-agents |
Data Migrations
No MongoDB schema or data migrations are required.
Upgrade Runbook
1. Update chart version
helm upgrade ai-platform-engineering \
oci://ghcr.io/cnoe-io/charts/ai-platform-engineering \
--version 0.5.3 \
-f your-values.yaml
2. (Only if you use AgentGateway with CRDs) Pin routing mode
global:
agentgateway:
enabled: true
routingMode: gateway-api
3. Verify
kubectl get pods -n <namespace>
# Probes are stricter now — confirm pods reach Ready and stay there
kubectl get pods -n <namespace> -o wide
If AgentGateway is enabled in static mode, confirm MCP routes resolve through the proxy admin /config endpoint (the UI discover/sync flow reads from there) rather than expecting HTTPRoute objects.
Full Values Diff
Raw diff (0.5.2 → 0.5.3)
@@ global.slim @@
- endpoint: "http://ai-platform-engineering-slim:46357"
+ endpoint: ""
@@ global.agentgateway @@
+ routingMode: static
+ static:
+ jwtAuth:
+ enabled: false
+ issuer: ""
+ jwksUrl: ""
+ audiences: []
extAuth:
enabled: false
- serviceName: "ai-platform-engineering-openfga-authz-bridge"
+ serviceName: ""
@@ global.openfga @@
- httpUrl: "http://{{ .Release.Name }}-openfga:8080"
+ httpUrl: ""
@@ caipe-ui.config @@
- A2A_BASE_URL: "http://ai-platform-engineering-supervisor-agent:8000"
+ A2A_BASE_URL: ""
- SKILL_SCANNER_URL: "http://{{ .Release.Name }}-skill-scanner:8000"
+ SKILL_SCANNER_URL: ""
- SLACK_BOT_ADMIN_URL: "http://ai-platform-engineering-slack-bot:3001"
+ SLACK_BOT_ADMIN_URL: ""
- WEBEX_BOT_ADMIN_URL: "http://ai-platform-engineering-webex-bot:3002"
+ WEBEX_BOT_ADMIN_URL: ""
@@ dynamic-agents.config @@
- KEYCLOAK_URL: "http://ai-platform-engineering-keycloak:8080"
+ KEYCLOAK_URL: ""
+ OPENFGA_HTTP: ""
+ OPENFGA_STORE_NAME: "caipe-openfga"
- CREDENTIAL_API_URL: "http://ai-platform-engineering-caipe-ui:3000/api/credentials"
+ CREDENTIAL_API_URL: ""
@@ slack-bot.config / webex-bot.config @@
- CAIPE_API_URL: "http://ai-platform-engineering-caipe-ui:3000"
+ CAIPE_API_URL: ""
- WEBEX_ADMIN_JWT_ISSUER: "http://ai-platform-engineering-keycloak:8080/realms/caipe"
- WEBEX_ADMIN_JWKS_URL: "http://ai-platform-engineering-keycloak:8080/realms/caipe/protocol/openid-connect/certs"
+ WEBEX_ADMIN_JWT_ISSUER: ""
+ WEBEX_ADMIN_JWKS_URL: ""
@@ openfga-authz-bridge @@
- httpUrl: "http://{{ .Release.Name }}-openfga:8080"
+ httpUrl: ""
- jwksUrl: "http://{{ .Release.Name }}-keycloak:8080/realms/caipe/protocol/openid-connect/certs"
+ jwksUrl: ""
