diff --git a/decisions/2026-10-31-pm-agent-digest-99.md b/decisions/2026-10-31-pm-agent-digest-99.md new file mode 100644 index 0000000..c8ad168 --- /dev/null +++ b/decisions/2026-10-31-pm-agent-digest-99.md @@ -0,0 +1,41 @@ +--- +date: 2026-10-31 +branch: chore/pm-agent-digest-99 +title: Pin pm-agent dispatcher and worker to the agent-runner digest built from PR #99's merge +--- + +## What changed + +- `platform/pm-agent/deployment.yaml`: the dispatcher `image:` moves from + `agent-runner@sha256:df36d9b7…` (images run 383) to + `agent-runner@sha256:14a42ba8281ecd98005f5d99ecda4fb729104c783b01584097c32e104ced1bb2`. + `config-generation` goes from "4" to "5" so the pod rolls. +- `platform/pm-agent/configmap.yaml`: `PM_WORKER_IMAGE` gets the same digest. A comment line + records where it came from. The `# renovate-digest:` marker still sits directly above both + values. +- No other values changed. `PM_DRY_RUN` stays "false". `PM_DECISION_MAX_TURNS` is not set, so + it keeps its in-code default of 1. No `*.sops.yaml` was touched. + +## What I verified + +- PR #99's merge commit is `466f63ec3c3df968a1dab25a8811dcd41961efde` (origin/main HEAD at + branch time). +- The Gitea Actions tasks API shows the `images` workflow (images.yaml) on that commit as + **run 394** (task 643), with event `push` and status `success`. +- I resolved the digest read-only from the registry by HEADing the manifests with OCI and + Docker Accept headers. Both `agent-runner:sha-466f63ec3c3d` and `agent-runner:main` returned + `200`, an `application/vnd.oci.image.manifest.v1+json` content type, and + `docker-content-digest: sha256:14a42ba8281ecd98005f5d99ecda4fb729104c783b01584097c32e104ced1bb2`. + The two are identical. +- Toolbox gate: the rc and skipped stages are in the PR description. + +## What I did NOT verify + +- That the dispatcher actually rolls to the new digest after merge, and that Flux applies it. + Flux's `lastAppliedRevision` and the pod's image were not checked. That is post-merge work. +- That the new image surfaces the triage failure's real cause. It will show only on the next + failing triage, in the dispatcher log. +- That admission (rule 7, `imagePullSecrets`) admits worker Jobs from this digest. The + template comes from `infra/agent/` at PR #99's merge, which still carries the + `imagePullSecrets` entry, but no Job was created to prove it. +- I did not run the image's own selftest against this digest. diff --git a/platform/pm-agent/configmap.yaml b/platform/pm-agent/configmap.yaml index 0ccf073..0784fb9 100644 --- a/platform/pm-agent/configmap.yaml +++ b/platform/pm-agent/configmap.yaml @@ -63,8 +63,11 @@ data: # agent-runner:sha-ddd04d460ef6, pinned in PR #96) bakes a template that carries # `imagePullSecrets: pm-agent-registry`, which is what made turning PM_DRY_RUN off possible # (decisions/2026-10-31-pm-agent-runner-digest.md). A digest older than that would be DENIED. + # The digest below (14a42ba, images run 394, agent-runner:sha-466f63ec3c3d = PR #99's merge) + # adds the CLI failure envelope to triage errors and the PM_DECISION_MAX_TURNS knob + # (decisions/2026-10-31-pm-agent-digest-99.md). # renovate-digest: image=gitea.home.keithjackson.dev/home-network/agent-runner tag=main - PM_WORKER_IMAGE: "gitea.home.keithjackson.dev/home-network/agent-runner@sha256:df36d9b7fef56d141220a387f64fb864cede8e5af30513ebfeb3ab566d3f771d" + PM_WORKER_IMAGE: "gitea.home.keithjackson.dev/home-network/agent-runner@sha256:14a42ba8281ecd98005f5d99ecda4fb729104c783b01584097c32e104ced1bb2" # --- the model ------------------------------------------------------------- # The PM only reads a thread and answers with one JSON object, so it holds no tools and diff --git a/platform/pm-agent/deployment.yaml b/platform/pm-agent/deployment.yaml index 3b958ed..d49f084 100644 --- a/platform/pm-agent/deployment.yaml +++ b/platform/pm-agent/deployment.yaml @@ -48,7 +48,7 @@ spec: # It is a hand-maintained marker rather than a computed hash because Flux's # Kustomization here does not run a configmap generator; bump it in the same commit # as a change to configmap.yaml. - pm-agent.homelab.keithjackson.dev/config-generation: "4" + pm-agent.homelab.keithjackson.dev/config-generation: "5" spec: serviceAccountName: pm-agent # The kubelet's credential for pulling this image. Not the agent's Gitea credential — @@ -78,7 +78,7 @@ spec: # the registry's manifest endpoint on 2026-10-30 and pinned by hand once so the # dispatcher does not wait on Renovate's first run; every later bump is Renovate's. # renovate-digest: image=gitea.home.keithjackson.dev/home-network/agent-runner tag=main - image: gitea.home.keithjackson.dev/home-network/agent-runner@sha256:df36d9b7fef56d141220a387f64fb864cede8e5af30513ebfeb3ab566d3f771d + image: gitea.home.keithjackson.dev/home-network/agent-runner@sha256:14a42ba8281ecd98005f5d99ecda4fb729104c783b01584097c32e104ced1bb2 imagePullPolicy: IfNotPresent command: - /usr/local/bin/pm-dispatch