Skip to content

fix(controller): derive full runtime image from the tag name - #2640

Merged
EItanya merged 9 commits into
kagent-dev:release/v0.10.xfrom
rtemperini:fix/full-image-tag-digest
Sep 28, 2026
Merged

EItanya merged 9 commits into
kagent-dev:release/v0.10.xfrom
rtemperini:fix/full-image-tag-digest

Conversation

@rtemperini

@rtemperini rtemperini commented Aug 31, 2026 •

Copy link
Copy Markdown

Fixes #2586.

Declarative skills agents built the full runtime image by appending -full to IMAGE_TAG. A digest-pinned tag such as 0.10.0-rc3@sha256:… became …@sha256:…-full, which is not a valid OCI reference. The slim and full tags are also different images, so reusing the slim digest would be wrong even if the syntax were valid.

What changed

The controller parses IMAGE_TAG as a tag, a tag@digest, or a digest-only value. The -full suffix is applied only to the tag name (0.10.0-rc3 becomes 0.10.0-rc3-full). The slim digest is never reused on the full image.

Released builds always bake an upstream full digest (ldflags). That value is sandbox fallback only. Declarative skills agents pin the full variant only when the operator sets an explicit runtime full digest.

What operators should set

  • Bare tag (0.10.0-rc3): the full image is app:0.10.0-rc3-full. Nothing extra to set.
  • Tag plus digest (0.10.0-rc3@sha256:…): reconcile fails unless an explicit full digest is set. Python: controller.agentImage.fullDigest (APP_FULL_IMAGE_DIGEST). Go: controller.goAgentImage.fullDigest (GOLANG_ADK_FULL_IMAGE_DIGEST). The baked upstream digest is not used here.
  • Digest-only IMAGE_TAG: fail closed unless that runtime full digest is set.

Why this branch

main deleted the Agent translator (26732e86). The append lives only on release/v0.10.x.

Tests

go test -race on ./core/internal/controller/translator/agent/, including the 0.10.0-rc3@sha256:deadbeef… regression (must not produce …deadbeef…-full) and fail-closed errors that cite the matching Python or Go fullDigest / env flags.

Digest-pinned IMAGE_TAG values produced an invalid OCI reference when
skills agents appended -full after @sha256. Parse tag vs digest, suffix
only the tag, and pin the full variant only with a dedicated digest.

Signed-off-by: Ricardo Temperini <[email protected]>
@rtemperini
rtemperini requested a review from a team as a code owner August 31, 2026 16:38
@github-actions github-actions Bot added the bug Something isn't working label Aug 31, 2026
Released builds always bake APP full digests via ldflags. Treat that
value as sandbox fallback only. Declarative skills agents pin the full
variant only when Helm fullDigest or the matching flag/env is set.

Signed-off-by: Ricardo Temperini <[email protected]>
@github-actions github-actions Bot added bug Something isn't working and removed bug Something isn't working labels Sep 1, 2026
EItanya
EItanya previously approved these changes Sep 4, 2026
@EItanya
EItanya dismissed their stale review September 4, 2026 14:25

Didn't see Jeremy's comment

@github-actions github-actions Bot added bug Something isn't working and removed bug Something isn't working labels Sep 7, 2026
When IMAGE_TAG embeds a slim digest and the operator has not set an
explicit full-variant digest, reconciliation now returns a clear error
instead of silently downgrading skills agents to a mutable tag-full ref.

Signed-off-by: rtemperini <[email protected]>
Go skills agents already fail closed without --golang-adk-full-image-digest,
but the parenthetical still pointed at the Python Helm path and env. Point
operators at controller.goAgentImage.fullDigest / GOLANG_ADK_FULL_IMAGE_DIGEST.

Signed-off-by: rtemperini <[email protected]>
@rtemperini
rtemperini force-pushed the fix/full-image-tag-digest branch from e5c14d1 to 7dd0f71 Compare September 14, 2026 14:20
Comment thread helm/kagent/values.yaml Resolved
rtemperini and others added 2 commits September 23, 2026 10:29
Bare tags still resolve to tag-full. tag@digest without an explicit
fullDigest fails reconcile, so the values comments no longer say
declarative agents default to a tag-only image.

Signed-off-by: rtemperini <[email protected]>
@rtemperini

Copy link
Copy Markdown
Author

thanks for the approval @EItanya, there is anything pending to merge this?

@EItanya
EItanya merged commit 8878c39 into kagent-dev:release/v0.10.x Sep 28, 2026
31 checks passed
teemow added a commit to teemow/kagent that referenced this pull request Oct 2, 2026
* upstream/release/v0.10.x:
  fix(controller): derive full runtime image from the tag name (kagent-dev#2640)
  Bump `kagent-tools` to `0.3.0` (backport to release/v0.10.x) (kagent-dev#2931)
  fix(ui): copy to the clipboard outside a secure context (kagent-dev#2866)
  fix(ui): resync the lockfile, and clear every fixable CVE (kagent-dev#2867)

Signed-off-by: Timo Derstappen <[email protected]>
teemow added a commit to teemow/kagent that referenced this pull request Oct 2, 2026
* upstream/release/v0.10.x:
  fix(controller): derive full runtime image from the tag name (kagent-dev#2640)
  Bump `kagent-tools` to `0.3.0` (backport to release/v0.10.x) (kagent-dev#2931)
  fix(ui): copy to the clipboard outside a secure context (kagent-dev#2866)
  fix(ui): resync the lockfile, and clear every fixable CVE (kagent-dev#2867)

Signed-off-by: Timo Derstappen <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants