Developer Portal

  • What’s Changed

    Changes

    Other Changes

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

  • Fixed

    • AI chat: log “no OpenAI API key configured” at info instead of warn to reduce Sentry noise for customers who haven’t configured the feature.
    • App: stop reporting “Untracked page view” warnings to Sentry for paths that don’t match any registered app route (e.g. bot/scanner probes like /wp-login.php). See ./docs/releases/v0.133.1-changelog.md for more information.
  • Added

    • AI chat: add Opus 4.8 context window info.

    Changed

    • AI chat: make the Anthropic thinking config model-aware so adaptive-thinking Claude models (Opus 4.5+, Sonnet 4.6) use the adaptive thinking interface with a configurable effort (aiChat.anthropic.effort, default high), while older Claude models keep the legacy budget-based interface.

    Fixed

    • AI chat: forward chat-level errors to the error reporter (Sentry) so the “Network error” banner is no longer silent, and log a backend warning when the client disconnects mid-stream. See ./docs/releases/v0.133.0-changelog.md for more information.
  • Fixed

    • AI chat: fix muster MCP connection by dropping the obsolete custom session-aware transport that broke against @modelcontextprotocol/sdk 1.29.0. Muster now uses the spec-standard Mcp-Session-Id header, which @ai-sdk/mcp’s built-in HTTP transport handles natively. See ./docs/releases/v0.132.1-changelog.md for more information.
  • Added

    • Add LatestOciReleaseProcessor that annotates Component entities carrying giantswarm.io/helmcharts with giantswarm.io/latest-release-tag and giantswarm.io/latest-release-date from the referenced OCI registry. For multi-chart entities the highest-semver stable tag wins; prerelease tags are skipped. Toggle via catalog.processors.latestOciRelease.enabled.

    Changed

    • Introduce a new @giantswarm/backstage-plugin-gs-node node-library package and move the container-registry client code into it so it can be shared between gs-backend and the catalog module. Move parseChartRef from plugins/gs to gs-common so it can be used backend-side. See ./docs/releases/v0.132.0-changelog.md for more information.
  • Fixed

    • Catalog: fall back to PAT or unauthenticated requests when the configured GitHub App has no access to a repo, so LatestReleaseProcessor and SbomDependencyProcessor work for repos outside the App’s installation (and public repos work without any integration configured).
    • AI chat: pin the ai package to a single version via root yarn resolution to fix AI_TypeValidationError when invoking MCP tools. See ./docs/releases/v0.131.1-changelog.md for more information.
  • Added

    • Add LatestReleaseProcessor that annotates Component entities with giantswarm.io/latest-release-tag and giantswarm.io/latest-release-date from GitHub Releases, with optional tag-prefix matching for monorepos.
    • Add KlausProvider, a catalog entity provider that discovers Klaus personalities, toolchains, and plugins from GitHub and emits them as Component entities.

    Fixed

  • Added

    • PagerDuty integration: “Who is on call” entity card, catalog processor that auto-annotates entities with PagerDuty IDs, and MCP action to resolve PagerDuty IDs from catalog entities.

    Changed

    • Backstage liveness/readiness probe timings are now configurable via .Values.probes.{liveness,readiness} (initialDelaySeconds, periodSeconds, timeoutSeconds, failureThreshold) and the default timeoutSeconds is raised from the k8s implicit 1 to 5. The HTTP path/port stay fixed (/.backstage/health/v1/{liveness,readiness} on port). The k8s default 1s is tight against the chart’s 500m CPU limit: event-loop stalls during plugin startup, GC, or DB reconnects regularly miss the deadline and surface as Unhealthy: ... context deadline exceeded events even though the pod keeps serving traffic (observed on the BWI Backstage Deployment on spidertron, 2026-05-11). See ./docs/releases/v0.130.0-changelog.md for more information.
  • Fixed

    • Stabilise the AI chat transport across React renders. useChatSetup constructed a fresh AssistantChatTransport on every render and handed it to useChatRuntime; when its identity changed mid-stream (e.g. as a side effect of a state update triggered by streamed reasoning-delta / tool-input-delta events), the runtime tore down the in-flight chat fetch with TypeError: network error. Envoy logged the symptom as response_flags: DC (downstream remote disconnect) against a healthy Backstage upstream while the SSE stream summary was sawFinish=false, last event tool-input-delta, surfacing in the UI as a “Network error” banner even though no real network outage occurred. The transport is now memoised on the resolved API URL and the stable getHeaders / debugFetch callbacks, so a single transport lives for the component’s lifetime.
    • AI chat instrumentation: observe the caller’s AbortSignal and log abort events with the reason inline (ABORT signaled by client at <ms> -- reason: <name>: <message>). Stream-outcome lines now annotate aborted streams with [client-aborted at Nms reason="..."] so a “Network error” banner can be classified as a deliberate client cancel (transport rebuild, unmount, manual stop) versus a real proxy / network failure (no abort signal fired, raw stream error). Read errors that fired after the caller aborted are now logged as console.warn (“cancelled by client AbortSignal”) rather than console.error (“STREAM READ FAILED”), reserving the latter for the genuine pre-finish, non-aborted failure mode.

    See ./docs/releases/v0.129.3-changelog.md for more information.

  • Fixed

    • AI chat instrumentation: render the SSE stream summary inline in the log message (bytes=... events=... sawFinish=... lastEventType=...) instead of attaching it as a trailing object argument, so it stays readable in browser-console consumers that flatten the args array (devtools-snapshotters, log shippers, the Cursor IDE browser, etc.) rather than collapsing to “[object Object]”. Also classify a stream read error that arrives after a finish event was already parsed as a post-completion teardown (console.warn, message already committed) instead of a network failure (console.error); this matches the actual semantics of the AI SDK aborting the underlying fetch once it has finished consuming the stream. See ./docs/releases/v0.129.2-changelog.md for more information.