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)
- 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.
- 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.
- 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.
Problem
The container image every CI agent run uses is decided solely by the
image:digest pins infullsend-ai/agents/harness/*.yaml(fullsend-sandboxfor triage/retro/prioritize/scribe,fullsend-codefor code/review/fix). Nothing updates those pins:release.ymlbuilds and tags:X.Y.Zimages andtag-agentstags agentsmainas-is;resolveAgentsRef()makes release CLI builds fetchagents@tags/<version>, so whatever pins sit on agentsmainship to that version's users.github-actionsandgit-submodules, not docker digests..fullsend/config.yamlhas no image field andFULLSEND_SANDBOX_IMAGEis a local-dev-only knob.So any Containerfile change under
images/sandboxorimages/codethat 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, becausetag-agentsruns in the workflow that builds them).Evidence
pi-xai-vertexextension into the sandbox image (shipped in v0.37.0, rev84c8bbbb). The agents pins still pointed at builds of the aborted 08-23 v0.37.0 attempt (rev1f027be5), so the first live Grok-on-pi run — fullsend-ai/pi-xai-vertex run 32880776870 — selectedxai-vertex/xai/grok-4.6correctly (via feat(#6581): per-agent runtime, model and effort on agents: entries #6583's per-agentagents:settings) and then died:Failed to load extension "/usr/local/share/pi-extensions/xai-vertex": Extension path does not exist.:0.37.0digests). Previous manual bump: Enable fleet agents on the pi runtime agents#935.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)
repin-agents-imagesjob inrelease.yml(aftersandbox-imagesfinishes for the tag) resolvesghcr.io/fullsend-ai/fullsend-{sandbox,code}:X.Y.Zto digests (skopeo inspect/docker buildx imagetools inspect), rewrites the sevenimage: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.harness/*.yamlwithpinDigests: truetracking the:0.Xtag. Automates the PR; still one release behind; no fullsend-side change.:X.Y.Zfor release CLIs,:dev/:latestfor main), mirroringresolveAgentsRef(), 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
fullsend-sandbox/fullsend-codeharness pin at that release's digests, with the revision label verified to equal the release commit.