Skip to content

release: automate the fullsend-ai/agents harness image digest repin after each release #6607

Description

@waynesun09

Problem

The container image every CI agent run uses is decided solely by the image: digest pins in fullsend-ai/agents/harness/*.yaml (fullsend-sandbox for triage/retro/prioritize/scribe, fullsend-code for code/review/fix). Nothing updates those pins:

  • release.yml builds and tags :X.Y.Z images and tag-agents tags agents main as-is; resolveAgentsRef() makes release CLI builds fetch agents@tags/<version>, so whatever pins sit on agents main ship to that version's users.
  • agents' Renovate manages only github-actions and git-submodules, not docker digests.
  • .fullsend/config.yaml has no image field and FULLSEND_SANDBOX_IMAGE is a local-dev-only knob.

So any Containerfile change under images/sandbox or images/code that a runtime needs reaches users only after a manual repin PR in agents, and the design has an inherent one-release lag (an agents tag can never reference its own release's images, because tag-agents runs in the workflow that builds them).

Evidence

Goal

After a fullsend release, the agents harness pins move to that release's image digests without a human remembering to do it, keeping digest immutability.

Options (not decided)

  1. Release-driven PR: a repin-agents-images job in release.yml (after sandbox-images finishes for the tag) resolves ghcr.io/fullsend-ai/fullsend-{sandbox,code}:X.Y.Z to digests (skopeo inspect / docker buildx imagetools inspect), rewrites the seven image: lines and opens a PR against agents (bot-authored, DCO-signed). Merging is still a human step but the PR is never forgotten; the one-release lag remains.
  2. Renovate in agents: a custom regex manager over harness/*.yaml with pinDigests: true tracking the :0.X tag. Automates the PR; still one release behind; no fullsend-side change.
  3. Runtime-resolved image: harness pins by name only and fullsend selects the tag from its own build version (:X.Y.Z for release CLIs, :dev/:latest for main), mirroring resolveAgentsRef(), verifying the tag's digest at pull. Removes the lag entirely but changes the harness contract and gives up static digests in the harness file.

Whichever lands, docs/ should state the convention (pins reference release-tagged digests, never main :latest) and the release checklist should stop listing the manual repin.

Acceptance

  • A release of fullsend results in an agents PR (or an automatic resolution) that points every fullsend-sandbox/fullsend-code harness pin at that release's digests, with the revision label verified to equal the release commit.
  • The manual step is removed from the release-gate practice page / release docs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    component/ciCI pipelines and checkscomponent/harnessAgent harness, config, and skills loadingcomponent/sandboxOpenShell sandbox environmentenhancementfeatureFeature-category issue awaiting human prioritizationneeds-designpriority/highSignificant impact, address soontriagedTriaged but awaiting human prioritization

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions