Skip to content

Agent proofs assert the Generic chart 1.x contract: HelmRelease → AgentTemplate + per-agent RemoteMCPServer, commit-pinned skills, 1.x range; one agent helper; the v1alpha2 proofs, dispatch and heals retire with 4.0 #140

Description

@teemow

Plan: giantswarm/bumblebee-plans#51 (PRD: D7, D8, D12, D14; grill Q4 "Generic chart 1.x stays"; "agent-manager (D8, D10, D11)") · Epic: giantswarm/giantswarm#37705

Problem

agentlab's v2 proofs (v0.28) assert the POC's agent shape: agent-manager and the portal path write an AgentTemplate plus a toolset-carrier RemoteMCPServer muster-<agent> directly, admitted by the label kagent.dev/harness: kagent. The released-line proofs (*_v1.go: Agent CRs delivered as HelmReleases, A2A through the kagent UI route) run behind a served-CRD dispatch (agentCRDServed()), and the Agent-CR heals (the golang-adk image heal, the iconUrl CRD patch) are skipped when the CRD is absent.

The decided shape is different (D7, D8, D12, grill Q4): the Generic chart 1.x stays the agent unit. A HelmRelease per agent renders the AgentTemplate (description, system prompt, model, tools, skills, display-name annotation, a new icon-URL annotation, the Harness label) and — unless the toolset is preset:none — a RemoteMCPServer named after the agent carrying X-Muster-Toolset. Skills are {name, git: {url, commit}, path} (or {name, oci: <digest>}) entries pinned at write time: agent-manager's create_agent/update_agent pin them, list_skills returns the default branch's commit, update_agent gains refreshSkills. agent-manager reads readiness from status.harnesses[] and reports ready/progressing/failed. The per-namespace OCIRepository carries the range 1.x, not x.x.x. Once meta chart 4.0 is the released line and the lab's default chart version is 4.x, no released kagent serves agents.kagent.dev any more: the dispatch, the v1 proofs and the heals are dead code the PRD removes ("the v1alpha2 CRD probe is removed; a single helper knows how an agent is created and when it is ready", D14). Today three spellings of "create an agent and know when it is ready" coexist (agent-manager's get_agent_status, the direct AgentTemplate helper, the portal composer).

Proposed solution

agents-test, toolsets-test and models-test assert the 1.x contract on the line that ships it (dev builds first, the released 4.0 after): agent-manager's create writes a HelmRelease as the caller (managedFields) whose render is the AgentTemplate on the platform Harness — the admission label as connectivity 4.0 and chart 1.x define it (the PRD names agent-platform.giantswarm.io/harness: kagent; the dev channel today uses kagent.dev/harness) — and the per-agent RemoteMCPServer with the toolset header, none for preset:none; the HelmRelease's values.toolset stays the stable anchor; the OCIRepository range is 1.x; a create with a git skill from a public repository lands a full-commit entry on the template (the fixture of #137), list_skills returns commits, refreshSkills re-pins to the current head; get_agent_status agrees with status.harnesses[]; get_agent/update_agent keep their shape minus the runtime field. One helper in the lab knows how an agent is created and when it is ready, and every proof uses it (models-test's throwaway, toolsets-test's fixtures, backstage-test's own template). When 4.0 is the released line: DefaultChartVersion moves to 4.x; the served-CRD dispatch, *_v1.go, the iconUrl CRD patch and the golang-adk heal are deleted with their tests; docs/agents.md describes API v2 as the only line; the related HACKS entries are closed or re-scoped; the stable and dev channels run the same proofs.

Dependencies: giantswarm/agent#25 (chart 1.0), agent-manager 1.0 (giantswarm/agent-manager#37), connectivity 4.0 for the Harness label (#138). Until they ship, the proofs stay on the dev channel's POC shape; the helper consolidation can start now.

Acceptance criteria

Working rule: kagent, Substrate and related upstream projects

General rule of epic giantswarm/giantswarm#37705, carried on every sub-issue.

Implementing this epic will surface bugs and gaps in kagent, Substrate and the projects around them (kmcp, agentgateway, the Go ADK, the harnesses). For each of them:

  1. Check upstream first. Search the upstream repository's issues and pull requests, open and closed (kagent-dev/kagent, kagent-dev/substrate, kagent-dev/kmcp, …), and the rows already collected in giantswarm/giantswarm#37742. If upstream tracks it or a pull request is in flight, we align with that work — test it, review it, add our evidence — rather than open a competing change.
  2. Change it in our fork. A change we need lands as a carried patch on the consumed branch of our line — giantswarm/kagent-upstream for kagent, giantswarm/substrate for Substrate, the giantswarm/ fork of any other upstream project (created on the same pattern when there is none). One commit per patch, written upstream-ready (upstream's conventions and tests, DCO sign-off, nothing Giant Swarm-specific in it), recorded in the fork's ledger (FORK.md).
  3. Prepare the upstream pull request in the fork; do not open it yet. The upstream-facing branch and pull-request text are prepared in the fork and listed as a row in giantswarm/giantswarm#37742 — that list is the review queue. Nothing is opened against upstream before the team has reviewed it there. We send in considered batches and only what is useful to upstream, never a stream of Giant Swarm-specific changes.
  4. Giant Swarm-specific behaviour never goes upstream. It lives in the meta chart, the connectivity chart, or in a patch the ledger marks as ours to keep.

Upstream issues we want to file follow the same path: collected in giantswarm/giantswarm#37742, reviewed by the team, then filed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    • Status
      Validation ☑️

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions