Developer Portal

  • Fixed

    • CI: cap the release image build to linux/amd64. The devctl-generated config built a multi-arch (amd64+arm64) image, but the arm64 cross-build of the backend’s native modules (isolated-vm, better-sqlite3, keytar) runs under QEMU emulation and silently exceeds the orb’s 20m no-output timeout, which blocked the tag pipeline (and therefore the chart catalog push) on v0.137.1. Every prior release was single-arch amd64 and the management clusters are amd64, so arm64 is unused. See ./docs/releases/v0.137.2-changelog.md for more information.
  • Changed

    • CI: prepare for the devctl-generated CircleCI config. The repo-specific jobs (the Node buildjob that feeds the image build, and the second control-plane-catalog chart push) move to .circleci/custom.yml; the .ats/main.yaml smoke-test config and a renovate-custom.json5 (preserving the repo’s Renovate reviewers, package groups, and schedule) are added so the upcoming generated config.yml/workflows.yml and regenerated renovate.json5 keep the existing behavior. See ./docs/releases/v0.137.1-changelog.md for more information.
  • Changed

    • Auth: make the muster cluster-token broker the single per-cluster access path. Broker-backed installations (those with gs.installations.<name>.clusterTokenAudience) no longer fall back to the per-cluster OAuth popup or the cookie-based /refresh; the connector mints their tokens silently and, when the main Dex session is missing, triggers exactly one main SSO re-login and retries. Per-cluster failures now surface as a typed error with a coarse reason instead of failing silently. The gs auth backend module registers only the main gs.authProvider, so a stray oidc-<mc> provider block can no longer stall startup on an unreachable Dex’s metadata discovery.
    • Clusters: render the clusters list incrementally and non-blocking. Each kubernetes proxy request is now bounded by an AbortController timeout, healthy clusters appear as soon as they resolve instead of waiting on a hung installation, and persistently failing clusters back off with a capped exponential retryDelay.

    Added

    • A persistent cluster-access status element in the sidebar (badge + popover) listing each accessed cluster with its state (healthy / degraded / session-expired) and a human-readable reason, with a “Sign in again” action when the main session expired. See ./docs/releases/v0.137.0-changelog.md for more information.
  • Added

    • Auth: mint per-management-cluster tokens silently through the muster token broker instead of per-cluster OAuth popups. A new authenticated POST /api/auth/cluster-token/:installation backend route exchanges the user’s main Dex ID token for a short-lived cluster token (RFC 8693), cached per user and installation; the kubernetes auth connectors try this silent path before the cookie-based refresh, keeping the legacy popup as fallback for unmigrated clusters. Configured via gs.clusterTokenBroker; installations marked with gs.installations.<name>.clusterTokenAudience disappear from the provider settings page, collapsing it to the single main login.
    • AI chat / muster: forward the main Dex ID token as the MCP bearer token when an MCP server’s authProvider has no dedicated auth.providers entry, enabling single sign-on for muster. Deployments activate this by removing the mcp-muster provider from auth.providers, which also removes the separate PKCE login from the user settings page. See ./docs/releases/v0.136.0-changelog.md for more information.
  • Fixed

    • Muster: fix the Workflows page failing with “tool not found” against real muster servers. The muster aggregator only exposes its meta-tools over MCP, so the workflow proxy now invokes the core workflow tools through the call_tool meta-tool and unwraps its result envelope. See ./docs/releases/v0.135.3-changelog.md for more information.
  • Fixed

    • AI chat: fix chat requests hanging forever when an MCP server is slow or its responses are dropped by the transport. MCP servers now load in parallel with a per-server timeout (15s default, configurable via aiChat.mcp[].timeoutMs); hanging servers degrade gracefully instead of blocking the chat. Also patch @ai-sdk/mcp to treat SSE events without an explicit event: field as message events per the SSE specification, fixing silently dropped responses from MCP servers behind agentgateway. See ./docs/releases/v0.135.2-changelog.md for more information.
  • Added

    • Muster: support muster MCP servers behind per-user auth (authProvider entries in aiChat.mcp). The muster frontend now forwards the user’s OAuth token to the muster backend proxy, which opens per-user MCP sessions. Previously such servers were reported as unconfigured and the Workflows page failed with a 503.

    Changed

    • The shared MCP client cache moved from the AI chat backend plugin to @giantswarm/backstage-plugin-gs-node and is reused by the muster backend plugin.

    Fixed

    • Muster: an aiChat.mcp entry without a name no longer crashes plugin registration; execution fetch errors are surfaced in the workflow detail UI instead of being silently swallowed; duplicate workflow step ids no longer drop nodes from the graph; query parameter validation rejects empty and repeated values. See ./docs/releases/v0.135.0-changelog.md for more information.
  • Added

    • Muster: add workflow visualization. A new muster page renders muster workflow definitions as flow diagrams (one node per step, dashed condition edges) with execution history and live per-step status overlay. Backed by a new muster backend plugin that proxies the muster MCP server’s core_workflow_* tools over REST, reusing the aiChat.mcp entry named muster for connection config. See ./docs/releases/v0.134.0-changelog.md for more information.
  • Changed

    • App: migrate the Clusters, Deployments, Installations, Catalog, and Flux pages to the new frontend system page header. The Flux page’s list and tree views are now header tabs (/flux redirects to /flux/list), and the catalog page title is now just “Catalog” (overridable via app-config).
    • App: migrate the Grafana plugin to the actively maintained @backstage-community/plugin-grafana — a drop-in replacement with no behavior change.

    Fixed

    • Auth: the MCP OAuth2 authenticator now sends the RFC 8707 resource parameter in authorization and token requests when a resource option is configured on an mcp-* auth provider, so issued access tokens are audience-bound to the target MCP server. This fixes the AI chat losing access to MCP servers fronted by JWT-validating gateways that reject tokens without the expected aud claim. See ./docs/releases/v0.133.2-changelog.md for more information.
  • What’s Changed

    Changes

    Full Changelog: https://github.com/giantswarm/happa/compare/v1.72.3...v1.72.4